提交 4df44908 编写于 作者: A alteredq

Fixed particles sorting issues.

Issue 1: when having multiple ParticleSystems, starting since second one particles got sorted according to wrong matrix (it was cumulating all transforms).
Issue 2: particle sorting was using camera transform from the previous frame.

This commit is scary, lot of potential for something getting messed up in a subtle way.
上级 c1ce0dbb
因为 它太大了无法显示 source diff 。你可以改为 查看blob
......@@ -407,7 +407,7 @@ s.target.position.copy(o.target.position);s.lookAt(s.target);s.shadowCameraVisib
format:THREE.RGBAFormat}),k.shadowMapSize=new THREE.Vector2(k.shadowMapWidth,k.shadowMapHeight),k.shadowMatrix=new THREE.Matrix4;if(!k.shadowCamera){if(k instanceof THREE.SpotLight)k.shadowCamera=new THREE.PerspectiveCamera(k.shadowCameraFov,k.shadowMapWidth/k.shadowMapHeight,k.shadowCameraNear,k.shadowCameraFar);else if(k instanceof THREE.DirectionalLight)k.shadowCamera=new THREE.OrthographicCamera(k.shadowCameraLeft,k.shadowCameraRight,k.shadowCameraTop,k.shadowCameraBottom,k.shadowCameraNear,k.shadowCameraFar);
else{console.error("Unsupported light type for shadow");continue}i.add(k.shadowCamera);b.autoUpdateScene&&i.updateMatrixWorld()}if(k.shadowCameraVisible&&!k.cameraHelper)k.cameraHelper=new THREE.CameraHelper(k.shadowCamera),k.shadowCamera.add(k.cameraHelper);if(k.isVirtual&&v.originalCamera==l){r=l;n=k.shadowCamera;m=k.pointsFrustum;s=k.pointsWorld;e.set(Infinity,Infinity,Infinity);h.set(-Infinity,-Infinity,-Infinity);for(o=0;8>o;o++){p=s[o];p.copy(m[o]);THREE.ShadowMapPlugin.__projector.unprojectVector(p,
r);n.matrixWorldInverse.multiplyVector3(p);if(p.x<e.x)e.x=p.x;if(p.x>h.x)h.x=p.x;if(p.y<e.y)e.y=p.y;if(p.y>h.y)h.y=p.y;if(p.z<e.z)e.z=p.z;if(p.z>h.z)h.z=p.z}n.left=e.x;n.right=h.x;n.top=h.y;n.bottom=e.y;n.updateProjectionMatrix()}n=k.shadowMap;m=k.shadowMatrix;r=k.shadowCamera;r.position.copy(k.matrixWorld.getPosition());r.lookAt(k.target.matrixWorld.getPosition());r.updateMatrixWorld();r.matrixWorldInverse.getInverse(r.matrixWorld);if(k.cameraHelper)k.cameraHelper.lines.visible=k.shadowCameraVisible;
k.shadowCameraVisible&&k.cameraHelper.update(k.shadowCamera);m.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);m.multiplySelf(r.projectionMatrix);m.multiplySelf(r.matrixWorldInverse);if(!r._viewMatrixArray)r._viewMatrixArray=new Float32Array(16);r.matrixWorldInverse.flattenToArray(r._viewMatrixArray);if(!r._projectionMatrixArray)r._projectionMatrixArray=new Float32Array(16);r.projectionMatrix.flattenToArray(r._projectionMatrixArray);g.multiply(r.projectionMatrix,r.matrixWorldInverse);f.setFromMatrix(g);
k.shadowCameraVisible&&k.cameraHelper.update(k.shadowCamera);m.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);m.multiplySelf(r.projectionMatrix);m.multiplySelf(r.matrixWorldInverse);if(!r._viewMatrixArray)r._viewMatrixArray=new Float32Array(16);if(!r._projectionMatrixArray)r._projectionMatrixArray=new Float32Array(16);r.matrixWorldInverse.flattenToArray(r._viewMatrixArray);r.projectionMatrix.flattenToArray(r._projectionMatrixArray);g.multiply(r.projectionMatrix,r.matrixWorldInverse);f.setFromMatrix(g);
b.setRenderTarget(n);b.clear();s=i.__webglObjects;for(k=0,n=s.length;k<n;k++)if(o=s[k],m=o.object,o.render=!1,m.visible&&m.castShadow&&(!(m instanceof THREE.Mesh)||!m.frustumCulled||f.contains(m)))m.matrixWorld.flattenToArray(m._objectMatrixArray),m._modelViewMatrix.multiplyToArray(r.matrixWorldInverse,m.matrixWorld,m._modelViewMatrixArray),o.render=!0;for(k=0,n=s.length;k<n;k++)if(o=s[k],o.render)m=o.object,o=o.buffer,b.setObjectFaces(m),p=m.customDepthMaterial?m.customDepthMaterial:m.geometry.morphTargets.length?
d:c,o instanceof THREE.BufferGeometry?b.renderBufferDirect(r,i.__lights,null,p,o,m):b.renderBuffer(r,i.__lights,null,p,o,m);s=i.__webglObjectsImmediate;for(k=0,n=s.length;k<n;k++)o=s[k],m=o.object,m.visible&&m.castShadow&&(m.matrixAutoUpdate&&m.matrixWorld.flattenToArray(m._objectMatrixArray),m._modelViewMatrix.multiplyToArray(r.matrixWorldInverse,m.matrixWorld,m._modelViewMatrixArray),b.renderImmediateObject(r,i.__lights,null,c,m))}j=b.getClearColor();q=b.getClearAlpha();a.clearColor(j.r,j.g,j.b,
q);a.enable(a.BLEND);b.shadowMapCullFrontFaces&&a.cullFace(a.BACK)}};THREE.ShadowMapPlugin.__projector=new THREE.Projector;
......@@ -419,7 +419,7 @@ l.projectionMatrix=b.getUniformLocation(h,"projectionMatrix");j=!1};this.render=
n)/n,(t-u.position.y)/t,Math.max(0,Math.min(1,u.position.z)))):(b.uniform1i(p.useScreenCoordinates,0),b.uniform1i(p.affectedByDistance,u.affectedByDistance?1:0),b.uniformMatrix4fv(p.modelViewMatrix,!1,u._modelViewMatrixArray)),f=u.map.image.width/(u.scaleByViewport?r:1),w[0]=f*s*u.scale.x,w[1]=f*u.scale.y,b.uniform2f(p.uvScale,u.uvScale.x,u.uvScale.y),b.uniform2f(p.uvOffset,u.uvOffset.x,u.uvOffset.y),b.uniform2f(p.alignment,u.alignment.x,u.alignment.y),b.uniform1f(p.opacity,u.opacity),b.uniform3f(p.color,
u.color.r,u.color.g,u.color.b),b.uniform1f(p.rotation,u.rotation),b.uniform2fv(p.scale,w),u.mergeWith3D&&!v?(b.enable(b.DEPTH_TEST),v=!0):!u.mergeWith3D&&v&&(b.disable(b.DEPTH_TEST),v=!1),c.setBlending(u.blending),c.setTexture(u.map,0),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0));b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}};
THREE.DepthPassPlugin=function(){this.enabled=!1;this.renderTarget=null;var a,b,c,d,f=new THREE.Frustum,g=new THREE.Matrix4;this.init=function(e){a=e.context;b=e;var e=THREE.ShaderLib.depthRGBA,f=THREE.UniformsUtils.clone(e.uniforms);c=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f});d=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f,morphTargets:!0});c._shadowPass=!0;d._shadowPass=!0};this.render=function(a,
b){this.enabled&&this.update(a,b)};this.update=function(e,h){var i,l,j,q,k,n;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(!0);b.autoUpdateScene&&e.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);if(!h._viewMatrixArray)h._viewMatrixArray=new Float32Array(16);h.matrixWorldInverse.flattenToArray(h._viewMatrixArray);if(!h._projectionMatrixArray)h._projectionMatrixArray=new Float32Array(16);h.projectionMatrix.flattenToArray(h._projectionMatrixArray);g.multiply(h.projectionMatrix,
b){this.enabled&&this.update(a,b)};this.update=function(e,h){var i,l,j,q,k,n;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(!0);b.autoUpdateScene&&e.updateMatrixWorld();if(!h._viewMatrixArray)h._viewMatrixArray=new Float32Array(16);if(!h._projectionMatrixArray)h._projectionMatrixArray=new Float32Array(16);h.matrixWorldInverse.getInverse(h.matrixWorld);h.matrixWorldInverse.flattenToArray(h._viewMatrixArray);h.projectionMatrix.flattenToArray(h._projectionMatrixArray);g.multiply(h.projectionMatrix,
h.matrixWorldInverse);f.setFromMatrix(g);b.setRenderTarget(this.renderTarget);b.clear();n=e.__webglObjects;for(i=0,l=n.length;i<l;i++)if(j=n[i],k=j.object,j.render=!1,k.visible&&(!(k instanceof THREE.Mesh)||!k.frustumCulled||f.contains(k)))k.matrixWorld.flattenToArray(k._objectMatrixArray),k._modelViewMatrix.multiplyToArray(h.matrixWorldInverse,k.matrixWorld,k._modelViewMatrixArray),j.render=!0;for(i=0,l=n.length;i<l;i++)if(j=n[i],j.render)k=j.object,j=j.buffer,b.setObjectFaces(k),q=k.customDepthMaterial?
k.customDepthMaterial:k.geometry.morphTargets.length?d:c,j instanceof THREE.BufferGeometry?b.renderBufferDirect(h,e.__lights,null,q,j,k):b.renderBuffer(h,e.__lights,null,q,j,k);n=e.__webglObjectsImmediate;for(i=0,l=n.length;i<l;i++)j=n[i],k=j.object,k.visible&&k.castShadow&&(k.matrixAutoUpdate&&k.matrixWorld.flattenToArray(k._objectMatrixArray),k._modelViewMatrix.multiplyToArray(h.matrixWorldInverse,k.matrixWorld,k._modelViewMatrixArray),b.renderImmediateObject(h,e.__lights,null,c,k));i=b.getClearColor();
l=b.getClearAlpha();a.clearColor(i.r,i.g,i.b,l);a.enable(a.BLEND)}};
......
......@@ -193,17 +193,17 @@ THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3
"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}};
THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){if(void 0===a.__webglCustomAttributesList)a.__webglCustomAttributesList=[];for(var e in d.attributes){var g=d.attributes[e];if(!g.__webglInitialized||g.createUniqueBuffers){g.__webglInitialized=!0;var h=1;"v2"===g.type?h=2:"v3"===g.type?h=3:"v4"===g.type?h=4:"c"===g.type&&(h=3);g.size=h;g.array=new Float32Array(c*h);g.buffer=f.createBuffer();g.buffer.belongsToAttribute=e;g.needsUpdate=!0}a.__webglCustomAttributesList.push(g)}}}
function c(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;if(0<=b.materialIndex)return a.geometry.materials[b.materialIndex]}function d(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?!1:a&&void 0!==a.shading&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function e(a){return a.map||a.lightMap||a instanceof THREE.ShaderMaterial?!0:!1}function g(a,b,c){var d,e,g,h,i=a.vertices;h=i.length;
var j=a.colors,k=j.length,m=a.__vertexArray,l=a.__colorArray,n=a.__sortArray,p=a.__dirtyVertices,o=a.__dirtyColors,q=a.__webglCustomAttributesList;if(c.sortParticles){Xa.multiplySelf(c.matrixWorld);for(d=0;d<h;d++)e=i[d].position,Na.copy(e),Xa.multiplyVector3(Na),n[d]=[Na.z,d];n.sort(function(a,b){return b[0]-a[0]});for(d=0;d<h;d++)e=i[n[d][1]].position,g=3*d,m[g]=e.x,m[g+1]=e.y,m[g+2]=e.z;for(d=0;d<k;d++)g=3*d,e=j[n[d][1]],l[g]=e.r,l[g+1]=e.g,l[g+2]=e.b;if(q)for(j=0,k=q.length;j<k;j++)if(i=q[j],
void 0===i.boundTo||"vertices"===i.boundTo)if(g=0,e=i.value.length,1===i.size)for(d=0;d<e;d++)h=n[d][1],i.array[d]=i.value[h];else if(2===i.size)for(d=0;d<e;d++)h=n[d][1],h=i.value[h],i.array[g]=h.x,i.array[g+1]=h.y,g+=2;else if(3===i.size)if("c"===i.type)for(d=0;d<e;d++)h=n[d][1],h=i.value[h],i.array[g]=h.r,i.array[g+1]=h.g,i.array[g+2]=h.b,g+=3;else for(d=0;d<e;d++)h=n[d][1],h=i.value[h],i.array[g]=h.x,i.array[g+1]=h.y,i.array[g+2]=h.z,g+=3;else if(4===i.size)for(d=0;d<e;d++)h=n[d][1],h=i.value[h],
var j=a.colors,k=j.length,m=a.__vertexArray,l=a.__colorArray,n=a.__sortArray,p=a.__dirtyVertices,o=a.__dirtyColors,q=a.__webglCustomAttributesList;if(c.sortParticles){Ob.copy(mb);Ob.multiplySelf(c.matrixWorld);for(d=0;d<h;d++)e=i[d].position,Na.copy(e),Ob.multiplyVector3(Na),n[d]=[Na.z,d];n.sort(function(a,b){return b[0]-a[0]});for(d=0;d<h;d++)e=i[n[d][1]].position,g=3*d,m[g]=e.x,m[g+1]=e.y,m[g+2]=e.z;for(d=0;d<k;d++)g=3*d,e=j[n[d][1]],l[g]=e.r,l[g+1]=e.g,l[g+2]=e.b;if(q)for(j=0,k=q.length;j<k;j++)if(i=
q[j],void 0===i.boundTo||"vertices"===i.boundTo)if(g=0,e=i.value.length,1===i.size)for(d=0;d<e;d++)h=n[d][1],i.array[d]=i.value[h];else if(2===i.size)for(d=0;d<e;d++)h=n[d][1],h=i.value[h],i.array[g]=h.x,i.array[g+1]=h.y,g+=2;else if(3===i.size)if("c"===i.type)for(d=0;d<e;d++)h=n[d][1],h=i.value[h],i.array[g]=h.r,i.array[g+1]=h.g,i.array[g+2]=h.b,g+=3;else for(d=0;d<e;d++)h=n[d][1],h=i.value[h],i.array[g]=h.x,i.array[g+1]=h.y,i.array[g+2]=h.z,g+=3;else if(4===i.size)for(d=0;d<e;d++)h=n[d][1],h=i.value[h],
i.array[g]=h.x,i.array[g+1]=h.y,i.array[g+2]=h.z,i.array[g+3]=h.w,g+=4}else{if(p)for(d=0;d<h;d++)e=i[d].position,g=3*d,m[g]=e.x,m[g+1]=e.y,m[g+2]=e.z;if(o)for(d=0;d<k;d++)e=j[d],g=3*d,l[g]=e.r,l[g+1]=e.g,l[g+2]=e.b;if(q)for(j=0,k=q.length;j<k;j++)if(i=q[j],i.needsUpdate&&(void 0===i.boundTo||"vertices"===i.boundTo))if(e=i.value.length,g=0,1===i.size)for(d=0;d<e;d++)i.array[d]=i.value[d];else if(2===i.size)for(d=0;d<e;d++)h=i.value[d],i.array[g]=h.x,i.array[g+1]=h.y,g+=2;else if(3===i.size)if("c"===
i.type)for(d=0;d<e;d++)h=i.value[d],i.array[g]=h.r,i.array[g+1]=h.g,i.array[g+2]=h.b,g+=3;else for(d=0;d<e;d++)h=i.value[d],i.array[g]=h.x,i.array[g+1]=h.y,i.array[g+2]=h.z,g+=3;else if(4===i.size)for(d=0;d<e;d++)h=i.value[d],i.array[g]=h.x,i.array[g+1]=h.y,i.array[g+2]=h.z,i.array[g+3]=h.w,g+=4}if(p||c.sortParticles)f.bindBuffer(f.ARRAY_BUFFER,a.__webglVertexBuffer),f.bufferData(f.ARRAY_BUFFER,m,b);if(o||c.sortParticles)f.bindBuffer(f.ARRAY_BUFFER,a.__webglColorBuffer),f.bufferData(f.ARRAY_BUFFER,
l,b);if(q)for(j=0,k=q.length;j<k;j++)if(i=q[j],i.needsUpdate||c.sortParticles)f.bindBuffer(f.ARRAY_BUFFER,i.buffer),f.bufferData(f.ARRAY_BUFFER,i.array,b)}function h(a,b){return b.z-a.z}function i(a,b,c){if(a.length)for(var d=0,f=a.length;d<f;d++)aa=Ba=null,sa=J=Ha=Ga=Aa=-1,a[d].render(b,c,lc,mc),aa=Ba=null,sa=J=Ha=Ga=Aa=-1}function m(a,b,c,d,f,e,g,h){var i,j,k,m;b?(j=a.length-1,m=b=-1):(j=0,b=a.length,m=1);for(var l=j;l!==b;l+=m)if(i=a[l],i.render){j=i.object;k=i.buffer;if(h)i=h;else{i=i[c];if(!i)continue;
l,b);if(q)for(j=0,k=q.length;j<k;j++)if(i=q[j],i.needsUpdate||c.sortParticles)f.bindBuffer(f.ARRAY_BUFFER,i.buffer),f.bufferData(f.ARRAY_BUFFER,i.array,b)}function h(a,b){return b.z-a.z}function i(a,b,c){if(a.length)for(var d=0,f=a.length;d<f;d++)aa=Ba=null,sa=J=Ha=Ga=Aa=-1,a[d].render(b,c,mc,nc),aa=Ba=null,sa=J=Ha=Ga=Aa=-1}function m(a,b,c,d,f,e,g,h){var i,j,k,m;b?(j=a.length-1,m=b=-1):(j=0,b=a.length,m=1);for(var l=j;l!==b;l+=m)if(i=a[l],i.render){j=i.object;k=i.buffer;if(h)i=h;else{i=i[c];if(!i)continue;
g&&C.setBlending(i.blending);C.setDepthTest(i.depthTest);C.setDepthWrite(i.depthWrite);y(i.polygonOffset,i.polygonOffsetFactor,i.polygonOffsetUnits)}C.setObjectFaces(j);k instanceof THREE.BufferGeometry?C.renderBufferDirect(d,f,e,i,k,j):C.renderBuffer(d,f,e,i,k,j)}}function k(a,b,c,d,f,e,g){for(var h,i,j=0,k=a.length;j<k;j++)if(h=a[j],i=h.object,i.visible){if(g)h=g;else{h=h[b];if(!h)continue;e&&C.setBlending(h.blending);C.setDepthTest(h.depthTest);C.setDepthWrite(h.depthWrite);y(h.polygonOffset,h.polygonOffsetFactor,
h.polygonOffsetUnits)}C.renderImmediateObject(c,d,f,h,i)}}function j(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function n(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function l(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function q(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function o(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function p(a,b,c,d,e){d.program||C.initMaterial(d,b,c,e);if(d.morphTargets&&
!e.__webglMorphTargetInfluences){e.__webglMorphTargetInfluences=new Float32Array(C.maxMorphTargets);for(var g=0,h=C.maxMorphTargets;g<h;g++)e.__webglMorphTargetInfluences[g]=0}var i=!1,g=d.program,h=g.uniforms,j=d.uniforms;g!==Ba&&(f.useProgram(g),Ba=g,i=!0);if(d.id!==sa)sa=d.id,i=!0;if(i||a!==aa)f.uniformMatrix4fv(h.projectionMatrix,!1,a._projectionMatrixArray),a!==aa&&(aa=a);if(i){if(c&&d.fog)if(j.fogColor.value=c.color,c instanceof THREE.Fog)j.fogNear.value=c.near,j.fogFar.value=c.far;else if(c instanceof
THREE.FogExp2)j.fogDensity.value=c.density;if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){var k,l=0,m=0,n=0,p,o,q,s=nc,u=s.directional.colors,w=s.directional.positions,y=s.point.colors,A=s.point.positions,D=s.point.distances,L=0,M=0,J=q=0;for(c=0,i=b.length;c<i;c++)if(k=b[c],!k.onlyShadow)if(p=k.color,o=k.intensity,q=k.distance,k instanceof THREE.AmbientLight)C.gammaInput?(l+=p.r*p.r,m+=p.g*p.g,n+=p.b*p.b):(l+=p.r,m+=p.g,n+=p.b);else if(k instanceof THREE.DirectionalLight)q=
THREE.FogExp2)j.fogDensity.value=c.density;if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){var k,l=0,m=0,n=0,p,o,q,s=oc,u=s.directional.colors,w=s.directional.positions,y=s.point.colors,A=s.point.positions,D=s.point.distances,L=0,M=0,J=q=0;for(c=0,i=b.length;c<i;c++)if(k=b[c],!k.onlyShadow)if(p=k.color,o=k.intensity,q=k.distance,k instanceof THREE.AmbientLight)C.gammaInput?(l+=p.r*p.r,m+=p.g*p.g,n+=p.b*p.b):(l+=p.r,m+=p.g,n+=p.b);else if(k instanceof THREE.DirectionalLight)q=
3*L,C.gammaInput?(u[q]=p.r*p.r*o*o,u[q+1]=p.g*p.g*o*o,u[q+2]=p.b*p.b*o*o):(u[q]=p.r*o,u[q+1]=p.g*o,u[q+2]=p.b*o),nb.copy(k.matrixWorld.getPosition()),nb.subSelf(k.target.matrixWorld.getPosition()),nb.normalize(),w[q]=nb.x,w[q+1]=nb.y,w[q+2]=nb.z,L+=1;else if(k instanceof THREE.PointLight||k instanceof THREE.SpotLight)J=3*M,C.gammaInput?(y[J]=p.r*p.r*o*o,y[J+1]=p.g*p.g*o*o,y[J+2]=p.b*p.b*o*o):(y[J]=p.r*o,y[J+1]=p.g*o,y[J+2]=p.b*o),k=k.matrixWorld.getPosition(),A[J]=k.x,A[J+1]=k.y,A[J+2]=k.z,D[M]=q,
M+=1;for(c=3*L,i=u.length;c<i;c++)u[c]=0;for(c=3*M,i=y.length;c<i;c++)y[c]=0;s.point.length=M;s.directional.length=L;s.ambient[0]=l;s.ambient[1]=m;s.ambient[2]=n;c=nc;j.ambientLightColor.value=c.ambient;j.directionalLightColor.value=c.directional.colors;j.directionalLightDirection.value=c.directional.positions;j.pointLightColor.value=c.point.colors;j.pointLightPosition.value=c.point.positions;j.pointLightDistance.value=c.point.distances}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||
M+=1;for(c=3*L,i=u.length;c<i;c++)u[c]=0;for(c=3*M,i=y.length;c<i;c++)y[c]=0;s.point.length=M;s.directional.length=L;s.ambient[0]=l;s.ambient[1]=m;s.ambient[2]=n;c=oc;j.ambientLightColor.value=c.ambient;j.directionalLightColor.value=c.directional.colors;j.directionalLightDirection.value=c.directional.positions;j.pointLightColor.value=c.point.colors;j.pointLightPosition.value=c.point.positions;j.pointLightDistance.value=c.point.distances}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||
d instanceof THREE.MeshPhongMaterial)j.opacity.value=d.opacity,C.gammaInput?j.diffuse.value.copyGammaToLinear(d.color):j.diffuse.value=d.color,(j.map.texture=d.map)&&j.offsetRepeat.value.set(d.map.offset.x,d.map.offset.y,d.map.repeat.x,d.map.repeat.y),j.lightMap.texture=d.lightMap,j.envMap.texture=d.envMap,j.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1,j.reflectivity.value=d.reflectivity,j.refractionRatio.value=d.refractionRatio,j.combine.value=d.combine,j.useRefract.value=
d.envMap&&d.envMap.mapping instanceof THREE.CubeRefractionMapping;if(d instanceof THREE.LineBasicMaterial)j.diffuse.value=d.color,j.opacity.value=d.opacity;else if(d instanceof THREE.ParticleBasicMaterial)j.psColor.value=d.color,j.opacity.value=d.opacity,j.size.value=d.size,j.scale.value=I.height/2,j.map.texture=d.map;else if(d instanceof THREE.MeshPhongMaterial)j.shininess.value=d.shininess,C.gammaInput?(j.ambient.value.copyGammaToLinear(d.ambient),j.emissive.value.copyGammaToLinear(d.emissive),
j.specular.value.copyGammaToLinear(d.specular)):(j.ambient.value=d.ambient,j.emissive.value=d.emissive,j.specular.value=d.specular),d.wrapAround&&j.wrapRGB.value.copy(d.wrapRGB);else if(d instanceof THREE.MeshLambertMaterial)C.gammaInput?(j.ambient.value.copyGammaToLinear(d.ambient),j.emissive.value.copyGammaToLinear(d.emissive)):(j.ambient.value=d.ambient,j.emissive.value=d.emissive),d.wrapAround&&j.wrapRGB.value.copy(d.wrapRGB);else if(d instanceof THREE.MeshDepthMaterial)j.mNear.value=a.near,j.mFar.value=
......@@ -211,7 +211,7 @@ a.far,j.opacity.value=d.opacity;else if(d instanceof THREE.MeshNormalMaterial)j.
for(j=0,c=b.length;j<c;j++)if(m=g.uniforms[b[j][1]])if(i=b[j][0],n=i.type,l=i.value,"i"===n)f.uniform1i(m,l);else if("f"===n)f.uniform1f(m,l);else if("v2"===n)f.uniform2f(m,l.x,l.y);else if("v3"===n)f.uniform3f(m,l.x,l.y,l.z);else if("v4"===n)f.uniform4f(m,l.x,l.y,l.z,l.w);else if("c"===n)f.uniform3f(m,l.r,l.g,l.b);else if("fv1"===n)f.uniform1fv(m,l);else if("fv"===n)f.uniform3fv(m,l);else if("v2v"===n){if(!i._array)i._array=new Float32Array(2*l.length);for(n=0,s=l.length;n<s;n++)u=2*n,i._array[u]=
l[n].x,i._array[u+1]=l[n].y;f.uniform2fv(m,i._array)}else if("v3v"===n){if(!i._array)i._array=new Float32Array(3*l.length);for(n=0,s=l.length;n<s;n++)u=3*n,i._array[u]=l[n].x,i._array[u+1]=l[n].y,i._array[u+2]=l[n].z;f.uniform3fv(m,i._array)}else if("v4v"==n){if(!i._array)i._array=new Float32Array(4*l.length);for(n=0,s=l.length;n<s;n++)u=4*n,i._array[u]=l[n].x,i._array[u+1]=l[n].y,i._array[u+2]=l[n].z,i._array[u+3]=l[n].w;f.uniform4fv(m,i._array)}else if("m4"===n){if(!i._array)i._array=new Float32Array(16);
l.flattenToArray(i._array);f.uniformMatrix4fv(m,!1,i._array)}else if("m4v"===n){if(!i._array)i._array=new Float32Array(16*l.length);for(n=0,s=l.length;n<s;n++)l[n].flattenToArrayOffset(i._array,16*n);f.uniformMatrix4fv(m,!1,i._array)}else if("t"===n){if(f.uniform1i(m,l),m=i.texture)if(m.image instanceof Array&&6===m.image.length){if(i=m,6===i.image.length)if(i.needsUpdate){if(!i.image.__webglTextureCube)i.image.__webglTextureCube=f.createTexture();f.activeTexture(f.TEXTURE0+l);f.bindTexture(f.TEXTURE_CUBE_MAP,
i.image.__webglTextureCube);l=[];for(m=0;6>m;m++){n=l;s=m;if(C.autoScaleCubemaps){if(u=i.image[m],y=Ec,!(u.width<=y&&u.height<=y))A=Math.max(u.width,u.height),w=Math.floor(u.width*y/A),y=Math.floor(u.height*y/A),A=document.createElement("canvas"),A.width=w,A.height=y,A.getContext("2d").drawImage(u,0,0,u.width,u.height,0,0,w,y),u=A}else u=i.image[m];n[s]=u}m=l[0];n=0===(m.width&m.width-1)&&0===(m.height&m.height-1);s=H(i.format);u=H(i.type);N(f.TEXTURE_CUBE_MAP,i,n);for(m=0;6>m;m++)f.texImage2D(f.TEXTURE_CUBE_MAP_POSITIVE_X+
i.image.__webglTextureCube);l=[];for(m=0;6>m;m++){n=l;s=m;if(C.autoScaleCubemaps){if(u=i.image[m],y=Fc,!(u.width<=y&&u.height<=y))A=Math.max(u.width,u.height),w=Math.floor(u.width*y/A),y=Math.floor(u.height*y/A),A=document.createElement("canvas"),A.width=w,A.height=y,A.getContext("2d").drawImage(u,0,0,u.width,u.height,0,0,w,y),u=A}else u=i.image[m];n[s]=u}m=l[0];n=0===(m.width&m.width-1)&&0===(m.height&m.height-1);s=H(i.format);u=H(i.type);N(f.TEXTURE_CUBE_MAP,i,n);for(m=0;6>m;m++)f.texImage2D(f.TEXTURE_CUBE_MAP_POSITIVE_X+
m,0,s,s,u,l[m]);i.generateMipmaps&&n&&f.generateMipmap(f.TEXTURE_CUBE_MAP);i.needsUpdate=!1;if(i.onUpdate)i.onUpdate()}else f.activeTexture(f.TEXTURE0+l),f.bindTexture(f.TEXTURE_CUBE_MAP,i.image.__webglTextureCube)}else m instanceof THREE.WebGLRenderTargetCube?(i=m,f.activeTexture(f.TEXTURE0+l),f.bindTexture(f.TEXTURE_CUBE_MAP,i.__webglTexture)):C.setTexture(m,l)}else if("tv"===n){if(!i._array){i._array=[];for(n=0,s=i.texture.length;n<s;n++)i._array[n]=l+n}f.uniform1iv(m,i._array);for(n=0,s=i.texture.length;n<
s;n++)(m=i.texture[n])&&C.setTexture(m,i._array[n])}if((d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==h.cameraPosition)b=a.matrixWorld.getPosition(),f.uniform3f(h.cameraPosition,b.x,b.y,b.z);(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==h.viewMatrix&&f.uniformMatrix4fv(h.viewMatrix,!1,a._viewMatrixArray);d.skinning&&f.uniformMatrix4fv(h.boneGlobalMatrices,!1,e.boneMatrices)}f.uniformMatrix4fv(h.modelViewMatrix,
!1,e._modelViewMatrixArray);h.normalMatrix&&f.uniformMatrix3fv(h.normalMatrix,!1,e._normalMatrixArray);(d instanceof THREE.ShaderMaterial||d.envMap||d.skinning||e.receiveShadow)&&null!==h.objectMatrix&&f.uniformMatrix4fv(h.objectMatrix,!1,e._objectMatrixArray);return g}function s(a,b){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);var c=THREE.Matrix4.makeInvert3x3(a._modelViewMatrix);c&&c.transposeIntoArray(a._normalMatrixArray)}function y(a,b,c){Sa!==
......@@ -222,11 +222,11 @@ case THREE.ClampToEdgeWrapping:return f.CLAMP_TO_EDGE;case THREE.MirroredRepeatW
case THREE.UnsignedByteType:return f.UNSIGNED_BYTE;case THREE.ShortType:return f.SHORT;case THREE.UnsignedShortType:return f.UNSIGNED_SHORT;case THREE.IntType:return f.INT;case THREE.UnsignedIntType:return f.UNSIGNED_INT;case THREE.FloatType:return f.FLOAT;case THREE.AlphaFormat:return f.ALPHA;case THREE.RGBFormat:return f.RGB;case THREE.RGBAFormat:return f.RGBA;case THREE.LuminanceFormat:return f.LUMINANCE;case THREE.LuminanceAlphaFormat:return f.LUMINANCE_ALPHA}return 0}var a=a||{},I=void 0!==a.canvas?
a.canvas:document.createElement("canvas"),D=void 0!==a.precision?a.precision:"mediump",L=void 0!==a.alpha?a.alpha:!0,K=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,M=void 0!==a.antialias?a.antialias:!1,ja=void 0!==a.stencil?a.stencil:!0,oa=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,ka=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),X=void 0!==a.clearAlpha?a.clearAlpha:0,$=void 0!==a.maxLights?a.maxLights:4;this.domElement=I;this.context=null;this.autoUpdateScene=
this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},
render:{calls:0,vertices:0,faces:0,points:0}};var C=this,f,Va=[],Ba=null,S=null,sa=-1,J=null,aa=null,ta=0,xa=null,T=null,Aa=null,Ga=null,Ha=null,Sa=null,Wa=null,Ma=null,tb=null,Nb=0,Xb=0,Hb=0,Ob=0,lc=0,mc=0,Yb=new THREE.Frustum,Xa=new THREE.Matrix4,Na=new THREE.Vector4,nb=new THREE.Vector3,nc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}};f=function(){var a;try{if(!(a=I.getContext("experimental-webgl",{alpha:L,premultipliedAlpha:K,
antialias:M,stencil:ja,preserveDrawingBuffer:oa})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+a.getParameter(a.VERSION)+" | "+a.getParameter(a.VENDOR)+" | "+a.getParameter(a.RENDERER)+" | "+a.getParameter(a.SHADING_LANGUAGE_VERSION))}catch(b){console.error(b)}return a}();f.clearColor(0,0,0,1);f.clearDepth(1);f.clearStencil(0);f.enable(f.DEPTH_TEST);f.depthFunc(f.LEQUAL);f.frontFace(f.CCW);f.cullFace(f.BACK);f.enable(f.CULL_FACE);f.enable(f.BLEND);f.blendEquation(f.FUNC_ADD);
f.blendFunc(f.SRC_ALPHA,f.ONE_MINUS_SRC_ALPHA);f.clearColor(ka.r,ka.g,ka.b,X);this.context=f;var oc=f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS);f.getParameter(f.MAX_TEXTURE_SIZE);var Ec=f.getParameter(f.MAX_CUBE_MAP_TEXTURE_SIZE);this.getContext=function(){return f};this.supportsVertexTextures=function(){return 0<oc};this.setSize=function(a,b){I.width=a;I.height=b;this.setViewport(0,0,I.width,I.height)};this.setViewport=function(a,b,c,d){Nb=a;Xb=b;Hb=c;Ob=d;f.viewport(Nb,Xb,Hb,Ob)};this.setScissor=
function(a,b,c,d){f.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?f.enable(f.SCISSOR_TEST):f.disable(f.SCISSOR_TEST)};this.setClearColorHex=function(a,b){ka.setHex(a);X=b;f.clearColor(ka.r,ka.g,ka.b,X)};this.setClearColor=function(a,b){ka.copy(a);X=b;f.clearColor(ka.r,ka.g,ka.b,X)};this.getClearColor=function(){return ka};this.getClearAlpha=function(){return X};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=f.COLOR_BUFFER_BIT;if(void 0===b||b)d|=f.DEPTH_BUFFER_BIT;if(void 0===c||
c)d|=f.STENCIL_BUFFER_BIT;f.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=
render:{calls:0,vertices:0,faces:0,points:0}};var C=this,f,Va=[],Ba=null,S=null,sa=-1,J=null,aa=null,ta=0,xa=null,T=null,Aa=null,Ga=null,Ha=null,Sa=null,Wa=null,Ma=null,tb=null,Yb=0,Hb=0,Pb=0,Zb=0,mc=0,nc=0,Ib=new THREE.Frustum,mb=new THREE.Matrix4,Ob=new THREE.Matrix4,Na=new THREE.Vector4,nb=new THREE.Vector3,oc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}};f=function(){var a;try{if(!(a=I.getContext("experimental-webgl",{alpha:L,
premultipliedAlpha:K,antialias:M,stencil:ja,preserveDrawingBuffer:oa})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+a.getParameter(a.VERSION)+" | "+a.getParameter(a.VENDOR)+" | "+a.getParameter(a.RENDERER)+" | "+a.getParameter(a.SHADING_LANGUAGE_VERSION))}catch(b){console.error(b)}return a}();f.clearColor(0,0,0,1);f.clearDepth(1);f.clearStencil(0);f.enable(f.DEPTH_TEST);f.depthFunc(f.LEQUAL);f.frontFace(f.CCW);f.cullFace(f.BACK);f.enable(f.CULL_FACE);f.enable(f.BLEND);
f.blendEquation(f.FUNC_ADD);f.blendFunc(f.SRC_ALPHA,f.ONE_MINUS_SRC_ALPHA);f.clearColor(ka.r,ka.g,ka.b,X);this.context=f;var pc=f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS);f.getParameter(f.MAX_TEXTURE_SIZE);var Fc=f.getParameter(f.MAX_CUBE_MAP_TEXTURE_SIZE);this.getContext=function(){return f};this.supportsVertexTextures=function(){return 0<pc};this.setSize=function(a,b){I.width=a;I.height=b;this.setViewport(0,0,I.width,I.height)};this.setViewport=function(a,b,c,d){Yb=a;Hb=b;Pb=c;Zb=d;f.viewport(Yb,
Hb,Pb,Zb)};this.setScissor=function(a,b,c,d){f.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?f.enable(f.SCISSOR_TEST):f.disable(f.SCISSOR_TEST)};this.setClearColorHex=function(a,b){ka.setHex(a);X=b;f.clearColor(ka.r,ka.g,ka.b,X)};this.setClearColor=function(a,b){ka.copy(a);X=b;f.clearColor(ka.r,ka.g,ka.b,X)};this.getClearColor=function(){return ka};this.getClearAlpha=function(){return X};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=f.COLOR_BUFFER_BIT;if(void 0===b||b)d|=f.DEPTH_BUFFER_BIT;
if(void 0===c||c)d|=f.STENCIL_BUFFER_BIT;f.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=
a.geometry.geometryGroups[b];f.deleteBuffer(c.__webglVertexBuffer);f.deleteBuffer(c.__webglNormalBuffer);f.deleteBuffer(c.__webglTangentBuffer);f.deleteBuffer(c.__webglColorBuffer);f.deleteBuffer(c.__webglUVBuffer);f.deleteBuffer(c.__webglUV2Buffer);f.deleteBuffer(c.__webglSkinVertexABuffer);f.deleteBuffer(c.__webglSkinVertexBBuffer);f.deleteBuffer(c.__webglSkinIndicesBuffer);f.deleteBuffer(c.__webglSkinWeightsBuffer);f.deleteBuffer(c.__webglFaceBuffer);f.deleteBuffer(c.__webglLineBuffer);var d=void 0,
e=void 0;if(c.numMorphTargets)for(d=0,e=c.numMorphTargets;d<e;d++)f.deleteBuffer(c.__webglMorphTargetsBuffers[d]);if(c.numMorphNormals)for(d=0,e=c.numMorphNormals;d<e;d++)f.deleteBuffer(c.__webglMorphNormalsBuffers[d]);if(c.__webglCustomAttributesList)for(d in d=void 0,c.__webglCustomAttributesList)f.deleteBuffer(c.__webglCustomAttributesList[d].buffer);C.info.memory.geometries--}else if(a instanceof THREE.Ribbon)a=a.geometry,f.deleteBuffer(a.__webglVertexBuffer),f.deleteBuffer(a.__webglColorBuffer),
C.info.memory.geometries--;else if(a instanceof THREE.Line)a=a.geometry,f.deleteBuffer(a.__webglVertexBuffer),f.deleteBuffer(a.__webglColorBuffer),C.info.memory.geometries--;else if(a instanceof THREE.ParticleSystem)a=a.geometry,f.deleteBuffer(a.__webglVertexBuffer),f.deleteBuffer(a.__webglColorBuffer),C.info.memory.geometries--};this.deallocateTexture=function(a){if(a.__webglInit)a.__webglInit=!1,f.deleteTexture(a.__webglTexture),C.info.memory.textures--};this.updateShadowMap=function(a,b){Ba=null;
......@@ -242,13 +242,13 @@ h],3,f.FLOAT,!1,0,0);d.morphNormals&&(f.bindBuffer(f.ARRAY_BUFFER,e.__webglMorph
e.__webglUVBuffer),f.vertexAttribPointer(b.uv,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(b.uv)):f.disableVertexAttribArray(b.uv));0<=b.uv2&&(e.__webglUV2Buffer?(f.bindBuffer(f.ARRAY_BUFFER,e.__webglUV2Buffer),f.vertexAttribPointer(b.uv2,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(b.uv2)):f.disableVertexAttribArray(b.uv2));d.skinning&&0<=b.skinVertexA&&0<=b.skinVertexB&&0<=b.skinIndex&&0<=b.skinWeight&&(f.bindBuffer(f.ARRAY_BUFFER,e.__webglSkinVertexABuffer),f.vertexAttribPointer(b.skinVertexA,4,
f.FLOAT,!1,0,0),f.bindBuffer(f.ARRAY_BUFFER,e.__webglSkinVertexBBuffer),f.vertexAttribPointer(b.skinVertexB,4,f.FLOAT,!1,0,0),f.bindBuffer(f.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),f.vertexAttribPointer(b.skinIndex,4,f.FLOAT,!1,0,0),f.bindBuffer(f.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),f.vertexAttribPointer(b.skinWeight,4,f.FLOAT,!1,0,0))}g instanceof THREE.Mesh?(d.wireframe?(d=d.wireframeLinewidth,d!==tb&&(f.lineWidth(d),tb=d),a&&f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),f.drawElements(f.LINES,
e.__webglLineCount,f.UNSIGNED_SHORT,0)):(a&&f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),f.drawElements(f.TRIANGLES,e.__webglFaceCount,f.UNSIGNED_SHORT,0)),C.info.render.calls++,C.info.render.vertices+=e.__webglFaceCount,C.info.render.faces+=e.__webglFaceCount/3):g instanceof THREE.Line?(g=g.type===THREE.LineStrip?f.LINE_STRIP:f.LINES,d=d.linewidth,d!==tb&&(f.lineWidth(d),tb=d),f.drawArrays(g,0,e.__webglLineCount),C.info.render.calls++):g instanceof THREE.ParticleSystem?(f.drawArrays(f.POINTS,
0,e.__webglParticleCount),C.info.render.calls++,C.info.render.points+=e.__webglParticleCount):g instanceof THREE.Ribbon&&(f.drawArrays(f.TRIANGLE_STRIP,0,e.__webglVertexCount),C.info.render.calls++)}};this.render=function(a,b,c,d){var e,g,j,l,n=a.__lights,p=a.fog;sa=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);void 0===b.parent&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."),a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();i(this.renderPluginsPre,a,b);C.info.render.calls=
0;C.info.render.vertices=0;C.info.render.faces=0;C.info.render.points=0;b.matrixWorldInverse.getInverse(b.matrixWorld);if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);if(!b._projectionMatrixArray)b._projectionMatrixArray=new Float32Array(16);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Xa.multiply(b.projectionMatrix,b.matrixWorldInverse);Yb.setFromMatrix(Xa);this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,
this.autoClearDepth,this.autoClearStencil);l=a.__webglObjects;for(d=0,e=l.length;d<e;d++)if(g=l[d],j=g.object,g.render=!1,j.visible&&(!(j instanceof THREE.Mesh||j instanceof THREE.ParticleSystem)||!j.frustumCulled||Yb.contains(j))){j.matrixWorld.flattenToArray(j._objectMatrixArray);s(j,b);var o=g,q=o.object,u=o.buffer,w=void 0,w=w=void 0,w=q.material;if(w instanceof THREE.MeshFaceMaterial){if(w=u.materialIndex,0<=w)w=q.geometry.materials[w],w.transparent?(o.transparent=w,o.opaque=null):(o.opaque=
w,o.transparent=null)}else if(w)w.transparent?(o.transparent=w,o.opaque=null):(o.opaque=w,o.transparent=null);g.render=!0;if(this.sortObjects)j.renderDepth?g.z=j.renderDepth:(Na.copy(j.matrixWorld.getPosition()),Xa.multiplyVector3(Na),g.z=Na.z)}this.sortObjects&&l.sort(h);l=a.__webglObjectsImmediate;for(d=0,e=l.length;d<e;d++)if(g=l[d],j=g.object,j.visible)j.matrixAutoUpdate&&j.matrixWorld.flattenToArray(j._objectMatrixArray),s(j,b),j=g.object.material,j.transparent?(g.transparent=j,g.opaque=null):
0,e.__webglParticleCount),C.info.render.calls++,C.info.render.points+=e.__webglParticleCount):g instanceof THREE.Ribbon&&(f.drawArrays(f.TRIANGLE_STRIP,0,e.__webglVertexCount),C.info.render.calls++)}};this.render=function(a,b,c,d){var e,g,j,l,n=a.__lights,p=a.fog;sa=-1;void 0===b.parent&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."),a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=
new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);mb.multiply(b.projectionMatrix,b.matrixWorldInverse);Ib.setFromMatrix(mb);this.autoUpdateObjects&&this.initWebGLObjects(a);i(this.renderPluginsPre,a,b);C.info.render.calls=0;C.info.render.vertices=0;C.info.render.faces=0;C.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,
this.autoClearDepth,this.autoClearStencil);l=a.__webglObjects;for(d=0,e=l.length;d<e;d++)if(g=l[d],j=g.object,g.render=!1,j.visible&&(!(j instanceof THREE.Mesh||j instanceof THREE.ParticleSystem)||!j.frustumCulled||Ib.contains(j))){j.matrixWorld.flattenToArray(j._objectMatrixArray);s(j,b);var o=g,q=o.object,u=o.buffer,w=void 0,w=w=void 0,w=q.material;if(w instanceof THREE.MeshFaceMaterial){if(w=u.materialIndex,0<=w)w=q.geometry.materials[w],w.transparent?(o.transparent=w,o.opaque=null):(o.opaque=
w,o.transparent=null)}else if(w)w.transparent?(o.transparent=w,o.opaque=null):(o.opaque=w,o.transparent=null);g.render=!0;if(this.sortObjects)j.renderDepth?g.z=j.renderDepth:(Na.copy(j.matrixWorld.getPosition()),mb.multiplyVector3(Na),g.z=Na.z)}this.sortObjects&&l.sort(h);l=a.__webglObjectsImmediate;for(d=0,e=l.length;d<e;d++)if(g=l[d],j=g.object,j.visible)j.matrixAutoUpdate&&j.matrixWorld.flattenToArray(j._objectMatrixArray),s(j,b),j=g.object.material,j.transparent?(g.transparent=j,g.opaque=null):
(g.opaque=j,g.transparent=null);a.overrideMaterial?(this.setBlending(a.overrideMaterial.blending),this.setDepthTest(a.overrideMaterial.depthTest),this.setDepthWrite(a.overrideMaterial.depthWrite),y(a.overrideMaterial.polygonOffset,a.overrideMaterial.polygonOffsetFactor,a.overrideMaterial.polygonOffsetUnits),m(a.__webglObjects,!1,"",b,n,p,!0,a.overrideMaterial),k(a.__webglObjectsImmediate,"",b,n,p,!1,a.overrideMaterial)):(this.setBlending(THREE.NormalBlending),m(a.__webglObjects,!0,"opaque",b,n,p,
!1),k(a.__webglObjectsImmediate,"opaque",b,n,p,!1),m(a.__webglObjects,!1,"transparent",b,n,p,!0),k(a.__webglObjectsImmediate,"transparent",b,n,p,!0));i(this.renderPluginsPost,a,b);c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(f.bindTexture(f.TEXTURE_CUBE_MAP,c.__webglTexture),f.generateMipmap(f.TEXTURE_CUBE_MAP),f.bindTexture(f.TEXTURE_CUBE_MAP,null)):(f.bindTexture(f.TEXTURE_2D,c.__webglTexture),f.generateMipmap(f.TEXTURE_2D),
f.bindTexture(f.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)};this.renderImmediateObject=function(a,b,c,d,e){var g=p(a,b,c,d,e);J=-1;C.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(g,f,Yb):e.render(function(a){C.renderBufferImmediate(a,g,d.shading)})};this.initWebGLObjects=function(a){if(!a.__webglObjects)a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[];for(;a.__objectsAdded.length;){var h=a.__objectsAdded[0],i=a,m=
f.bindTexture(f.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)};this.renderImmediateObject=function(a,b,c,d,e){var g=p(a,b,c,d,e);J=-1;C.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(g,f,Ib):e.render(function(a){C.renderBufferImmediate(a,g,d.shading)})};this.initWebGLObjects=function(a){if(!a.__webglObjects)a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[];for(;a.__objectsAdded.length;){var h=a.__objectsAdded[0],i=a,m=
void 0,k=void 0,p=void 0;if(!h.__webglInit)if(h.__webglInit=!0,h._modelViewMatrix=new THREE.Matrix4,h._normalMatrixArray=new Float32Array(9),h._modelViewMatrixArray=new Float32Array(16),h._objectMatrixArray=new Float32Array(16),h.matrixWorld.flattenToArray(h._objectMatrixArray),h instanceof THREE.Mesh){if(k=h.geometry,k instanceof THREE.Geometry){if(void 0===k.geometryGroups){var s=k,u=void 0,w=void 0,y=void 0,A=void 0,I=void 0,D=void 0,H=void 0,J={},L=s.morphTargets.length,N=s.morphNormals.length;
s.geometryGroups={};for(u=0,w=s.faces.length;u<w;u++)y=s.faces[u],A=y.materialIndex,D=void 0!==A?A:-1,void 0===J[D]&&(J[D]={hash:D,counter:0}),H=J[D].hash+"_"+J[D].counter,void 0===s.geometryGroups[H]&&(s.geometryGroups[H]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:L,numMorphNormals:N}),I=y instanceof THREE.Face3?3:4,65535<s.geometryGroups[H].vertices+I&&(J[D].counter+=1,H=J[D].hash+"_"+J[D].counter,void 0===s.geometryGroups[H]&&(s.geometryGroups[H]={faces3:[],faces4:[],materialIndex:A,
vertices:0,numMorphTargets:L,numMorphNormals:N})),y instanceof THREE.Face3?s.geometryGroups[H].faces3.push(u):s.geometryGroups[H].faces4.push(u),s.geometryGroups[H].vertices+=I;s.geometryGroupsList=[];var M=void 0;for(M in s.geometryGroups)s.geometryGroups[M].id=ta++,s.geometryGroupsList.push(s.geometryGroups[M])}for(m in k.geometryGroups)if(p=k.geometryGroups[m],!p.__webglVertexBuffer){var K=p;K.__webglVertexBuffer=f.createBuffer();K.__webglNormalBuffer=f.createBuffer();K.__webglTangentBuffer=f.createBuffer();
......@@ -257,29 +257,29 @@ K.__webglColorBuffer=f.createBuffer();K.__webglUVBuffer=f.createBuffer();K.__web
S);if(Aa){if(0<aa.faceUvs.length||0<aa.faceVertexUvs.length)ca.__uvArray=new Float32Array(2*S);if(1<aa.faceUvs.length||1<aa.faceVertexUvs.length)ca.__uv2Array=new Float32Array(2*S)}if($.geometry.skinWeights.length&&$.geometry.skinIndices.length)ca.__skinVertexAArray=new Float32Array(4*S),ca.__skinVertexBArray=new Float32Array(4*S),ca.__skinIndexArray=new Float32Array(4*S),ca.__skinWeightArray=new Float32Array(4*S);ca.__faceArray=new Uint16Array(3*sa);ca.__lineArray=new Uint16Array(2*xa);var Ha=void 0,
Ma=void 0;if(ca.numMorphTargets){ca.__morphTargetsArrays=[];for(Ha=0,Ma=ca.numMorphTargets;Ha<Ma;Ha++)ca.__morphTargetsArrays.push(new Float32Array(3*S))}if(ca.numMorphNormals){ca.__morphNormalsArrays=[];for(Ha=0,Ma=ca.numMorphNormals;Ha<Ma;Ha++)ca.__morphNormalsArrays.push(new Float32Array(3*S))}ca.__webglFaceCount=3*sa;ca.__webglLineCount=2*xa;if(oa.attributes){if(void 0===ca.__webglCustomAttributesList)ca.__webglCustomAttributesList=[];var Va=void 0;for(Va in oa.attributes){var Sa=oa.attributes[Va],
La={},Wa;for(Wa in Sa)La[Wa]=Sa[Wa];if(!La.__webglInitialized||La.createUniqueBuffers){La.__webglInitialized=!0;var Na=1;"v2"===La.type?Na=2:"v3"===La.type?Na=3:"v4"===La.type?Na=4:"c"===La.type&&(Na=3);La.size=Na;La.array=new Float32Array(S*Na);La.buffer=f.createBuffer();La.buffer.belongsToAttribute=Va;Sa.needsUpdate=!0;La.__original=Sa}ca.__webglCustomAttributesList.push(La)}}ca.__inittedArrays=!0;k.__dirtyVertices=!0;k.__dirtyMorphTargets=!0;k.__dirtyElements=!0;k.__dirtyUvs=!0;k.__dirtyNormals=
!0;k.__dirtyTangents=!0;k.__dirtyColors=!0}}}else if(h instanceof THREE.Ribbon){if(k=h.geometry,!k.__webglVertexBuffer){var nb=k;nb.__webglVertexBuffer=f.createBuffer();nb.__webglColorBuffer=f.createBuffer();C.info.memory.geometries++;var Xa=k,tb=Xa.vertices.length;Xa.__vertexArray=new Float32Array(3*tb);Xa.__colorArray=new Float32Array(3*tb);Xa.__webglVertexCount=tb;k.__dirtyVertices=!0;k.__dirtyColors=!0}}else if(h instanceof THREE.Line){if(k=h.geometry,!k.__webglVertexBuffer){var Nb=k;Nb.__webglVertexBuffer=
f.createBuffer();Nb.__webglColorBuffer=f.createBuffer();C.info.memory.geometries++;var Zb=k,Xb=h,Hb=Zb.vertices.length;Zb.__vertexArray=new Float32Array(3*Hb);Zb.__colorArray=new Float32Array(3*Hb);Zb.__webglLineCount=Hb;b(Zb,Xb);k.__dirtyVertices=!0;k.__dirtyColors=!0}}else if(h instanceof THREE.ParticleSystem&&(k=h.geometry,!k.__webglVertexBuffer)){var Ob=k;Ob.__webglVertexBuffer=f.createBuffer();Ob.__webglColorBuffer=f.createBuffer();C.info.geometries++;var Pb=k,Yb=h,Fc=Pb.vertices.length;Pb.__vertexArray=
new Float32Array(3*Fc);Pb.__colorArray=new Float32Array(3*Fc);Pb.__sortArray=[];Pb.__webglParticleCount=Fc;b(Pb,Yb);k.__dirtyVertices=!0;k.__dirtyColors=!0}if(!h.__webglActive){if(h instanceof THREE.Mesh)if(k=h.geometry,k instanceof THREE.BufferGeometry)j(i.__webglObjects,k,h);else for(m in k.geometryGroups)p=k.geometryGroups[m],j(i.__webglObjects,p,h);else h instanceof THREE.Ribbon||h instanceof THREE.Line||h instanceof THREE.ParticleSystem?(k=h.geometry,j(i.__webglObjects,k,h)):void 0!==THREE.MarchingCubes&&
h instanceof THREE.MarchingCubes||h.immediateRenderCallback?i.__webglObjectsImmediate.push({object:h,opaque:null,transparent:null}):h instanceof THREE.Sprite?i.__webglSprites.push(h):h instanceof THREE.LensFlare&&i.__webglFlares.push(h);h.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var Oa=a.__objectsRemoved[0],pc=a;Oa instanceof THREE.Mesh||Oa instanceof THREE.ParticleSystem||Oa instanceof THREE.Ribbon||Oa instanceof THREE.Line?q(pc.__webglObjects,Oa):Oa instanceof
THREE.Sprite?o(pc.__webglSprites,Oa):Oa instanceof THREE.LensFlare?o(pc.__webglFlares,Oa):(Oa instanceof THREE.MarchingCubes||Oa.immediateRenderCallback)&&q(pc.__webglObjectsImmediate,Oa);Oa.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var Gc=0,lc=a.__webglObjects.length;Gc<lc;Gc++){var Ta=a.__webglObjects[Gc].object,R=Ta.geometry,$b=void 0,Qb=void 0,Ea=void 0;if(Ta instanceof THREE.Mesh)if(R instanceof THREE.BufferGeometry)R.__dirtyVertices=!1,R.__dirtyElements=!1,R.__dirtyUvs=!1,R.__dirtyNormals=
!1,R.__dirtyColors=!1;else{for(var Hc=0,mc=R.geometryGroupsList.length;Hc<mc;Hc++)if($b=R.geometryGroupsList[Hc],Ea=c(Ta,$b),Qb=Ea.attributes&&n(Ea),R.__dirtyVertices||R.__dirtyMorphTargets||R.__dirtyElements||R.__dirtyUvs||R.__dirtyNormals||R.__dirtyColors||R.__dirtyTangents||Qb){var P=$b,nc=Ta,Ia=f.DYNAMIC_DRAW,oc=!R.dynamic,Ib=Ea;if(P.__inittedArrays){var Qc=d(Ib),Ic=Ib.vertexColors?Ib.vertexColors:!1,Rc=e(Ib),qc=Qc===THREE.SmoothShading,v=void 0,B=void 0,Ra=void 0,z=void 0,Rb=void 0,ub=void 0,
Ua=void 0,rc=void 0,ob=void 0,Sb=void 0,Tb=void 0,E=void 0,F=void 0,G=void 0,Y=void 0,Ya=void 0,Za=void 0,$a=void 0,ac=void 0,ab=void 0,bb=void 0,cb=void 0,bc=void 0,db=void 0,eb=void 0,fb=void 0,cc=void 0,gb=void 0,hb=void 0,ib=void 0,dc=void 0,jb=void 0,kb=void 0,lb=void 0,ec=void 0,vb=void 0,wb=void 0,xb=void 0,sc=void 0,yb=void 0,zb=void 0,Ab=void 0,tc=void 0,U=void 0,Sc=void 0,Bb=void 0,Ub=void 0,Vb=void 0,ua=void 0,Tc=void 0,qa=void 0,ra=void 0,Cb=void 0,pb=void 0,la=0,pa=0,qb=0,rb=0,Pa=0,za=
0,Z=0,Ca=0,ma=0,x=0,O=0,t=0,Ja=void 0,va=P.__vertexArray,fc=P.__uvArray,gc=P.__uv2Array,Qa=P.__normalArray,da=P.__tangentArray,wa=P.__colorArray,ea=P.__skinVertexAArray,fa=P.__skinVertexBArray,ga=P.__skinIndexArray,ha=P.__skinWeightArray,Jc=P.__morphTargetsArrays,Kc=P.__morphNormalsArrays,Lc=P.__webglCustomAttributesList,r=void 0,mb=P.__faceArray,Ka=P.__lineArray,Da=nc.geometry,Ec=Da.__dirtyElements,Uc=Da.__dirtyUvs,ad=Da.__dirtyNormals,bd=Da.__dirtyTangents,cd=Da.__dirtyColors,dd=Da.__dirtyMorphTargets,
Jb=Da.vertices,V=P.faces3,W=P.faces4,na=Da.faces,Mc=Da.faceVertexUvs[0],Nc=Da.faceVertexUvs[1],Kb=Da.skinVerticesA,Lb=Da.skinVerticesB,Mb=Da.skinIndices,Db=Da.skinWeights,Eb=Da.morphTargets,uc=Da.morphNormals;if(Da.__dirtyVertices){for(v=0,B=V.length;v<B;v++)z=na[V[v]],E=Jb[z.a].position,F=Jb[z.b].position,G=Jb[z.c].position,va[pa]=E.x,va[pa+1]=E.y,va[pa+2]=E.z,va[pa+3]=F.x,va[pa+4]=F.y,va[pa+5]=F.z,va[pa+6]=G.x,va[pa+7]=G.y,va[pa+8]=G.z,pa+=9;for(v=0,B=W.length;v<B;v++)z=na[W[v]],E=Jb[z.a].position,
F=Jb[z.b].position,G=Jb[z.c].position,Y=Jb[z.d].position,va[pa]=E.x,va[pa+1]=E.y,va[pa+2]=E.z,va[pa+3]=F.x,va[pa+4]=F.y,va[pa+5]=F.z,va[pa+6]=G.x,va[pa+7]=G.y,va[pa+8]=G.z,va[pa+9]=Y.x,va[pa+10]=Y.y,va[pa+11]=Y.z,pa+=12;f.bindBuffer(f.ARRAY_BUFFER,P.__webglVertexBuffer);f.bufferData(f.ARRAY_BUFFER,va,Ia)}if(dd)for(ua=0,Tc=Eb.length;ua<Tc;ua++){O=0;for(v=0,B=V.length;v<B;v++){Cb=V[v];z=na[Cb];E=Eb[ua].vertices[z.a].position;F=Eb[ua].vertices[z.b].position;G=Eb[ua].vertices[z.c].position;qa=Jc[ua];
qa[O]=E.x;qa[O+1]=E.y;qa[O+2]=E.z;qa[O+3]=F.x;qa[O+4]=F.y;qa[O+5]=F.z;qa[O+6]=G.x;qa[O+7]=G.y;qa[O+8]=G.z;if(Ib.morphNormals)qc?(pb=uc[ua].vertexNormals[Cb],ab=pb.a,bb=pb.b,cb=pb.c):cb=bb=ab=uc[ua].faceNormals[Cb],ra=Kc[ua],ra[O]=ab.x,ra[O+1]=ab.y,ra[O+2]=ab.z,ra[O+3]=bb.x,ra[O+4]=bb.y,ra[O+5]=bb.z,ra[O+6]=cb.x,ra[O+7]=cb.y,ra[O+8]=cb.z;O+=9}for(v=0,B=W.length;v<B;v++){Cb=W[v];z=na[Cb];E=Eb[ua].vertices[z.a].position;F=Eb[ua].vertices[z.b].position;G=Eb[ua].vertices[z.c].position;Y=Eb[ua].vertices[z.d].position;
qa=Jc[ua];qa[O]=E.x;qa[O+1]=E.y;qa[O+2]=E.z;qa[O+3]=F.x;qa[O+4]=F.y;qa[O+5]=F.z;qa[O+6]=G.x;qa[O+7]=G.y;qa[O+8]=G.z;qa[O+9]=Y.x;qa[O+10]=Y.y;qa[O+11]=Y.z;if(Ib.morphNormals)qc?(pb=uc[ua].vertexNormals[Cb],ab=pb.a,bb=pb.b,cb=pb.c,bc=pb.d):bc=cb=bb=ab=uc[ua].faceNormals[Cb],ra=Kc[ua],ra[O]=ab.x,ra[O+1]=ab.y,ra[O+2]=ab.z,ra[O+3]=bb.x,ra[O+4]=bb.y,ra[O+5]=bb.z,ra[O+6]=cb.x,ra[O+7]=cb.y,ra[O+8]=cb.z,ra[O+9]=bc.x,ra[O+10]=bc.y,ra[O+11]=bc.z;O+=12}f.bindBuffer(f.ARRAY_BUFFER,P.__webglMorphTargetsBuffers[ua]);
f.bufferData(f.ARRAY_BUFFER,Jc[ua],Ia);Ib.morphNormals&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglMorphNormalsBuffers[ua]),f.bufferData(f.ARRAY_BUFFER,Kc[ua],Ia))}if(Db.length){for(v=0,B=V.length;v<B;v++)z=na[V[v]],gb=Db[z.a],hb=Db[z.b],ib=Db[z.c],ha[x]=gb.x,ha[x+1]=gb.y,ha[x+2]=gb.z,ha[x+3]=gb.w,ha[x+4]=hb.x,ha[x+5]=hb.y,ha[x+6]=hb.z,ha[x+7]=hb.w,ha[x+8]=ib.x,ha[x+9]=ib.y,ha[x+10]=ib.z,ha[x+11]=ib.w,jb=Mb[z.a],kb=Mb[z.b],lb=Mb[z.c],ga[x]=jb.x,ga[x+1]=jb.y,ga[x+2]=jb.z,ga[x+3]=jb.w,ga[x+4]=kb.x,ga[x+
5]=kb.y,ga[x+6]=kb.z,ga[x+7]=kb.w,ga[x+8]=lb.x,ga[x+9]=lb.y,ga[x+10]=lb.z,ga[x+11]=lb.w,vb=Kb[z.a],wb=Kb[z.b],xb=Kb[z.c],ea[x]=vb.x,ea[x+1]=vb.y,ea[x+2]=vb.z,ea[x+3]=1,ea[x+4]=wb.x,ea[x+5]=wb.y,ea[x+6]=wb.z,ea[x+7]=1,ea[x+8]=xb.x,ea[x+9]=xb.y,ea[x+10]=xb.z,ea[x+11]=1,yb=Lb[z.a],zb=Lb[z.b],Ab=Lb[z.c],fa[x]=yb.x,fa[x+1]=yb.y,fa[x+2]=yb.z,fa[x+3]=1,fa[x+4]=zb.x,fa[x+5]=zb.y,fa[x+6]=zb.z,fa[x+7]=1,fa[x+8]=Ab.x,fa[x+9]=Ab.y,fa[x+10]=Ab.z,fa[x+11]=1,x+=12;for(v=0,B=W.length;v<B;v++)z=na[W[v]],gb=Db[z.a],
hb=Db[z.b],ib=Db[z.c],dc=Db[z.d],ha[x]=gb.x,ha[x+1]=gb.y,ha[x+2]=gb.z,ha[x+3]=gb.w,ha[x+4]=hb.x,ha[x+5]=hb.y,ha[x+6]=hb.z,ha[x+7]=hb.w,ha[x+8]=ib.x,ha[x+9]=ib.y,ha[x+10]=ib.z,ha[x+11]=ib.w,ha[x+12]=dc.x,ha[x+13]=dc.y,ha[x+14]=dc.z,ha[x+15]=dc.w,jb=Mb[z.a],kb=Mb[z.b],lb=Mb[z.c],ec=Mb[z.d],ga[x]=jb.x,ga[x+1]=jb.y,ga[x+2]=jb.z,ga[x+3]=jb.w,ga[x+4]=kb.x,ga[x+5]=kb.y,ga[x+6]=kb.z,ga[x+7]=kb.w,ga[x+8]=lb.x,ga[x+9]=lb.y,ga[x+10]=lb.z,ga[x+11]=lb.w,ga[x+12]=ec.x,ga[x+13]=ec.y,ga[x+14]=ec.z,ga[x+15]=ec.w,
vb=Kb[z.a],wb=Kb[z.b],xb=Kb[z.c],sc=Kb[z.d],ea[x]=vb.x,ea[x+1]=vb.y,ea[x+2]=vb.z,ea[x+3]=1,ea[x+4]=wb.x,ea[x+5]=wb.y,ea[x+6]=wb.z,ea[x+7]=1,ea[x+8]=xb.x,ea[x+9]=xb.y,ea[x+10]=xb.z,ea[x+11]=1,ea[x+12]=sc.x,ea[x+13]=sc.y,ea[x+14]=sc.z,ea[x+15]=1,yb=Lb[z.a],zb=Lb[z.b],Ab=Lb[z.c],tc=Lb[z.d],fa[x]=yb.x,fa[x+1]=yb.y,fa[x+2]=yb.z,fa[x+3]=1,fa[x+4]=zb.x,fa[x+5]=zb.y,fa[x+6]=zb.z,fa[x+7]=1,fa[x+8]=Ab.x,fa[x+9]=Ab.y,fa[x+10]=Ab.z,fa[x+11]=1,fa[x+12]=tc.x,fa[x+13]=tc.y,fa[x+14]=tc.z,fa[x+15]=1,x+=16;0<x&&(f.bindBuffer(f.ARRAY_BUFFER,
P.__webglSkinVertexABuffer),f.bufferData(f.ARRAY_BUFFER,ea,Ia),f.bindBuffer(f.ARRAY_BUFFER,P.__webglSkinVertexBBuffer),f.bufferData(f.ARRAY_BUFFER,fa,Ia),f.bindBuffer(f.ARRAY_BUFFER,P.__webglSkinIndicesBuffer),f.bufferData(f.ARRAY_BUFFER,ga,Ia),f.bindBuffer(f.ARRAY_BUFFER,P.__webglSkinWeightsBuffer),f.bufferData(f.ARRAY_BUFFER,ha,Ia))}if(cd&&Ic){for(v=0,B=V.length;v<B;v++)z=na[V[v]],Ua=z.vertexColors,rc=z.color,3===Ua.length&&Ic===THREE.VertexColors?(db=Ua[0],eb=Ua[1],fb=Ua[2]):fb=eb=db=rc,wa[ma]=
db.r,wa[ma+1]=db.g,wa[ma+2]=db.b,wa[ma+3]=eb.r,wa[ma+4]=eb.g,wa[ma+5]=eb.b,wa[ma+6]=fb.r,wa[ma+7]=fb.g,wa[ma+8]=fb.b,ma+=9;for(v=0,B=W.length;v<B;v++)z=na[W[v]],Ua=z.vertexColors,rc=z.color,4===Ua.length&&Ic===THREE.VertexColors?(db=Ua[0],eb=Ua[1],fb=Ua[2],cc=Ua[3]):cc=fb=eb=db=rc,wa[ma]=db.r,wa[ma+1]=db.g,wa[ma+2]=db.b,wa[ma+3]=eb.r,wa[ma+4]=eb.g,wa[ma+5]=eb.b,wa[ma+6]=fb.r,wa[ma+7]=fb.g,wa[ma+8]=fb.b,wa[ma+9]=cc.r,wa[ma+10]=cc.g,wa[ma+11]=cc.b,ma+=12;0<ma&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglColorBuffer),
f.bufferData(f.ARRAY_BUFFER,wa,Ia))}if(bd&&Da.hasTangents){for(v=0,B=V.length;v<B;v++)z=na[V[v]],ob=z.vertexTangents,Ya=ob[0],Za=ob[1],$a=ob[2],da[Z]=Ya.x,da[Z+1]=Ya.y,da[Z+2]=Ya.z,da[Z+3]=Ya.w,da[Z+4]=Za.x,da[Z+5]=Za.y,da[Z+6]=Za.z,da[Z+7]=Za.w,da[Z+8]=$a.x,da[Z+9]=$a.y,da[Z+10]=$a.z,da[Z+11]=$a.w,Z+=12;for(v=0,B=W.length;v<B;v++)z=na[W[v]],ob=z.vertexTangents,Ya=ob[0],Za=ob[1],$a=ob[2],ac=ob[3],da[Z]=Ya.x,da[Z+1]=Ya.y,da[Z+2]=Ya.z,da[Z+3]=Ya.w,da[Z+4]=Za.x,da[Z+5]=Za.y,da[Z+6]=Za.z,da[Z+7]=Za.w,
da[Z+8]=$a.x,da[Z+9]=$a.y,da[Z+10]=$a.z,da[Z+11]=$a.w,da[Z+12]=ac.x,da[Z+13]=ac.y,da[Z+14]=ac.z,da[Z+15]=ac.w,Z+=16;f.bindBuffer(f.ARRAY_BUFFER,P.__webglTangentBuffer);f.bufferData(f.ARRAY_BUFFER,da,Ia)}if(ad&&Qc){for(v=0,B=V.length;v<B;v++)if(z=na[V[v]],Rb=z.vertexNormals,ub=z.normal,3===Rb.length&&qc)for(U=0;3>U;U++)Bb=Rb[U],Qa[za]=Bb.x,Qa[za+1]=Bb.y,Qa[za+2]=Bb.z,za+=3;else for(U=0;3>U;U++)Qa[za]=ub.x,Qa[za+1]=ub.y,Qa[za+2]=ub.z,za+=3;for(v=0,B=W.length;v<B;v++)if(z=na[W[v]],Rb=z.vertexNormals,
ub=z.normal,4===Rb.length&&qc)for(U=0;4>U;U++)Bb=Rb[U],Qa[za]=Bb.x,Qa[za+1]=Bb.y,Qa[za+2]=Bb.z,za+=3;else for(U=0;4>U;U++)Qa[za]=ub.x,Qa[za+1]=ub.y,Qa[za+2]=ub.z,za+=3;f.bindBuffer(f.ARRAY_BUFFER,P.__webglNormalBuffer);f.bufferData(f.ARRAY_BUFFER,Qa,Ia)}if(Uc&&Mc&&Rc){for(v=0,B=V.length;v<B;v++)if(Ra=V[v],z=na[Ra],Sb=Mc[Ra],void 0!==Sb)for(U=0;3>U;U++)Ub=Sb[U],fc[qb]=Ub.u,fc[qb+1]=Ub.v,qb+=2;for(v=0,B=W.length;v<B;v++)if(Ra=W[v],z=na[Ra],Sb=Mc[Ra],void 0!==Sb)for(U=0;4>U;U++)Ub=Sb[U],fc[qb]=Ub.u,
fc[qb+1]=Ub.v,qb+=2;0<qb&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglUVBuffer),f.bufferData(f.ARRAY_BUFFER,fc,Ia))}if(Uc&&Nc&&Rc){for(v=0,B=V.length;v<B;v++)if(Ra=V[v],z=na[Ra],Tb=Nc[Ra],void 0!==Tb)for(U=0;3>U;U++)Vb=Tb[U],gc[rb]=Vb.u,gc[rb+1]=Vb.v,rb+=2;for(v=0,B=W.length;v<B;v++)if(Ra=W[v],z=na[Ra],Tb=Nc[Ra],void 0!==Tb)for(U=0;4>U;U++)Vb=Tb[U],gc[rb]=Vb.u,gc[rb+1]=Vb.v,rb+=2;0<rb&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglUV2Buffer),f.bufferData(f.ARRAY_BUFFER,gc,Ia))}if(Ec){for(v=0,B=V.length;v<B;v++)z=
na[V[v]],mb[Pa]=la,mb[Pa+1]=la+1,mb[Pa+2]=la+2,Pa+=3,Ka[Ca]=la,Ka[Ca+1]=la+1,Ka[Ca+2]=la,Ka[Ca+3]=la+2,Ka[Ca+4]=la+1,Ka[Ca+5]=la+2,Ca+=6,la+=3;for(v=0,B=W.length;v<B;v++)z=na[W[v]],mb[Pa]=la,mb[Pa+1]=la+1,mb[Pa+2]=la+3,mb[Pa+3]=la+1,mb[Pa+4]=la+2,mb[Pa+5]=la+3,Pa+=6,Ka[Ca]=la,Ka[Ca+1]=la+1,Ka[Ca+2]=la,Ka[Ca+3]=la+3,Ka[Ca+4]=la+1,Ka[Ca+5]=la+2,Ka[Ca+6]=la+2,Ka[Ca+7]=la+3,Ca+=8,la+=4;f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,P.__webglFaceBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,mb,Ia);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,
!0;k.__dirtyTangents=!0;k.__dirtyColors=!0}}}else if(h instanceof THREE.Ribbon){if(k=h.geometry,!k.__webglVertexBuffer){var nb=k;nb.__webglVertexBuffer=f.createBuffer();nb.__webglColorBuffer=f.createBuffer();C.info.memory.geometries++;var mb=k,tb=mb.vertices.length;mb.__vertexArray=new Float32Array(3*tb);mb.__colorArray=new Float32Array(3*tb);mb.__webglVertexCount=tb;k.__dirtyVertices=!0;k.__dirtyColors=!0}}else if(h instanceof THREE.Line){if(k=h.geometry,!k.__webglVertexBuffer){var Ob=k;Ob.__webglVertexBuffer=
f.createBuffer();Ob.__webglColorBuffer=f.createBuffer();C.info.memory.geometries++;var $b=k,Yb=h,Hb=$b.vertices.length;$b.__vertexArray=new Float32Array(3*Hb);$b.__colorArray=new Float32Array(3*Hb);$b.__webglLineCount=Hb;b($b,Yb);k.__dirtyVertices=!0;k.__dirtyColors=!0}}else if(h instanceof THREE.ParticleSystem&&(k=h.geometry,!k.__webglVertexBuffer)){var Pb=k;Pb.__webglVertexBuffer=f.createBuffer();Pb.__webglColorBuffer=f.createBuffer();C.info.geometries++;var Qb=k,Zb=h,Ib=Qb.vertices.length;Qb.__vertexArray=
new Float32Array(3*Ib);Qb.__colorArray=new Float32Array(3*Ib);Qb.__sortArray=[];Qb.__webglParticleCount=Ib;b(Qb,Zb);k.__dirtyVertices=!0;k.__dirtyColors=!0}if(!h.__webglActive){if(h instanceof THREE.Mesh)if(k=h.geometry,k instanceof THREE.BufferGeometry)j(i.__webglObjects,k,h);else for(m in k.geometryGroups)p=k.geometryGroups[m],j(i.__webglObjects,p,h);else h instanceof THREE.Ribbon||h instanceof THREE.Line||h instanceof THREE.ParticleSystem?(k=h.geometry,j(i.__webglObjects,k,h)):void 0!==THREE.MarchingCubes&&
h instanceof THREE.MarchingCubes||h.immediateRenderCallback?i.__webglObjectsImmediate.push({object:h,opaque:null,transparent:null}):h instanceof THREE.Sprite?i.__webglSprites.push(h):h instanceof THREE.LensFlare&&i.__webglFlares.push(h);h.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var Oa=a.__objectsRemoved[0],qc=a;Oa instanceof THREE.Mesh||Oa instanceof THREE.ParticleSystem||Oa instanceof THREE.Ribbon||Oa instanceof THREE.Line?q(qc.__webglObjects,Oa):Oa instanceof
THREE.Sprite?o(qc.__webglSprites,Oa):Oa instanceof THREE.LensFlare?o(qc.__webglFlares,Oa):(Oa instanceof THREE.MarchingCubes||Oa.immediateRenderCallback)&&q(qc.__webglObjectsImmediate,Oa);Oa.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var Gc=0,mc=a.__webglObjects.length;Gc<mc;Gc++){var Ta=a.__webglObjects[Gc].object,R=Ta.geometry,ac=void 0,Rb=void 0,Ea=void 0;if(Ta instanceof THREE.Mesh)if(R instanceof THREE.BufferGeometry)R.__dirtyVertices=!1,R.__dirtyElements=!1,R.__dirtyUvs=!1,R.__dirtyNormals=
!1,R.__dirtyColors=!1;else{for(var Hc=0,nc=R.geometryGroupsList.length;Hc<nc;Hc++)if(ac=R.geometryGroupsList[Hc],Ea=c(Ta,ac),Rb=Ea.attributes&&n(Ea),R.__dirtyVertices||R.__dirtyMorphTargets||R.__dirtyElements||R.__dirtyUvs||R.__dirtyNormals||R.__dirtyColors||R.__dirtyTangents||Rb){var P=ac,oc=Ta,Ia=f.DYNAMIC_DRAW,pc=!R.dynamic,Jb=Ea;if(P.__inittedArrays){var Qc=d(Jb),Ic=Jb.vertexColors?Jb.vertexColors:!1,Rc=e(Jb),rc=Qc===THREE.SmoothShading,v=void 0,B=void 0,Ra=void 0,z=void 0,Sb=void 0,ub=void 0,
Ua=void 0,sc=void 0,ob=void 0,Tb=void 0,Ub=void 0,E=void 0,F=void 0,G=void 0,Y=void 0,Xa=void 0,Ya=void 0,Za=void 0,bc=void 0,$a=void 0,ab=void 0,bb=void 0,cc=void 0,cb=void 0,db=void 0,eb=void 0,dc=void 0,fb=void 0,gb=void 0,hb=void 0,ec=void 0,ib=void 0,jb=void 0,kb=void 0,fc=void 0,vb=void 0,wb=void 0,xb=void 0,tc=void 0,yb=void 0,zb=void 0,Ab=void 0,uc=void 0,U=void 0,Sc=void 0,Bb=void 0,Vb=void 0,Wb=void 0,ua=void 0,Tc=void 0,qa=void 0,ra=void 0,Cb=void 0,pb=void 0,la=0,pa=0,qb=0,rb=0,Pa=0,za=
0,Z=0,Ca=0,ma=0,x=0,O=0,t=0,Ja=void 0,va=P.__vertexArray,gc=P.__uvArray,hc=P.__uv2Array,Qa=P.__normalArray,da=P.__tangentArray,wa=P.__colorArray,ea=P.__skinVertexAArray,fa=P.__skinVertexBArray,ga=P.__skinIndexArray,ha=P.__skinWeightArray,Jc=P.__morphTargetsArrays,Kc=P.__morphNormalsArrays,Lc=P.__webglCustomAttributesList,r=void 0,lb=P.__faceArray,Ka=P.__lineArray,Da=oc.geometry,Fc=Da.__dirtyElements,Uc=Da.__dirtyUvs,ad=Da.__dirtyNormals,bd=Da.__dirtyTangents,cd=Da.__dirtyColors,dd=Da.__dirtyMorphTargets,
Kb=Da.vertices,V=P.faces3,W=P.faces4,na=Da.faces,Mc=Da.faceVertexUvs[0],Nc=Da.faceVertexUvs[1],Lb=Da.skinVerticesA,Mb=Da.skinVerticesB,Nb=Da.skinIndices,Db=Da.skinWeights,Eb=Da.morphTargets,vc=Da.morphNormals;if(Da.__dirtyVertices){for(v=0,B=V.length;v<B;v++)z=na[V[v]],E=Kb[z.a].position,F=Kb[z.b].position,G=Kb[z.c].position,va[pa]=E.x,va[pa+1]=E.y,va[pa+2]=E.z,va[pa+3]=F.x,va[pa+4]=F.y,va[pa+5]=F.z,va[pa+6]=G.x,va[pa+7]=G.y,va[pa+8]=G.z,pa+=9;for(v=0,B=W.length;v<B;v++)z=na[W[v]],E=Kb[z.a].position,
F=Kb[z.b].position,G=Kb[z.c].position,Y=Kb[z.d].position,va[pa]=E.x,va[pa+1]=E.y,va[pa+2]=E.z,va[pa+3]=F.x,va[pa+4]=F.y,va[pa+5]=F.z,va[pa+6]=G.x,va[pa+7]=G.y,va[pa+8]=G.z,va[pa+9]=Y.x,va[pa+10]=Y.y,va[pa+11]=Y.z,pa+=12;f.bindBuffer(f.ARRAY_BUFFER,P.__webglVertexBuffer);f.bufferData(f.ARRAY_BUFFER,va,Ia)}if(dd)for(ua=0,Tc=Eb.length;ua<Tc;ua++){O=0;for(v=0,B=V.length;v<B;v++){Cb=V[v];z=na[Cb];E=Eb[ua].vertices[z.a].position;F=Eb[ua].vertices[z.b].position;G=Eb[ua].vertices[z.c].position;qa=Jc[ua];
qa[O]=E.x;qa[O+1]=E.y;qa[O+2]=E.z;qa[O+3]=F.x;qa[O+4]=F.y;qa[O+5]=F.z;qa[O+6]=G.x;qa[O+7]=G.y;qa[O+8]=G.z;if(Jb.morphNormals)rc?(pb=vc[ua].vertexNormals[Cb],$a=pb.a,ab=pb.b,bb=pb.c):bb=ab=$a=vc[ua].faceNormals[Cb],ra=Kc[ua],ra[O]=$a.x,ra[O+1]=$a.y,ra[O+2]=$a.z,ra[O+3]=ab.x,ra[O+4]=ab.y,ra[O+5]=ab.z,ra[O+6]=bb.x,ra[O+7]=bb.y,ra[O+8]=bb.z;O+=9}for(v=0,B=W.length;v<B;v++){Cb=W[v];z=na[Cb];E=Eb[ua].vertices[z.a].position;F=Eb[ua].vertices[z.b].position;G=Eb[ua].vertices[z.c].position;Y=Eb[ua].vertices[z.d].position;
qa=Jc[ua];qa[O]=E.x;qa[O+1]=E.y;qa[O+2]=E.z;qa[O+3]=F.x;qa[O+4]=F.y;qa[O+5]=F.z;qa[O+6]=G.x;qa[O+7]=G.y;qa[O+8]=G.z;qa[O+9]=Y.x;qa[O+10]=Y.y;qa[O+11]=Y.z;if(Jb.morphNormals)rc?(pb=vc[ua].vertexNormals[Cb],$a=pb.a,ab=pb.b,bb=pb.c,cc=pb.d):cc=bb=ab=$a=vc[ua].faceNormals[Cb],ra=Kc[ua],ra[O]=$a.x,ra[O+1]=$a.y,ra[O+2]=$a.z,ra[O+3]=ab.x,ra[O+4]=ab.y,ra[O+5]=ab.z,ra[O+6]=bb.x,ra[O+7]=bb.y,ra[O+8]=bb.z,ra[O+9]=cc.x,ra[O+10]=cc.y,ra[O+11]=cc.z;O+=12}f.bindBuffer(f.ARRAY_BUFFER,P.__webglMorphTargetsBuffers[ua]);
f.bufferData(f.ARRAY_BUFFER,Jc[ua],Ia);Jb.morphNormals&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglMorphNormalsBuffers[ua]),f.bufferData(f.ARRAY_BUFFER,Kc[ua],Ia))}if(Db.length){for(v=0,B=V.length;v<B;v++)z=na[V[v]],fb=Db[z.a],gb=Db[z.b],hb=Db[z.c],ha[x]=fb.x,ha[x+1]=fb.y,ha[x+2]=fb.z,ha[x+3]=fb.w,ha[x+4]=gb.x,ha[x+5]=gb.y,ha[x+6]=gb.z,ha[x+7]=gb.w,ha[x+8]=hb.x,ha[x+9]=hb.y,ha[x+10]=hb.z,ha[x+11]=hb.w,ib=Nb[z.a],jb=Nb[z.b],kb=Nb[z.c],ga[x]=ib.x,ga[x+1]=ib.y,ga[x+2]=ib.z,ga[x+3]=ib.w,ga[x+4]=jb.x,ga[x+
5]=jb.y,ga[x+6]=jb.z,ga[x+7]=jb.w,ga[x+8]=kb.x,ga[x+9]=kb.y,ga[x+10]=kb.z,ga[x+11]=kb.w,vb=Lb[z.a],wb=Lb[z.b],xb=Lb[z.c],ea[x]=vb.x,ea[x+1]=vb.y,ea[x+2]=vb.z,ea[x+3]=1,ea[x+4]=wb.x,ea[x+5]=wb.y,ea[x+6]=wb.z,ea[x+7]=1,ea[x+8]=xb.x,ea[x+9]=xb.y,ea[x+10]=xb.z,ea[x+11]=1,yb=Mb[z.a],zb=Mb[z.b],Ab=Mb[z.c],fa[x]=yb.x,fa[x+1]=yb.y,fa[x+2]=yb.z,fa[x+3]=1,fa[x+4]=zb.x,fa[x+5]=zb.y,fa[x+6]=zb.z,fa[x+7]=1,fa[x+8]=Ab.x,fa[x+9]=Ab.y,fa[x+10]=Ab.z,fa[x+11]=1,x+=12;for(v=0,B=W.length;v<B;v++)z=na[W[v]],fb=Db[z.a],
gb=Db[z.b],hb=Db[z.c],ec=Db[z.d],ha[x]=fb.x,ha[x+1]=fb.y,ha[x+2]=fb.z,ha[x+3]=fb.w,ha[x+4]=gb.x,ha[x+5]=gb.y,ha[x+6]=gb.z,ha[x+7]=gb.w,ha[x+8]=hb.x,ha[x+9]=hb.y,ha[x+10]=hb.z,ha[x+11]=hb.w,ha[x+12]=ec.x,ha[x+13]=ec.y,ha[x+14]=ec.z,ha[x+15]=ec.w,ib=Nb[z.a],jb=Nb[z.b],kb=Nb[z.c],fc=Nb[z.d],ga[x]=ib.x,ga[x+1]=ib.y,ga[x+2]=ib.z,ga[x+3]=ib.w,ga[x+4]=jb.x,ga[x+5]=jb.y,ga[x+6]=jb.z,ga[x+7]=jb.w,ga[x+8]=kb.x,ga[x+9]=kb.y,ga[x+10]=kb.z,ga[x+11]=kb.w,ga[x+12]=fc.x,ga[x+13]=fc.y,ga[x+14]=fc.z,ga[x+15]=fc.w,
vb=Lb[z.a],wb=Lb[z.b],xb=Lb[z.c],tc=Lb[z.d],ea[x]=vb.x,ea[x+1]=vb.y,ea[x+2]=vb.z,ea[x+3]=1,ea[x+4]=wb.x,ea[x+5]=wb.y,ea[x+6]=wb.z,ea[x+7]=1,ea[x+8]=xb.x,ea[x+9]=xb.y,ea[x+10]=xb.z,ea[x+11]=1,ea[x+12]=tc.x,ea[x+13]=tc.y,ea[x+14]=tc.z,ea[x+15]=1,yb=Mb[z.a],zb=Mb[z.b],Ab=Mb[z.c],uc=Mb[z.d],fa[x]=yb.x,fa[x+1]=yb.y,fa[x+2]=yb.z,fa[x+3]=1,fa[x+4]=zb.x,fa[x+5]=zb.y,fa[x+6]=zb.z,fa[x+7]=1,fa[x+8]=Ab.x,fa[x+9]=Ab.y,fa[x+10]=Ab.z,fa[x+11]=1,fa[x+12]=uc.x,fa[x+13]=uc.y,fa[x+14]=uc.z,fa[x+15]=1,x+=16;0<x&&(f.bindBuffer(f.ARRAY_BUFFER,
P.__webglSkinVertexABuffer),f.bufferData(f.ARRAY_BUFFER,ea,Ia),f.bindBuffer(f.ARRAY_BUFFER,P.__webglSkinVertexBBuffer),f.bufferData(f.ARRAY_BUFFER,fa,Ia),f.bindBuffer(f.ARRAY_BUFFER,P.__webglSkinIndicesBuffer),f.bufferData(f.ARRAY_BUFFER,ga,Ia),f.bindBuffer(f.ARRAY_BUFFER,P.__webglSkinWeightsBuffer),f.bufferData(f.ARRAY_BUFFER,ha,Ia))}if(cd&&Ic){for(v=0,B=V.length;v<B;v++)z=na[V[v]],Ua=z.vertexColors,sc=z.color,3===Ua.length&&Ic===THREE.VertexColors?(cb=Ua[0],db=Ua[1],eb=Ua[2]):eb=db=cb=sc,wa[ma]=
cb.r,wa[ma+1]=cb.g,wa[ma+2]=cb.b,wa[ma+3]=db.r,wa[ma+4]=db.g,wa[ma+5]=db.b,wa[ma+6]=eb.r,wa[ma+7]=eb.g,wa[ma+8]=eb.b,ma+=9;for(v=0,B=W.length;v<B;v++)z=na[W[v]],Ua=z.vertexColors,sc=z.color,4===Ua.length&&Ic===THREE.VertexColors?(cb=Ua[0],db=Ua[1],eb=Ua[2],dc=Ua[3]):dc=eb=db=cb=sc,wa[ma]=cb.r,wa[ma+1]=cb.g,wa[ma+2]=cb.b,wa[ma+3]=db.r,wa[ma+4]=db.g,wa[ma+5]=db.b,wa[ma+6]=eb.r,wa[ma+7]=eb.g,wa[ma+8]=eb.b,wa[ma+9]=dc.r,wa[ma+10]=dc.g,wa[ma+11]=dc.b,ma+=12;0<ma&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglColorBuffer),
f.bufferData(f.ARRAY_BUFFER,wa,Ia))}if(bd&&Da.hasTangents){for(v=0,B=V.length;v<B;v++)z=na[V[v]],ob=z.vertexTangents,Xa=ob[0],Ya=ob[1],Za=ob[2],da[Z]=Xa.x,da[Z+1]=Xa.y,da[Z+2]=Xa.z,da[Z+3]=Xa.w,da[Z+4]=Ya.x,da[Z+5]=Ya.y,da[Z+6]=Ya.z,da[Z+7]=Ya.w,da[Z+8]=Za.x,da[Z+9]=Za.y,da[Z+10]=Za.z,da[Z+11]=Za.w,Z+=12;for(v=0,B=W.length;v<B;v++)z=na[W[v]],ob=z.vertexTangents,Xa=ob[0],Ya=ob[1],Za=ob[2],bc=ob[3],da[Z]=Xa.x,da[Z+1]=Xa.y,da[Z+2]=Xa.z,da[Z+3]=Xa.w,da[Z+4]=Ya.x,da[Z+5]=Ya.y,da[Z+6]=Ya.z,da[Z+7]=Ya.w,
da[Z+8]=Za.x,da[Z+9]=Za.y,da[Z+10]=Za.z,da[Z+11]=Za.w,da[Z+12]=bc.x,da[Z+13]=bc.y,da[Z+14]=bc.z,da[Z+15]=bc.w,Z+=16;f.bindBuffer(f.ARRAY_BUFFER,P.__webglTangentBuffer);f.bufferData(f.ARRAY_BUFFER,da,Ia)}if(ad&&Qc){for(v=0,B=V.length;v<B;v++)if(z=na[V[v]],Sb=z.vertexNormals,ub=z.normal,3===Sb.length&&rc)for(U=0;3>U;U++)Bb=Sb[U],Qa[za]=Bb.x,Qa[za+1]=Bb.y,Qa[za+2]=Bb.z,za+=3;else for(U=0;3>U;U++)Qa[za]=ub.x,Qa[za+1]=ub.y,Qa[za+2]=ub.z,za+=3;for(v=0,B=W.length;v<B;v++)if(z=na[W[v]],Sb=z.vertexNormals,
ub=z.normal,4===Sb.length&&rc)for(U=0;4>U;U++)Bb=Sb[U],Qa[za]=Bb.x,Qa[za+1]=Bb.y,Qa[za+2]=Bb.z,za+=3;else for(U=0;4>U;U++)Qa[za]=ub.x,Qa[za+1]=ub.y,Qa[za+2]=ub.z,za+=3;f.bindBuffer(f.ARRAY_BUFFER,P.__webglNormalBuffer);f.bufferData(f.ARRAY_BUFFER,Qa,Ia)}if(Uc&&Mc&&Rc){for(v=0,B=V.length;v<B;v++)if(Ra=V[v],z=na[Ra],Tb=Mc[Ra],void 0!==Tb)for(U=0;3>U;U++)Vb=Tb[U],gc[qb]=Vb.u,gc[qb+1]=Vb.v,qb+=2;for(v=0,B=W.length;v<B;v++)if(Ra=W[v],z=na[Ra],Tb=Mc[Ra],void 0!==Tb)for(U=0;4>U;U++)Vb=Tb[U],gc[qb]=Vb.u,
gc[qb+1]=Vb.v,qb+=2;0<qb&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglUVBuffer),f.bufferData(f.ARRAY_BUFFER,gc,Ia))}if(Uc&&Nc&&Rc){for(v=0,B=V.length;v<B;v++)if(Ra=V[v],z=na[Ra],Ub=Nc[Ra],void 0!==Ub)for(U=0;3>U;U++)Wb=Ub[U],hc[rb]=Wb.u,hc[rb+1]=Wb.v,rb+=2;for(v=0,B=W.length;v<B;v++)if(Ra=W[v],z=na[Ra],Ub=Nc[Ra],void 0!==Ub)for(U=0;4>U;U++)Wb=Ub[U],hc[rb]=Wb.u,hc[rb+1]=Wb.v,rb+=2;0<rb&&(f.bindBuffer(f.ARRAY_BUFFER,P.__webglUV2Buffer),f.bufferData(f.ARRAY_BUFFER,hc,Ia))}if(Fc){for(v=0,B=V.length;v<B;v++)z=
na[V[v]],lb[Pa]=la,lb[Pa+1]=la+1,lb[Pa+2]=la+2,Pa+=3,Ka[Ca]=la,Ka[Ca+1]=la+1,Ka[Ca+2]=la,Ka[Ca+3]=la+2,Ka[Ca+4]=la+1,Ka[Ca+5]=la+2,Ca+=6,la+=3;for(v=0,B=W.length;v<B;v++)z=na[W[v]],lb[Pa]=la,lb[Pa+1]=la+1,lb[Pa+2]=la+3,lb[Pa+3]=la+1,lb[Pa+4]=la+2,lb[Pa+5]=la+3,Pa+=6,Ka[Ca]=la,Ka[Ca+1]=la+1,Ka[Ca+2]=la,Ka[Ca+3]=la+3,Ka[Ca+4]=la+1,Ka[Ca+5]=la+2,Ka[Ca+6]=la+2,Ka[Ca+7]=la+3,Ca+=8,la+=4;f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,P.__webglFaceBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,lb,Ia);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,
P.__webglLineBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,Ka,Ia)}if(Lc)for(U=0,Sc=Lc.length;U<Sc;U++)if(r=Lc[U],r.__original.needsUpdate){t=0;if(1===r.size)if(void 0===r.boundTo||"vertices"===r.boundTo){for(v=0,B=V.length;v<B;v++)z=na[V[v]],r.array[t]=r.value[z.a],r.array[t+1]=r.value[z.b],r.array[t+2]=r.value[z.c],t+=3;for(v=0,B=W.length;v<B;v++)z=na[W[v]],r.array[t]=r.value[z.a],r.array[t+1]=r.value[z.b],r.array[t+2]=r.value[z.c],r.array[t+3]=r.value[z.d],t+=4}else{if("faces"===r.boundTo){for(v=
0,B=V.length;v<B;v++)Ja=r.value[V[v]],r.array[t]=Ja,r.array[t+1]=Ja,r.array[t+2]=Ja,t+=3;for(v=0,B=W.length;v<B;v++)Ja=r.value[W[v]],r.array[t]=Ja,r.array[t+1]=Ja,r.array[t+2]=Ja,r.array[t+3]=Ja,t+=4}}else if(2===r.size)if(void 0===r.boundTo||"vertices"===r.boundTo){for(v=0,B=V.length;v<B;v++)z=na[V[v]],E=r.value[z.a],F=r.value[z.b],G=r.value[z.c],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=F.x,r.array[t+3]=F.y,r.array[t+4]=G.x,r.array[t+5]=G.y,t+=6;for(v=0,B=W.length;v<B;v++)z=na[W[v]],E=r.value[z.a],
F=r.value[z.b],G=r.value[z.c],Y=r.value[z.d],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=F.x,r.array[t+3]=F.y,r.array[t+4]=G.x,r.array[t+5]=G.y,r.array[t+6]=Y.x,r.array[t+7]=Y.y,t+=8}else{if("faces"===r.boundTo){for(v=0,B=V.length;v<B;v++)G=F=E=Ja=r.value[V[v]],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=F.x,r.array[t+3]=F.y,r.array[t+4]=G.x,r.array[t+5]=G.y,t+=6;for(v=0,B=W.length;v<B;v++)Y=G=F=E=Ja=r.value[W[v]],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=F.x,r.array[t+3]=F.y,r.array[t+4]=G.x,
......@@ -288,17 +288,17 @@ F=r.value[z.b],G=r.value[z.c],Y=r.value[z.d],r.array[t]=E[Q[0]],r.array[t+1]=E[Q
r.array[t+6]=G[Q[0]],r.array[t+7]=G[Q[1]],r.array[t+8]=G[Q[2]],t+=9;for(v=0,B=W.length;v<B;v++)Y=G=F=E=Ja=r.value[W[v]],r.array[t]=E[Q[0]],r.array[t+1]=E[Q[1]],r.array[t+2]=E[Q[2]],r.array[t+3]=F[Q[0]],r.array[t+4]=F[Q[1]],r.array[t+5]=F[Q[2]],r.array[t+6]=G[Q[0]],r.array[t+7]=G[Q[1]],r.array[t+8]=G[Q[2]],r.array[t+9]=Y[Q[0]],r.array[t+10]=Y[Q[1]],r.array[t+11]=Y[Q[2]],t+=12}}else if(4===r.size)if(void 0===r.boundTo||"vertices"===r.boundTo){for(v=0,B=V.length;v<B;v++)z=na[V[v]],E=r.value[z.a],F=r.value[z.b],
G=r.value[z.c],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=E.z,r.array[t+3]=E.w,r.array[t+4]=F.x,r.array[t+5]=F.y,r.array[t+6]=F.z,r.array[t+7]=F.w,r.array[t+8]=G.x,r.array[t+9]=G.y,r.array[t+10]=G.z,r.array[t+11]=G.w,t+=12;for(v=0,B=W.length;v<B;v++)z=na[W[v]],E=r.value[z.a],F=r.value[z.b],G=r.value[z.c],Y=r.value[z.d],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=E.z,r.array[t+3]=E.w,r.array[t+4]=F.x,r.array[t+5]=F.y,r.array[t+6]=F.z,r.array[t+7]=F.w,r.array[t+8]=G.x,r.array[t+9]=G.y,r.array[t+
10]=G.z,r.array[t+11]=G.w,r.array[t+12]=Y.x,r.array[t+13]=Y.y,r.array[t+14]=Y.z,r.array[t+15]=Y.w,t+=16}else if("faces"===r.boundTo){for(v=0,B=V.length;v<B;v++)G=F=E=Ja=r.value[V[v]],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=E.z,r.array[t+3]=E.w,r.array[t+4]=F.x,r.array[t+5]=F.y,r.array[t+6]=F.z,r.array[t+7]=F.w,r.array[t+8]=G.x,r.array[t+9]=G.y,r.array[t+10]=G.z,r.array[t+11]=G.w,t+=12;for(v=0,B=W.length;v<B;v++)Y=G=F=E=Ja=r.value[W[v]],r.array[t]=E.x,r.array[t+1]=E.y,r.array[t+2]=E.z,r.array[t+
3]=E.w,r.array[t+4]=F.x,r.array[t+5]=F.y,r.array[t+6]=F.z,r.array[t+7]=F.w,r.array[t+8]=G.x,r.array[t+9]=G.y,r.array[t+10]=G.z,r.array[t+11]=G.w,r.array[t+12]=Y.x,r.array[t+13]=Y.y,r.array[t+14]=Y.z,r.array[t+15]=Y.w,t+=16}f.bindBuffer(f.ARRAY_BUFFER,r.buffer);f.bufferData(f.ARRAY_BUFFER,r.array,Ia)}oc&&(delete P.__inittedArrays,delete P.__colorArray,delete P.__normalArray,delete P.__tangentArray,delete P.__uvArray,delete P.__uv2Array,delete P.__faceArray,delete P.__vertexArray,delete P.__lineArray,
delete P.__skinVertexAArray,delete P.__skinVertexBArray,delete P.__skinIndexArray,delete P.__skinWeightArray)}}R.__dirtyVertices=!1;R.__dirtyMorphTargets=!1;R.__dirtyElements=!1;R.__dirtyUvs=!1;R.__dirtyNormals=!1;R.__dirtyColors=!1;R.__dirtyTangents=!1;Ea.attributes&&l(Ea)}else if(Ta instanceof THREE.Ribbon){if(R.__dirtyVertices||R.__dirtyColors){var Fb=R,Vc=f.DYNAMIC_DRAW,hc=void 0,ic=void 0,vc=void 0,Gb=void 0,wc=void 0,Wc=Fb.vertices,Xc=Fb.colors,ed=Wc.length,fd=Xc.length,xc=Fb.__vertexArray,
yc=Fb.__colorArray,gd=Fb.__dirtyColors;if(Fb.__dirtyVertices){for(hc=0;hc<ed;hc++)vc=Wc[hc].position,Gb=3*hc,xc[Gb]=vc.x,xc[Gb+1]=vc.y,xc[Gb+2]=vc.z;f.bindBuffer(f.ARRAY_BUFFER,Fb.__webglVertexBuffer);f.bufferData(f.ARRAY_BUFFER,xc,Vc)}if(gd){for(ic=0;ic<fd;ic++)wc=Xc[ic],Gb=3*ic,yc[Gb]=wc.r,yc[Gb+1]=wc.g,yc[Gb+2]=wc.b;f.bindBuffer(f.ARRAY_BUFFER,Fb.__webglColorBuffer);f.bufferData(f.ARRAY_BUFFER,yc,Vc)}}R.__dirtyVertices=!1;R.__dirtyColors=!1}else if(Ta instanceof THREE.Line){Ea=c(Ta,$b);Qb=Ea.attributes&&
n(Ea);if(R.__dirtyVertices||R.__dirtyColors||Qb){var sb=R,Oc=f.DYNAMIC_DRAW,jc=void 0,kc=void 0,zc=void 0,ia=void 0,Ac=void 0,Yc=sb.vertices,Zc=sb.colors,hd=Yc.length,id=Zc.length,Bc=sb.__vertexArray,Cc=sb.__colorArray,jd=sb.__dirtyColors,Pc=sb.__webglCustomAttributesList,Dc=void 0,$c=void 0,ya=void 0,Wb=void 0,Fa=void 0,ba=void 0;if(sb.__dirtyVertices){for(jc=0;jc<hd;jc++)zc=Yc[jc].position,ia=3*jc,Bc[ia]=zc.x,Bc[ia+1]=zc.y,Bc[ia+2]=zc.z;f.bindBuffer(f.ARRAY_BUFFER,sb.__webglVertexBuffer);f.bufferData(f.ARRAY_BUFFER,
Bc,Oc)}if(jd){for(kc=0;kc<id;kc++)Ac=Zc[kc],ia=3*kc,Cc[ia]=Ac.r,Cc[ia+1]=Ac.g,Cc[ia+2]=Ac.b;f.bindBuffer(f.ARRAY_BUFFER,sb.__webglColorBuffer);f.bufferData(f.ARRAY_BUFFER,Cc,Oc)}if(Pc)for(Dc=0,$c=Pc.length;Dc<$c;Dc++)if(ba=Pc[Dc],ba.needsUpdate&&(void 0===ba.boundTo||"vertices"===ba.boundTo)){ia=0;Wb=ba.value.length;if(1===ba.size)for(ya=0;ya<Wb;ya++)ba.array[ya]=ba.value[ya];else if(2===ba.size)for(ya=0;ya<Wb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.x,ba.array[ia+1]=Fa.y,ia+=2;else if(3===ba.size)if("c"===
ba.type)for(ya=0;ya<Wb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.r,ba.array[ia+1]=Fa.g,ba.array[ia+2]=Fa.b,ia+=3;else for(ya=0;ya<Wb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.x,ba.array[ia+1]=Fa.y,ba.array[ia+2]=Fa.z,ia+=3;else if(4===ba.size)for(ya=0;ya<Wb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.x,ba.array[ia+1]=Fa.y,ba.array[ia+2]=Fa.z,ba.array[ia+3]=Fa.w,ia+=4;f.bindBuffer(f.ARRAY_BUFFER,ba.buffer);f.bufferData(f.ARRAY_BUFFER,ba.array,Oc)}}R.__dirtyVertices=!1;R.__dirtyColors=!1;Ea.attributes&&l(Ea)}else if(Ta instanceof
THREE.ParticleSystem)Ea=c(Ta,$b),Qb=Ea.attributes&&n(Ea),(R.__dirtyVertices||R.__dirtyColors||Ta.sortParticles||Qb)&&g(R,f.DYNAMIC_DRAW,Ta),R.__dirtyVertices=!1,R.__dirtyColors=!1,Ea.attributes&&l(Ea)}};this.initMaterial=function(a,b,c,d){var e,g,h,i,j;a instanceof THREE.MeshDepthMaterial?j="depth":a instanceof THREE.MeshNormalMaterial?j="normal":a instanceof THREE.MeshBasicMaterial?j="basic":a instanceof THREE.MeshLambertMaterial?j="lambert":a instanceof THREE.MeshPhongMaterial?j="phong":a instanceof
3]=E.w,r.array[t+4]=F.x,r.array[t+5]=F.y,r.array[t+6]=F.z,r.array[t+7]=F.w,r.array[t+8]=G.x,r.array[t+9]=G.y,r.array[t+10]=G.z,r.array[t+11]=G.w,r.array[t+12]=Y.x,r.array[t+13]=Y.y,r.array[t+14]=Y.z,r.array[t+15]=Y.w,t+=16}f.bindBuffer(f.ARRAY_BUFFER,r.buffer);f.bufferData(f.ARRAY_BUFFER,r.array,Ia)}pc&&(delete P.__inittedArrays,delete P.__colorArray,delete P.__normalArray,delete P.__tangentArray,delete P.__uvArray,delete P.__uv2Array,delete P.__faceArray,delete P.__vertexArray,delete P.__lineArray,
delete P.__skinVertexAArray,delete P.__skinVertexBArray,delete P.__skinIndexArray,delete P.__skinWeightArray)}}R.__dirtyVertices=!1;R.__dirtyMorphTargets=!1;R.__dirtyElements=!1;R.__dirtyUvs=!1;R.__dirtyNormals=!1;R.__dirtyColors=!1;R.__dirtyTangents=!1;Ea.attributes&&l(Ea)}else if(Ta instanceof THREE.Ribbon){if(R.__dirtyVertices||R.__dirtyColors){var Fb=R,Vc=f.DYNAMIC_DRAW,ic=void 0,jc=void 0,wc=void 0,Gb=void 0,xc=void 0,Wc=Fb.vertices,Xc=Fb.colors,ed=Wc.length,fd=Xc.length,yc=Fb.__vertexArray,
zc=Fb.__colorArray,gd=Fb.__dirtyColors;if(Fb.__dirtyVertices){for(ic=0;ic<ed;ic++)wc=Wc[ic].position,Gb=3*ic,yc[Gb]=wc.x,yc[Gb+1]=wc.y,yc[Gb+2]=wc.z;f.bindBuffer(f.ARRAY_BUFFER,Fb.__webglVertexBuffer);f.bufferData(f.ARRAY_BUFFER,yc,Vc)}if(gd){for(jc=0;jc<fd;jc++)xc=Xc[jc],Gb=3*jc,zc[Gb]=xc.r,zc[Gb+1]=xc.g,zc[Gb+2]=xc.b;f.bindBuffer(f.ARRAY_BUFFER,Fb.__webglColorBuffer);f.bufferData(f.ARRAY_BUFFER,zc,Vc)}}R.__dirtyVertices=!1;R.__dirtyColors=!1}else if(Ta instanceof THREE.Line){Ea=c(Ta,ac);Rb=Ea.attributes&&
n(Ea);if(R.__dirtyVertices||R.__dirtyColors||Rb){var sb=R,Oc=f.DYNAMIC_DRAW,kc=void 0,lc=void 0,Ac=void 0,ia=void 0,Bc=void 0,Yc=sb.vertices,Zc=sb.colors,hd=Yc.length,id=Zc.length,Cc=sb.__vertexArray,Dc=sb.__colorArray,jd=sb.__dirtyColors,Pc=sb.__webglCustomAttributesList,Ec=void 0,$c=void 0,ya=void 0,Xb=void 0,Fa=void 0,ba=void 0;if(sb.__dirtyVertices){for(kc=0;kc<hd;kc++)Ac=Yc[kc].position,ia=3*kc,Cc[ia]=Ac.x,Cc[ia+1]=Ac.y,Cc[ia+2]=Ac.z;f.bindBuffer(f.ARRAY_BUFFER,sb.__webglVertexBuffer);f.bufferData(f.ARRAY_BUFFER,
Cc,Oc)}if(jd){for(lc=0;lc<id;lc++)Bc=Zc[lc],ia=3*lc,Dc[ia]=Bc.r,Dc[ia+1]=Bc.g,Dc[ia+2]=Bc.b;f.bindBuffer(f.ARRAY_BUFFER,sb.__webglColorBuffer);f.bufferData(f.ARRAY_BUFFER,Dc,Oc)}if(Pc)for(Ec=0,$c=Pc.length;Ec<$c;Ec++)if(ba=Pc[Ec],ba.needsUpdate&&(void 0===ba.boundTo||"vertices"===ba.boundTo)){ia=0;Xb=ba.value.length;if(1===ba.size)for(ya=0;ya<Xb;ya++)ba.array[ya]=ba.value[ya];else if(2===ba.size)for(ya=0;ya<Xb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.x,ba.array[ia+1]=Fa.y,ia+=2;else if(3===ba.size)if("c"===
ba.type)for(ya=0;ya<Xb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.r,ba.array[ia+1]=Fa.g,ba.array[ia+2]=Fa.b,ia+=3;else for(ya=0;ya<Xb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.x,ba.array[ia+1]=Fa.y,ba.array[ia+2]=Fa.z,ia+=3;else if(4===ba.size)for(ya=0;ya<Xb;ya++)Fa=ba.value[ya],ba.array[ia]=Fa.x,ba.array[ia+1]=Fa.y,ba.array[ia+2]=Fa.z,ba.array[ia+3]=Fa.w,ia+=4;f.bindBuffer(f.ARRAY_BUFFER,ba.buffer);f.bufferData(f.ARRAY_BUFFER,ba.array,Oc)}}R.__dirtyVertices=!1;R.__dirtyColors=!1;Ea.attributes&&l(Ea)}else if(Ta instanceof
THREE.ParticleSystem)Ea=c(Ta,ac),Rb=Ea.attributes&&n(Ea),(R.__dirtyVertices||R.__dirtyColors||Ta.sortParticles||Rb)&&g(R,f.DYNAMIC_DRAW,Ta),R.__dirtyVertices=!1,R.__dirtyColors=!1,Ea.attributes&&l(Ea)}};this.initMaterial=function(a,b,c,d){var e,g,h,i,j;a instanceof THREE.MeshDepthMaterial?j="depth":a instanceof THREE.MeshNormalMaterial?j="normal":a instanceof THREE.MeshBasicMaterial?j="basic":a instanceof THREE.MeshLambertMaterial?j="lambert":a instanceof THREE.MeshPhongMaterial?j="phong":a instanceof
THREE.LineBasicMaterial?j="basic":a instanceof THREE.ParticleBasicMaterial&&(j="particle_basic");if(j){var k=THREE.ShaderLib[j];a.uniforms=THREE.UniformsUtils.clone(k.uniforms);a.vertexShader=k.vertexShader;a.fragmentShader=k.fragmentShader}var l,m;g=k=0;for(l=0,m=b.length;l<m;l++)e=b[l],e.onlyShadow||(e instanceof THREE.DirectionalLight&&g++,e instanceof THREE.PointLight&&k++,e instanceof THREE.SpotLight&&k++);k+g<=$?l=g:(l=Math.ceil($*g/(k+g)),k=$-l);e=l;g=k;var n=0;for(k=0,l=b.length;k<l;k++)m=
b[k],m.castShadow&&(m instanceof THREE.SpotLight&&n++,m instanceof THREE.DirectionalLight&&!m.shadowCascade&&n++);var p=50;if(void 0!==d&&d instanceof THREE.SkinnedMesh)p=d.bones.length;var o;a:{l=a.fragmentShader;m=a.vertexShader;var k=a.uniforms,b=a.attributes,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,
maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:g,maxBones:p,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,maxShadows:n,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:d&&d.doubleSided},q,d=[];j?d.push(j):(d.push(l),d.push(m));for(q in c)d.push(q),d.push(c[q]);j=d.join();for(q=0,d=Va.length;q<d;q++)if(Va[q].code===j){o=
Va[q].program;break a}q=f.createProgram();d=[0<oc?"#define VERTEX_TEXTURES":"",C.gammaInput?"#define GAMMA_INPUT":"",C.gammaOutput?"#define GAMMA_OUTPUT":"",C.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":
Va[q].program;break a}q=f.createProgram();d=[0<pc?"#define VERTEX_TEXTURES":"",C.gammaInput?"#define GAMMA_INPUT":"",C.gammaOutput?"#define GAMMA_OUTPUT":"",C.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":
"",c.skinning?"#define USE_SKINNING":"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\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;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
e=["precision "+D+" float;","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",C.gammaInput?"#define GAMMA_INPUT":"",C.gammaOutput?"#define GAMMA_OUTPUT":"",C.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?
"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");f.attachShader(q,w("fragment",e+l));
......@@ -312,7 +312,7 @@ a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglI
a.needsUpdate=!1;if(a.onUpdate)a.onUpdate()}else f.activeTexture(f.TEXTURE0+b),f.bindTexture(f.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(void 0===a.depthBuffer)a.depthBuffer=!0;if(void 0===a.stencilBuffer)a.stencilBuffer=!0;a.__webglTexture=f.createTexture();var c=0===(a.width&a.width-1)&&0===(a.height&a.height-1),d=H(a.format),e=H(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];f.bindTexture(f.TEXTURE_CUBE_MAP,
a.__webglTexture);N(f.TEXTURE_CUBE_MAP,a,c);for(c=0;6>c;c++){a.__webglFramebuffer[c]=f.createFramebuffer();a.__webglRenderbuffer[c]=f.createRenderbuffer();f.texImage2D(f.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,d,a.width,a.height,0,d,e,null);var g=a,h=f.TEXTURE_CUBE_MAP_POSITIVE_X+c;f.bindFramebuffer(f.FRAMEBUFFER,a.__webglFramebuffer[c]);f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,h,g.__webglTexture,0);A(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=f.createFramebuffer(),a.__webglRenderbuffer=
f.createRenderbuffer(),f.bindTexture(f.TEXTURE_2D,a.__webglTexture),N(f.TEXTURE_2D,a,c),f.texImage2D(f.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=f.TEXTURE_2D,f.bindFramebuffer(f.FRAMEBUFFER,a.__webglFramebuffer),f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,d,a.__webglTexture,0),A(a.__webglRenderbuffer,a);b?f.bindTexture(f.TEXTURE_CUBE_MAP,null):f.bindTexture(f.TEXTURE_2D,null);f.bindRenderbuffer(f.RENDERBUFFER,null);f.bindFramebuffer(f.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:
a.__webglFramebuffer,d=a.width,a=a.height,c=e=0):(b=null,d=Hb,a=Ob,e=Nb,c=Xb);b!==S&&(f.bindFramebuffer(f.FRAMEBUFFER,b),f.viewport(e,c,d,a),S=b);lc=d;mc=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};
a.__webglFramebuffer,d=a.width,a=a.height,c=e=0):(b=null,d=Pb,a=Zb,e=Yb,c=Hb);b!==S&&(f.bindFramebuffer(f.FRAMEBUFFER,b),f.viewport(e,c,d,a),S=b);mc=d;nc=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};
THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:THREE.RGBAFormat;this.type=void 0!==c.type?c.type:
THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0};
THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;return a};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};
......@@ -386,7 +386,7 @@ w.target.position.copy(s.target.position);w.lookAt(w.target);w.shadowCameraVisib
format:THREE.RGBAFormat}),l.shadowMapSize=new THREE.Vector2(l.shadowMapWidth,l.shadowMapHeight),l.shadowMatrix=new THREE.Matrix4;if(!l.shadowCamera){if(l instanceof THREE.SpotLight)l.shadowCamera=new THREE.PerspectiveCamera(l.shadowCameraFov,l.shadowMapWidth/l.shadowMapHeight,l.shadowCameraNear,l.shadowCameraFar);else if(l instanceof THREE.DirectionalLight)l.shadowCamera=new THREE.OrthographicCamera(l.shadowCameraLeft,l.shadowCameraRight,l.shadowCameraTop,l.shadowCameraBottom,l.shadowCameraNear,l.shadowCameraFar);
else{console.error("Unsupported light type for shadow");continue}m.add(l.shadowCamera);b.autoUpdateScene&&m.updateMatrixWorld()}if(l.shadowCameraVisible&&!l.cameraHelper)l.cameraHelper=new THREE.CameraHelper(l.shadowCamera),l.shadowCamera.add(l.cameraHelper);if(l.isVirtual&&A.originalCamera==k){o=k;q=l.shadowCamera;p=l.pointsFrustum;w=l.pointsWorld;h.set(Infinity,Infinity,Infinity);i.set(-Infinity,-Infinity,-Infinity);for(s=0;8>s;s++){y=w[s];y.copy(p[s]);THREE.ShadowMapPlugin.__projector.unprojectVector(y,
o);q.matrixWorldInverse.multiplyVector3(y);if(y.x<h.x)h.x=y.x;if(y.x>i.x)i.x=y.x;if(y.y<h.y)h.y=y.y;if(y.y>i.y)i.y=y.y;if(y.z<h.z)h.z=y.z;if(y.z>i.z)i.z=y.z}q.left=h.x;q.right=i.x;q.top=i.y;q.bottom=h.y;q.updateProjectionMatrix()}q=l.shadowMap;p=l.shadowMatrix;o=l.shadowCamera;o.position.copy(l.matrixWorld.getPosition());o.lookAt(l.target.matrixWorld.getPosition());o.updateMatrixWorld();o.matrixWorldInverse.getInverse(o.matrixWorld);if(l.cameraHelper)l.cameraHelper.lines.visible=l.shadowCameraVisible;
l.shadowCameraVisible&&l.cameraHelper.update(l.shadowCamera);p.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);p.multiplySelf(o.projectionMatrix);p.multiplySelf(o.matrixWorldInverse);if(!o._viewMatrixArray)o._viewMatrixArray=new Float32Array(16);o.matrixWorldInverse.flattenToArray(o._viewMatrixArray);if(!o._projectionMatrixArray)o._projectionMatrixArray=new Float32Array(16);o.projectionMatrix.flattenToArray(o._projectionMatrixArray);g.multiply(o.projectionMatrix,o.matrixWorldInverse);e.setFromMatrix(g);
l.shadowCameraVisible&&l.cameraHelper.update(l.shadowCamera);p.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);p.multiplySelf(o.projectionMatrix);p.multiplySelf(o.matrixWorldInverse);if(!o._viewMatrixArray)o._viewMatrixArray=new Float32Array(16);if(!o._projectionMatrixArray)o._projectionMatrixArray=new Float32Array(16);o.matrixWorldInverse.flattenToArray(o._viewMatrixArray);o.projectionMatrix.flattenToArray(o._projectionMatrixArray);g.multiply(o.projectionMatrix,o.matrixWorldInverse);e.setFromMatrix(g);
b.setRenderTarget(q);b.clear();w=m.__webglObjects;for(l=0,q=w.length;l<q;l++)if(s=w[l],p=s.object,s.render=!1,p.visible&&p.castShadow&&(!(p instanceof THREE.Mesh)||!p.frustumCulled||e.contains(p)))p.matrixWorld.flattenToArray(p._objectMatrixArray),p._modelViewMatrix.multiplyToArray(o.matrixWorldInverse,p.matrixWorld,p._modelViewMatrixArray),s.render=!0;for(l=0,q=w.length;l<q;l++)if(s=w[l],s.render)p=s.object,s=s.buffer,b.setObjectFaces(p),y=p.customDepthMaterial?p.customDepthMaterial:p.geometry.morphTargets.length?
d:c,s instanceof THREE.BufferGeometry?b.renderBufferDirect(o,m.__lights,null,y,s,p):b.renderBuffer(o,m.__lights,null,y,s,p);w=m.__webglObjectsImmediate;for(l=0,q=w.length;l<q;l++)s=w[l],p=s.object,p.visible&&p.castShadow&&(p.matrixAutoUpdate&&p.matrixWorld.flattenToArray(p._objectMatrixArray),p._modelViewMatrix.multiplyToArray(o.matrixWorldInverse,p.matrixWorld,p._modelViewMatrixArray),b.renderImmediateObject(o,m.__lights,null,c,p))}j=b.getClearColor();n=b.getClearAlpha();a.clearColor(j.r,j.g,j.b,
n);a.enable(a.BLEND);b.shadowMapCullFrontFaces&&a.cullFace(a.BACK)}};THREE.ShadowMapPlugin.__projector=new THREE.Projector;
......
......@@ -55,25 +55,29 @@ THREE.DepthPassPlugin = function ( ) {
_renderer.setDepthTest( true );
// render depth map
// update scene
if ( _renderer.autoUpdateScene ) scene.updateMatrixWorld();
camera.matrixWorldInverse.getInverse( camera.matrixWorld );
// update camera matrices and frustum
if ( ! camera._viewMatrixArray ) camera._viewMatrixArray = new Float32Array( 16 );
camera.matrixWorldInverse.flattenToArray( camera._viewMatrixArray );
if ( ! camera._projectionMatrixArray ) camera._projectionMatrixArray = new Float32Array( 16 );
camera.matrixWorldInverse.getInverse( camera.matrixWorld );
camera.matrixWorldInverse.flattenToArray( camera._viewMatrixArray );
camera.projectionMatrix.flattenToArray( camera._projectionMatrixArray );
_projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse );
_frustum.setFromMatrix( _projScreenMatrix );
// render depth map
_renderer.setRenderTarget( this.renderTarget );
_renderer.clear();
// set matrices & frustum culling
// set object matrices & frustum culling
renderList = scene.__webglObjects;
......
......@@ -191,21 +191,23 @@ THREE.ShadowMapPlugin = function ( ) {
shadowMatrix.multiplySelf( shadowCamera.projectionMatrix );
shadowMatrix.multiplySelf( shadowCamera.matrixWorldInverse );
// render shadow map
// update camera matrices and frustum
if ( ! shadowCamera._viewMatrixArray ) shadowCamera._viewMatrixArray = new Float32Array( 16 );
shadowCamera.matrixWorldInverse.flattenToArray( shadowCamera._viewMatrixArray );
if ( ! shadowCamera._projectionMatrixArray ) shadowCamera._projectionMatrixArray = new Float32Array( 16 );
shadowCamera.matrixWorldInverse.flattenToArray( shadowCamera._viewMatrixArray );
shadowCamera.projectionMatrix.flattenToArray( shadowCamera._projectionMatrixArray );
_projScreenMatrix.multiply( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );
_frustum.setFromMatrix( _projScreenMatrix );
// render shadow map
_renderer.setRenderTarget( shadowMap );
_renderer.clear();
// set matrices & frustum culling
// set object matrices & frustum culling
renderList = scene.__webglObjects;
......
......@@ -140,6 +140,7 @@ THREE.WebGLRenderer = function ( parameters ) {
// camera matrices cache
_projScreenMatrix = new THREE.Matrix4(),
_projScreenMatrixPS = new THREE.Matrix4(),
_vector3 = new THREE.Vector4(),
......@@ -847,14 +848,15 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( object.sortParticles ) {
_projScreenMatrix.multiplySelf( object.matrixWorld );
_projScreenMatrixPS.copy( _projScreenMatrix );
_projScreenMatrixPS.multiplySelf( object.matrixWorld );
for ( v = 0; v < vl; v ++ ) {
vertex = vertices[ v ].position;
_vector3.copy( vertex );
_projScreenMatrix.multiplyVector3( _vector3 );
_projScreenMatrixPS.multiplyVector3( _vector3 );
sortArray[ v ] = [ _vector3.z, v ];
......@@ -3274,7 +3276,7 @@ THREE.WebGLRenderer = function ( parameters ) {
_currentMaterialId = -1;
if ( this.autoUpdateObjects ) this.initWebGLObjects( scene );
// update scene graph
if ( camera.parent === undefined ) {
......@@ -3285,26 +3287,34 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( this.autoUpdateScene ) scene.updateMatrixWorld();
// custom render plugins (pre pass)
renderPlugins( this.renderPluginsPre, scene, camera );
// update camera matrices and frustum
_this.info.render.calls = 0;
_this.info.render.vertices = 0;
_this.info.render.faces = 0;
_this.info.render.points = 0;
if ( ! camera._viewMatrixArray ) camera._viewMatrixArray = new Float32Array( 16 );
if ( ! camera._projectionMatrixArray ) camera._projectionMatrixArray = new Float32Array( 16 );
camera.matrixWorldInverse.getInverse( camera.matrixWorld );
if ( ! camera._viewMatrixArray ) camera._viewMatrixArray = new Float32Array( 16 );
camera.matrixWorldInverse.flattenToArray( camera._viewMatrixArray );
if ( ! camera._projectionMatrixArray ) camera._projectionMatrixArray = new Float32Array( 16 );
camera.projectionMatrix.flattenToArray( camera._projectionMatrixArray );
_projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse );
_frustum.setFromMatrix( _projScreenMatrix );
// update WebGL objects
if ( this.autoUpdateObjects ) this.initWebGLObjects( scene );
// custom render plugins (pre pass)
renderPlugins( this.renderPluginsPre, scene, camera );
//
_this.info.render.calls = 0;
_this.info.render.vertices = 0;
_this.info.render.faces = 0;
_this.info.render.points = 0;
this.setRenderTarget( renderTarget );
if ( this.autoClear || forceClear ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册