g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,l=c*g,m=c*d,b[0]=g*h,b[4]=m-a*e,b[8]=l*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+l,b[10]=a-m*e):"XZY"===a.order&&(a=f*g,k=f*d,l=c*g,m=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+m,b[5]=f*h,b[9]=k*e-l,b[2]=l*e-k,b[6]=c*h,b[10]=m*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;returnthis},setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");returnthis.makeRotationFromQuaternion(a)},
e).normalize();0===c.length()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.length()&&(c.x+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;returnthis}}(),multiply:function(a,b){returnvoid0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},multiplyMatrices:function(a,b){varc=a.elements,
a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;returnthis},multiplyVector3:function(a){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.");returna.applyProjection(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");returna.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");
a.y,a.z);returnb}}(),rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");returna.applyMatrix4(this)},determinant:function(){vara=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],l=a[2],m=a[6],p=a[10],n=a[14];returna[3]*(+e*h*m-d*k*
a},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=newTHREE.Box3);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=newTHREE.Sphere);this.boundingSphere.setFromPoints(this.vertices)},merge:function(a,b){if(!1===ainstanceofTHREE.Geometry)console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",a);else{varc,d=this.vertices.length,e=this.vertices,f=a.vertices,g=this.faces,
e=0;for(f=u.length;e<f;e++)r=u[e],n.vertexColors.push(r.clone());g.push(n)}m=0;for(p=l.length;m<p;m++)if(c=l[m],d=[],void0!==c){e=0;for(f=c.length;e<f;e++)d.push(c[e].clone());k.push(d)}}},mergeMesh:function(a){!1===ainstanceofTHREE.Mesh?console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",a):(a.matrixAutoUpdate&&a.updateMatrix(),this.merge(a.geometry,a.matrix))},mergeVertices:function(){vara={},b=[],c=[],d,e=Math.pow(10,4),f,g;f=0;for(g=this.vertices.length;f<g;f++)d=
b=newTHREE.Vector3;returnfunction(){null===this.boundingSphere&&(this.boundingSphere=newTHREE.Sphere);varc=this.attributes.position.array;if(c){a.makeEmpty();for(vard=this.boundingSphere.center,e=0,f=c.length;e<f;e+=3)b.fromArray(c,e),a.expandByPoint(b);a.center(d);for(varg=0,e=0,f=c.length;e<f;e+=3)b.fromArray(c,e),g=Math.max(g,d.distanceToSquared(b));this.boundingSphere.radius=Math.sqrt(g);isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',
k[b].add(I);k[c].add(I);l[a].add(N);l[b].add(N);l[c].add(N)}functionb(a){aa.fromArray(e,3*a);fa.copy(aa);na=k[a];T.copy(na);T.sub(aa.multiplyScalar(aa.dot(na))).normalize();K.crossVectors(fa,na);pa=K.dot(l[a]);ea=0>pa?-1:1;h[4*a]=T.x;h[4*a+1]=T.y;h[4*a+2]=T.z;h[4*a+3]=ea}if(void0===this.attributes.index||void0===this.attributes.position||void0===this.attributes.normal||void0===this.attributes.uv)console.warn("THREE.BufferGeometry: Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");
k[b].add(I);k[c].add(I);l[a].add(N);l[b].add(N);l[c].add(N)}functionb(a){aa.fromArray(e,3*a);fa.copy(aa);na=k[a];T.copy(na);T.sub(aa.multiplyScalar(aa.dot(na))).normalize();L.crossVectors(fa,na);pa=L.dot(l[a]);ea=0>pa?-1:1;h[4*a]=T.x;h[4*a+1]=T.y;h[4*a+2]=T.z;h[4*a+3]=ea}if(void0===this.attributes.index||void0===this.attributes.position||void0===this.attributes.normal||void0===this.attributes.uv)console.warn("THREE.BufferGeometry: Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");
n[t]<k.index?(p[2*q]=t,p[2*q+1]=-1,l++):(p[2*q]=t,p[2*q+1]=n[t]);if(g+m>k.index+a)for(k={start:f,count:0,index:g},h.push(k),m=0;6>m;m+=2)q=p[m+1],-1<q&&q<k.index&&(p[m+1]=-1);for(m=0;6>m;m+=2)t=p[m],q=p[m+1],-1===q&&(q=g++),n[t]=q,r[q]=t,e[f++]=q-k.index,k.count++}this.reorderBuffers(e,r,g);returnthis.drawcalls=this.offsets=h},merge:function(a,b){if(!1===ainstanceofTHREE.BufferGeometry)console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",a);else{void0===
if(void0!==b){a.program=void0;a=0;for(varc=va.length;a!==c;++a){vard=va[a];if(d.program===b){0===--d.usedTimes&&(c-=1,va[a]=va[c],va.pop(),s.deleteProgram(b),Aa.programs=c);break}}}}functionk(a,b,c,d){vare;if(cinstanceofTHREE.InstancedBufferGeometry&&(e=V.get("ANGLE_instanced_arrays"),null===e)){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}varg=c.attributes;b=b.getAttributes();
a=a.defaultAttributeValues;for(varfinb){varh=b[f];if(0<=h){vark=g[f];if(void0!==k){varl=k.itemSize;P.enableAttribute(h);varn=ia.getAttributeBuffer(k);if(kinstanceofTHREE.InterleavedBufferAttribute){varm=k.data,p=m.stride,k=k.offset;s.bindBuffer(s.ARRAY_BUFFER,n);s.vertexAttribPointer(h,l,s.FLOAT,!1,p*m.array.BYTES_PER_ELEMENT,(d*p+k)*m.array.BYTES_PER_ELEMENT);if(minstanceofTHREE.InstancedInterleavedBuffer){if(null===e){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferAttribute but hardware does not support extension ANGLE_instanced_arrays.");
a=a.defaultAttributeValues;for(varfinb){varh=b[f];if(0<=h){vark=g[f];if(void0!==k){varl=k.itemSize;O.enableAttribute(h);varn=ia.getAttributeBuffer(k);if(kinstanceofTHREE.InterleavedBufferAttribute){varm=k.data,p=m.stride,k=k.offset;s.bindBuffer(s.ARRAY_BUFFER,n);s.vertexAttribPointer(h,l,s.FLOAT,!1,p*m.array.BYTES_PER_ELEMENT,(d*p+k)*m.array.BYTES_PER_ELEMENT);if(minstanceofTHREE.InstancedInterleavedBuffer){if(null===e){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferAttribute but hardware does not support extension ANGLE_instanced_arrays.");
return}e.vertexAttribDivisorANGLE(h,m.meshPerAttribute);void0===c.maxInstancedCount&&(c.maxInstancedCount=m.meshPerAttribute*m.count)}}elseif(s.bindBuffer(s.ARRAY_BUFFER,n),s.vertexAttribPointer(h,l,s.FLOAT,!1,0,d*l*4),kinstanceofTHREE.InstancedBufferAttribute){if(null===e){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferAttribute but hardware does not support extension ANGLE_instanced_arrays.");return}e.vertexAttribDivisorANGLE(h,k.meshPerAttribute);void0===
(U=Math.min(f.skeleton.bones.length,U),U<f.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+f.skeleton.bones.length+", this GPU supports just "+U+" (try OpenGL instead of ANGLE)"));na=U}varQ={precision:C,supportsVertexTextures:lb,map:!!d.map,envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,lightMap:!!d.lightMap,aoMap:!!d.aoMap,emissiveMap:!!d.emissiveMap,bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,combine:d.combine,vertexColors:d.vertexColors,
(U=Math.min(f.skeleton.bones.length,U),U<f.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+f.skeleton.bones.length+", this GPU supports just "+U+" (try OpenGL instead of ANGLE)"));na=U}varQ={precision:B,supportsVertexTextures:lb,map:!!d.map,envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,lightMap:!!d.lightMap,aoMap:!!d.aoMap,emissiveMap:!!d.emissiveMap,bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,combine:d.combine,vertexColors:d.vertexColors,
-1<Xb().indexOf(Ca)?P.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,$a,Ca,Ma.width,Ma.height,0,Ma.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):P.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,$a,Ca,Ma.width,Ma.height,0,Ca,Gb,Ma.data);elseFb?P.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Ca,La[ja].width,La[ja].height,0,Ca,Gb,La[ja].data):P.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Ca,Ca,Gb,La[ja]);ha.generateMipmaps&&
-1<Xb().indexOf(Ca)?O.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,$a,Ca,Ma.width,Ma.height,0,Ma.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):O.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,$a,Ca,Ma.width,Ma.height,0,Ca,Gb,Ma.data);elseFb?O.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Ca,La[ja].width,La[ja].height,0,Ca,Gb,La[ja].data):O.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Ca,Ca,Gb,La[ja]);ha.generateMipmaps&&
db;a>=ab&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+ab);db+=1;returna}functionz(a,b,c,d){a[b+0]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}functionw(a,b,c){c?(s.texParameteri(a,s.TEXTURE_WRAP_S,G(b.wrapS)),s.texParameteri(a,s.TEXTURE_WRAP_T,G(b.wrapT)),s.texParameteri(a,s.TEXTURE_MAG_FILTER,G(b.magFilter)),s.texParameteri(a,s.TEXTURE_MIN_FILTER,G(b.minFilter))):(s.texParameteri(a,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(a,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),
b.wrapS===THREE.ClampToEdgeWrapping&&b.wrapT===THREE.ClampToEdgeWrapping||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping. ( "+b.sourceFile+" )"),s.texParameteri(a,s.TEXTURE_MAG_FILTER,y(b.magFilter)),s.texParameteri(a,s.TEXTURE_MIN_FILTER,y(b.minFilter)),b.minFilter!==THREE.NearestFilter&&b.minFilter!==THREE.LinearFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter. ( "+
0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);returnd}returna}functionL(a,b,c){s.bindFramebuffer(s.FRAMEBUFFER,a);s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,c,Z.get(b).__webglTexture,0)}functionB(a,b){s.bindRenderbuffer(s.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(s.renderbufferStorage(s.RENDERBUFFER,s.DEPTH_COMPONENT16,b.width,b.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,
0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);returnd}returna}functionK(a,b,c){s.bindFramebuffer(s.FRAMEBUFFER,a);s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,c,Z.get(b).__webglTexture,0)}functionD(a,b){s.bindRenderbuffer(s.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(s.renderbufferStorage(s.RENDERBUFFER,s.DEPTH_COMPONENT16,b.width,b.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,
returna}}(),D=0<D.precision&&0<M.precision,A=0<A.precision&&0<a.precision;"highp"!==C||D||(A?(C="mediump",console.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(C="lowp",console.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp.")));"mediump"!==C||A||(C="lowp",console.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));varKb=newTHREE.SpritePlugin(this,Ea),Lb=newTHREE.LensFlarePlugin(this,Na);this.getContext=function(){returns};this.forceContextLoss=
groundColors:[],positions:[]}},Aa={programs:0,geometries:0,textures:0},Q={calls:0,vertices:0,faces:0,points:0};this.info={render:Q,memory:Aa,programs:va};vars;try{a={alpha:C,depth:M,stencil:R,antialias:U,premultipliedAlpha:S,preserveDrawingBuffer:T};s=A||F.getContext("webgl",a)||F.getContext("experimental-webgl",a);if(null===s){if(null!==F.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context.";}F.addEventListener("webglcontextlost",
returna}}(),C=0<C.precision&&0<M.precision,A=0<A.precision&&0<a.precision;"highp"!==B||C||(A?(B="mediump",console.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(B="lowp",console.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp.")));"mediump"!==B||A||(B="lowp",console.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));varKb=newTHREE.SpritePlugin(this,Ea),Lb=newTHREE.LensFlarePlugin(this,Na);this.getContext=function(){returns};this.forceContextLoss=
ia.getAttributeBuffer(f);f.arrayinstanceofUint32Array&&V.get("OES_element_index_uint")?(c=s.UNSIGNED_INT,h=4):(c=s.UNSIGNED_SHORT,h=2);varn=g.offsets;if(0===n.length){e&&(k(d,a,g,0),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,l));if(ginstanceofTHREE.InstancedBufferGeometry&&0<g.maxInstancedCount){varm=V.get("ANGLE_instanced_arrays");if(null===m){console.error("THREE.WebGLRenderer.renderMesh: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");breaka}m.drawElementsInstancedANGLE(b,
f.array.length,c,0,g.maxInstancedCount)}elses.drawElements(b,f.array.length,c,0);Q.calls++;Q.vertices+=f.array.length;Q.faces+=f.array.length/3}else{e=!0;for(varf=0,r=n.length;f<r;f++){m=n[f].index;e&&(k(d,a,g,m),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,l));if(ginstanceofTHREE.InstancedBufferGeometry&&0<n[f].instances){m=V.get("ANGLE_instanced_arrays");if(null===m){console.error("THREE.WebGLRenderer.renderMesh: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
breaka}m.drawElementsInstancedANGLE(b,n[f].count,c,n[f].start*h,n[f].count,c,n[f].instances)}elses.drawElements(b,n[f].count,c,n[f].start*h);Q.calls++;Q.vertices+=n[f].count;Q.faces+=n[f].count/3}}}elseif(n=g.offsets,0===n.length){e&&k(d,a,g,0);d=g.attributes.position;if(ginstanceofTHREE.InstancedBufferGeometry&&0<g.maxInstancedCount){m=V.get("ANGLE_instanced_arrays");if(null===m){console.error("THREE.WebGLRenderer.renderMesh: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
breaka}dinstanceofTHREE.InterleavedBufferAttribute?m.drawArraysInstancedANGLE(b,0,d.data.count,g.maxInstancedCount):m.drawArraysInstancedANGLE(b,0,d.count,g.maxInstancedCount)}elsedinstanceofTHREE.InterleavedBufferAttribute?s.drawArrays(b,0,d.data.count):s.drawArrays(b,0,d.count);Q.calls++;Q.vertices+=d.count;Q.faces+=d.array.length/3}elsefor(e&&k(d,a,g,0),f=0,r=n.length;f<r;f++){if(ginstanceofTHREE.InstancedBufferGeometry){console.error("THREE.WebGLRenderer.renderMesh: cannot use drawCalls with THREE.InstancedBufferGeometry.");
V.get("OES_element_index_uint")?(c=s.UNSIGNED_INT,h=4):(c=s.UNSIGNED_SHORT,h=2);varn=g.offsets;if(0===n.length){e&&(k(d,a,g,0),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,l));if(ginstanceofTHREE.InstancedBufferGeometry&&0<g.maxInstancedCount){varm=V.get("ANGLE_instanced_arrays");if(null===m){console.error("THREE.WebGLRenderer.renderMesh: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");breaka}m.drawElementsInstancedANGLE(b,f.array.length,c,0,g.maxInstancedCount)}elses.drawElements(b,
f.array.length,c,0);Q.calls++;Q.vertices+=f.array.length;Q.faces+=f.array.length/3}else{e=!0;for(varf=0,r=n.length;f<r;f++){m=n[f].index;e&&(k(d,a,g,m),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,l));if(ginstanceofTHREE.InstancedBufferGeometry&&0<n[f].instances){m=V.get("ANGLE_instanced_arrays");if(null===m){console.error("THREE.WebGLRenderer.renderMesh: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");breaka}m.drawElementsInstancedANGLE(b,n[f].count,
c,n[f].start*h,n[f].count,c,n[f].instances)}elses.drawElements(b,n[f].count,c,n[f].start*h);Q.calls++;Q.vertices+=n[f].count;Q.faces+=n[f].count/3}}}elseif(n=g.offsets,0===n.length){e&&k(d,a,g,0);d=g.attributes.position;if(ginstanceofTHREE.InstancedBufferGeometry&&0<g.maxInstancedCount){m=V.get("ANGLE_instanced_arrays");if(null===m){console.error("THREE.WebGLRenderer.renderMesh: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");breaka}dinstanceof
THREE.InterleavedBufferAttribute?m.drawArraysInstancedANGLE(b,0,d.data.count,g.maxInstancedCount):m.drawArraysInstancedANGLE(b,0,d.count,g.maxInstancedCount)}elsedinstanceofTHREE.InterleavedBufferAttribute?s.drawArrays(b,0,d.data.count):s.drawArrays(b,0,d.count);Q.calls++;Q.vertices+=d.count;Q.faces+=d.array.length/3}elsefor(e&&k(d,a,g,0),f=0,r=n.length;f<r;f++){if(ginstanceofTHREE.InstancedBufferGeometry){console.error("THREE.WebGLRenderer.renderMesh: cannot use drawCalls with THREE.InstancedBufferGeometry.");
e[m].count,h,e[m].start*l),Q.calls++,Q.points+=e[m].count;elseif(c&&k(d,a,g,0),d=g.attributes.position,e=g.offsets,0===e.length)s.drawArrays(b,0,d.array.length/3),Q.calls++,Q.points+=d.array.length/3;elsefor(m=0,f=e.length;m<f;m++)s.drawArrays(b,e[m].index,e[m].count),Q.calls++,Q.points+=e[m].count}};this.render=function(a,b,c,d){if(!1===binstanceofTHREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{vare=a.fog;qa="";Va=-1;Ua=null;cb=!0;!0===
d.height,0,g,f,d.data);a.generateMipmaps=!1}elseP.texImage2D(s.TEXTURE_2D,0,g,d.width,d.height,0,g,f,d.data);elseif(ainstanceofTHREE.CompressedTexture)for(k=0,l=h.length;k<l;k++)d=h[k],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<Xb().indexOf(g)?P.compressedTexImage2D(s.TEXTURE_2D,k,g,d.width,d.height,0,d.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):P.texImage2D(s.TEXTURE_2D,k,g,d.width,d.height,0,g,f,d.data);
elseif(0<h.length&&c){k=0;for(l=h.length;k<l;k++)d=h[k],P.texImage2D(s.TEXTURE_2D,k,g,g,f,d);a.generateMipmaps=!1}elseP.texImage2D(s.TEXTURE_2D,0,g,g,f,a.image);a.generateMipmaps&&c&&s.generateMipmap(s.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate(a)};this.setTexture=function(a,b){a.image&&!1!==a.image.complete&&!0===a.__webglInit&&void0===Z.get(a).__webglInit&&(a.needsUpdate=!0);if(!0===a.needsUpdate){varc=a.image;void0===c?console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",
a):!1===c.complete?console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",a):ka.uploadTexture(a,b)}elseP.activeTexture(s.TEXTURE0+b),P.bindTexture(s.TEXTURE_2D,Z.get(a).__webglTexture)};this.setRenderTarget=function(a){varb=ainstanceofTHREE.WebGLRenderTargetCube;if(a&&void0===Z.get(a).__webglFramebuffer){varc=Z.get(a);void0===a.depthBuffer&&(a.depthBuffer=!0);void0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",f);c.__webglTexture=s.createTexture();
d.height,0,g,f,d.data);a.generateMipmaps=!1}elseO.texImage2D(s.TEXTURE_2D,0,g,d.width,d.height,0,g,f,d.data);elseif(ainstanceofTHREE.CompressedTexture)for(k=0,l=h.length;k<l;k++)d=h[k],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<Xb().indexOf(g)?O.compressedTexImage2D(s.TEXTURE_2D,k,g,d.width,d.height,0,d.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):O.texImage2D(s.TEXTURE_2D,k,g,d.width,d.height,0,g,f,d.data);
elseif(0<h.length&&c){k=0;for(l=h.length;k<l;k++)d=h[k],O.texImage2D(s.TEXTURE_2D,k,g,g,f,d);a.generateMipmaps=!1}elseO.texImage2D(s.TEXTURE_2D,0,g,g,f,a.image);a.generateMipmaps&&c&&s.generateMipmap(s.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate(a)};this.setTexture=function(a,b){a.image&&!1!==a.image.complete&&!0===a.__webglInit&&void0===Z.get(a).__webglInit&&(a.needsUpdate=!0);if(!0===a.needsUpdate){varc=a.image;void0===c?console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",
a):!1===c.complete?console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",a):ka.uploadTexture(a,b)}elseO.activeTexture(s.TEXTURE0+b),O.bindTexture(s.TEXTURE_2D,Z.get(a).__webglTexture)};this.setRenderTarget=function(a){varb=ainstanceofTHREE.WebGLRenderTargetCube;if(a&&void0===Z.get(a).__webglFramebuffer){varc=Z.get(a);void0===a.depthBuffer&&(a.depthBuffer=!0);void0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",f);c.__webglTexture=s.createTexture();
b!==Da&&(s.bindFramebuffer(s.FRAMEBUFFER,b),s.viewport(d,e,c,a),Da=b);bb=c;ib=a};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!(ainstanceofTHREE.WebGLRenderTarget))console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");elseif(Z.get(a).__webglFramebuffer)if(a.format!==THREE.RGBAFormat)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA format. readPixels can read only RGBA format.");else{varf=!1;Z.get(a).__webglFramebuffer!==
Da&&(s.bindFramebuffer(s.FRAMEBUFFER,Z.get(a).__webglFramebuffer),f=!0);s.checkFramebufferStatus(s.FRAMEBUFFER)===s.FRAMEBUFFER_COMPLETE?s.readPixels(b,c,d,e,s.RGBA,s.UNSIGNED_BYTE,g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.");f&&s.bindFramebuffer(s.FRAMEBUFFER,Da)}};this.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")};this.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")};
this.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")};this.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")};Object.defineProperties(this,{shadowMapEnabled:{get:function(){returnma.enabled},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");ma.enabled=a}},shadowMapType:{get:function(){returnma.type},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.");
y.shadowMapHeight,y.shadowCameraNear,y.shadowCameraFar);elseif(yinstanceofTHREE.DirectionalLight)y.shadowCamera=newTHREE.OrthographicCamera(y.shadowCameraLeft,y.shadowCameraRight,y.shadowCameraTop,y.shadowCameraBottom,y.shadowCameraNear,y.shadowCameraFar);else{console.error("THREE.ShadowMapPlugin: Unsupported light type for shadow",y);continue}c.add(y.shadowCamera);!0===c.autoUpdate&&c.updateMatrixWorld()}y.shadowCameraVisible&&!y.cameraHelper&&(y.cameraHelper=newTHREE.CameraHelper(y.shadowCamera),
THREE.GeometryUtils={merge:function(a,b,c){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");vard;binstanceofTHREE.Mesh&&(b.matrixAutoUpdate&&b.updateMatrix(),d=b.matrix,b=b.geometry);a.merge(b,d,c)},center:function(a){console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.");returna.center()}};
(function(a){varb=function(a){for(varb=a.length,e=0,f=b-1,g=0;g<b;f=g++)e+=a[f].x*a[g].y-a[g].x*a[f].y;return.5*e};a.Triangulate=function(a,d){vare=a.length;if(3>e)returnnull;varf=[],g=[],h=[],k,l,m;if(0<b(a))for(l=0;l<e;l++)g[l]=l;elsefor(l=0;l<e;l++)g[l]=e-1-l;varp=2*e;for(l=e-1;2<e;){if(0>=p--){console.warn("THREE.FontUtils: Warning, unable to triangulate polygon! in Triangulate.process()");break}k=l;e<=k&&(k=0);l=k+1;e<=l&&(l=0);m=l+1;e<=m&&(m=0);varn;a:{varr=n=void0,t=void0,q=void0,
THREE.ExtrudeGeometry.prototype.addShape=function(a,b){functionc(a,b,c){b||console.error("THREE.ExtrudeGeometry: vec does not exist");returnb.clone().multiplyScalar(c).add(a)}functiond(a,b,c){vard=1,d=a.x-b.x,e=a.y-b.y,f=c.x-a.x,g=c.y-a.y,h=d*d+e*e;if(1E-10<Math.abs(d*g-e*f)){vark=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)returnnewTHREE.Vector2(c,a);d=Math.sqrt(d/2)}elsea=!1,1E-10<d?1E-10<f&&(a=