vendor: 4,911 bytes, line 1
1!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory(global.THREE={})}(this,(function(exports){"use strict";function EventDispatcher(){}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Number.isInteger&&(Number.isInteger=function(value){return"number"==typeof value&&isFinite(value)&&Math.floor(value)===value}),void 0===Math.sign&&(Math.sign=function(x){return x<0?-1:x>0?1:+x}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(target){if(null==target)throw new TypeError("Cannot convert undefined or null to object");for(var output=Object(target),index=1;index<arguments.length;index++){var source=arguments[index];if(null!=source)for(var nextKey in source)Object.prototype.hasOwnProperty.call(source,nextKey)&&(output[nextKey]=source[nextKey])}return output}),Object.assign(EventDispatcher.prototype,{addEventListener:function(type,listener){void 0===this._listeners&&(this._listeners={});var listeners=this._listeners;void 0===listeners[type]&&(listeners[type]=[]),-1===listeners[type].indexOf(listener)&&listeners[type].push(listener)},hasEventListener:function(type,listener){if(void 0===this._listeners)return!1;var listeners=this._listeners;return void 0!==listeners[type]&&-1!==listeners[type].indexOf(listener)},removeEventListener:function(type,listener){if(void 0!==this._listeners){var listeners,listenerArray=this._listeners[type];if(void 0!==listenerArray){var index=listenerArray.indexOf(listener);-1!==index&&listenerArray.splice(index,1)}}},dispatchEvent:function(event){if(void 0!==this._listeners){var listeners,listenerArray=this._listeners[event.type];if(void 0!==listenerArray){event.target=this;for(var array=listenerArray.slice(0),i=0,l=array.length;i<l;i++)array[i].call(this,event)}}}});var REVISION="100",MOUSE={LEFT:0,MIDDLE:1,RIGHT:2},CullFaceNone=0,CullFaceBack=1,CullFaceFront=2,CullFaceFrontBack=3,FrontFaceDirectionCW=0,FrontFaceDirectionCCW=1,BasicShadowMap=0,PCFShadowMap=1,PCFSoftShadowMap=2,FrontSide=0,BackSide=1,DoubleSide=2,FlatShading=1,SmoothShading=2,NoColors=0,FaceColors=1,VertexColors=2,NoBlending=0,NormalBlending=1,AdditiveBlending=2,SubtractiveBlending=3,MultiplyBlending=4,CustomBlending=5,AddEquation=100,SubtractEquation=101,ReverseSubtractEquation=102,MinEquation=103,MaxEquation=104,ZeroFactor=200,OneFactor=201,SrcColorFactor=202,OneMinusSrcColorFactor=203,SrcAlphaFactor=204,OneMinusSrcAlphaFactor=205,DstAlphaFactor=206,OneMinusDstAlphaFactor=207,DstColorFactor=208,OneMinusDstColorFactor=209,SrcAlphaSaturateFactor=210,NeverDepth=0,AlwaysDepth=1,LessDepth=2,LessEqualDepth=3,EqualDepth=4,GreaterEqualDepth=5,GreaterDepth=6,NotEqualDepth=7,MultiplyOperation=0,MixOperation=1,AddOperation=2,NoToneMapping=0,LinearToneMapping=1,ReinhardToneMapping=2,Uncharted2ToneMapping=3,CineonToneMapping=4,ACESFilmicToneMapping=5,UVMapping=300,CubeReflectionMapping=301,CubeRefractionMapping=302,EquirectangularReflectionMapping=303,EquirectangularRefractionMapping=304,SphericalReflectionMapping=305,CubeUVReflectionMapping=306,CubeUVRefractionMapping=307,RepeatWrapping=1e3,ClampToEdgeWrapping=1001,MirroredRepeatWrapping=1002,NearestFilter=1003,NearestMipMapNearestFilter=1004,NearestMipMapLinearFilter=1005,LinearFilter=1006,LinearMipMapNearestFilter=1007,LinearMipMapLinearFilter=1008,UnsignedByteType=1009,ByteType=1010,ShortType=1011,UnsignedShortType=1012,IntType=1013,UnsignedIntType=1014,FloatType=1015,HalfFloatType=1016,UnsignedShort4444Type=1017,UnsignedShort5551Type=1018,UnsignedShort565Type=1019,UnsignedInt248Type=1020,AlphaFormat=1021,RGBFormat=1022,RGBAFormat=1023,LuminanceFormat=1024,LuminanceAlphaFormat=1025,RGBEFormat=1023,DepthFormat=1026,DepthStencilFormat=1027,RedFormat=1028,RGB_S3TC_DXT1_Format=33776,RGBA_S3TC_DXT1_Format=33777,RGBA_S3TC_DXT3_Format=33778,RGBA_S3TC_DXT5_Format=33779,RGB_PVRTC_4BPPV1_Format=35840,RGB_PVRTC_2BPPV1_Format=35841,RGBA_PVRTC_4BPPV1_Format=35842,RGBA_PVRTC_2BPPV1_Format=35843,RGB_ETC1_Format=36196,RGBA_ASTC_4x4_Format=37808,RGBA_ASTC_5x4_Format=37809,RGBA_ASTC_5x5_Format=37810,RGBA_ASTC_6x5_Format=37811,RGBA_ASTC_6x6_Format=37812,RGBA_ASTC_8x5_Format=37813,RGBA_ASTC_8x6_Format=37814,RGBA_ASTC_8x8_Format=37815,RGBA_ASTC_10x5_Format=37816,RGBA_ASTC_10x6_Format=37817,RGBA_ASTC_10x8_Format=37818,RGBA_ASTC_10x10_Format=37819,RGBA_ASTC_12x10_Format=37820,RGBA_ASTC_12x12_Format=37821,LoopOnce=2200,LoopRepeat=2201,LoopPingPong=2202,InterpolateDiscrete=2300,InterpolateLinear=2301,InterpolateSmooth=2302,ZeroCurvatureEnding=2400,ZeroSlopeEnding=2401,WrapAroundEnding=2402,TrianglesDrawMode=0,TriangleStripDrawMode=1,TriangleFanDrawMode=2,LinearEncoding=3e3,sRGBEncoding=3001,GammaEncoding=3007,RGBEEncoding=3002,
vendor: 5,040 bytes, line 1
1LogLuvEncoding=3003,RGBM7Encoding=3004,RGBM16Encoding=3005,RGBDEncoding=3006,BasicDepthPacking=3200,RGBADepthPacking=3201,TangentSpaceNormalMap=0,ObjectSpaceNormalMap=1,_Math={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){for(var lut=[],i=0;i<256;i++)lut[i]=(i<16?"0":"")+i.toString(16);return function generateUUID(){var d0=4294967295*Math.random()|0,d1=4294967295*Math.random()|0,d2=4294967295*Math.random()|0,d3=4294967295*Math.random()|0,uuid;return(lut[255&d0]+lut[d0>>8&255]+lut[d0>>16&255]+lut[d0>>24&255]+"-"+lut[255&d1]+lut[d1>>8&255]+"-"+lut[d1>>16&15|64]+lut[d1>>24&255]+"-"+lut[63&d2|128]+lut[d2>>8&255]+"-"+lut[d2>>16&255]+lut[d2>>24&255]+lut[255&d3]+lut[d3>>8&255]+lut[d3>>16&255]+lut[d3>>24&255]).toUpperCase()}}(),clamp:function(value,min,max){return Math.max(min,Math.min(max,value))},euclideanModulo:function(n,m){return(n%m+m)%m},mapLinear:function(x,a1,a2,b1,b2){return b1+(x-a1)*(b2-b1)/(a2-a1)},lerp:function(x,y,t){return(1-t)*x+t*y},smoothstep:function(x,min,max){return x<=min?0:x>=max?1:(x=(x-min)/(max-min))*x*(3-2*x)},smootherstep:function(x,min,max){return x<=min?0:x>=max?1:(x=(x-min)/(max-min))*x*x*(x*(6*x-15)+10)},randInt:function(low,high){return low+Math.floor(Math.random()*(high-low+1))},randFloat:function(low,high){return low+Math.random()*(high-low)},randFloatSpread:function(range){return range*(.5-Math.random())},degToRad:function(degrees){return degrees*_Math.DEG2RAD},radToDeg:function(radians){return radians*_Math.RAD2DEG},isPowerOfTwo:function(value){return 0==(value&value-1)&&0!==value},ceilPowerOfTwo:function(value){return Math.pow(2,Math.ceil(Math.log(value)/Math.LN2))},floorPowerOfTwo:function(value){return Math.pow(2,Math.floor(Math.log(value)/Math.LN2))}},min,max,vector,matrix,x,y,z,zero,one,v1,quaternion,_canvas;function Vector2(x,y){this.x=x||0,this.y=y||0}function Matrix4(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function Quaternion(x,y,z,w){this._x=x||0,this._y=y||0,this._z=z||0,this._w=void 0!==w?w:1}function Vector3(x,y,z){this.x=x||0,this.y=y||0,this.z=z||0}function Matrix3(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}Object.defineProperties(Vector2.prototype,{width:{get:function(){return this.x},set:function(value){this.x=value}},height:{get:function(){return this.y},set:function(value){this.y=value}}}),Object.assign(Vector2.prototype,{isVector2:!0,set:function(x,y){return this.x=x,this.y=y,this},setScalar:function(scalar){return this.x=scalar,this.y=scalar,this},setX:function(x){return this.x=x,this},setY:function(y){return this.y=y,this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(v){return this.x=v.x,this.y=v.y,this},add:function(v,w){return void 0!==w?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(v,w)):(this.x+=v.x,this.y+=v.y,this)},addScalar:function(s){return this.x+=s,this.y+=s,this},addVectors:function(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this},addScaledVector:function(v,s){return this.x+=v.x*s,this.y+=v.y*s,this},sub:function(v,w){return void 0!==w?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(v,w)):(this.x-=v.x,this.y-=v.y,this)},subScalar:function(s){return this.x-=s,this.y-=s,this},subVectors:function(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this},multiply:function(v){return this.x*=v.x,this.y*=v.y,this},multiplyScalar:function(scalar){return this.x*=scalar,this.y*=scalar,this},divide:function(v){return this.x/=v.x,this.y/=v.y,this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},applyMatrix3:function(m){var x=this.x,y=this.y,e=m.elements;return this.x=e[0]*x+e[3]*y+e[6],this.y=e[1]*x+e[4]*y+e[7],this},min:function(v){return this.x=Math.min(this.x,v.x),this.y=Math.min(this.y,v.y),this},max:function(v){return this.x=Math.max(this.x,v.x),this.y=Math.max(this.y,v.y),this},clamp:function(min,max){return this.x=Math.max(min.x,Math.min(max.x,this.x)),this.y=Math.max(min.y,Math.min(max.y,this.y)),this},clampScalar:(min=new Vector2,max=new Vector2,function clampScalar(minVal,maxVal){return min.set(minVal,minVal),max.set(maxVal,maxVal),this.clamp(min,max)}),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}
vendor: 4,715 bytes, line 1
1,round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(v){return this.x*v.x+this.y*v.y},cross:function(v){return this.x*v.y-this.y*v.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var angle=Math.atan2(this.y,this.x);return angle<0&&(angle+=2*Math.PI),angle},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y;return dx*dx+dy*dy},manhattanDistanceTo:function(v){return Math.abs(this.x-v.x)+Math.abs(this.y-v.y)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){return this.x+=(v.x-this.x)*alpha,this.y+=(v.y-this.y)*alpha,this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},equals:function(v){return v.x===this.x&&v.y===this.y},fromArray:function(array,offset){return void 0===offset&&(offset=0),this.x=array[offset],this.y=array[offset+1],this},toArray:function(array,offset){return void 0===array&&(array=[]),void 0===offset&&(offset=0),array[offset]=this.x,array[offset+1]=this.y,array},fromBufferAttribute:function(attribute,index,offset){return void 0!==offset&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=attribute.getX(index),this.y=attribute.getY(index),this},rotateAround:function(center,angle){var c=Math.cos(angle),s=Math.sin(angle),x=this.x-center.x,y=this.y-center.y;return this.x=x*c-y*s+center.x,this.y=x*s+y*c+center.y,this}}),Object.assign(Matrix4.prototype,{isMatrix4:!0,set:function(n11,n12,n13,n14,n21,n22,n23,n24,n31,n32,n33,n34,n41,n42,n43,n44){var te=this.elements;return te[0]=n11,te[4]=n12,te[8]=n13,te[12]=n14,te[1]=n21,te[5]=n22,te[9]=n23,te[13]=n24,te[2]=n31,te[6]=n32,te[10]=n33,te[14]=n34,te[3]=n41,te[7]=n42,te[11]=n43,te[15]=n44,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new Matrix4).fromArray(this.elements)},copy:function(m){var te=this.elements,me=m.elements;return te[0]=me[0],te[1]=me[1],te[2]=me[2],te[3]=me[3],te[4]=me[4],te[5]=me[5],te[6]=me[6],te[7]=me[7],te[8]=me[8],te[9]=me[9],te[10]=me[10],te[11]=me[11],te[12]=me[12],te[13]=me[13],te[14]=me[14],te[15]=me[15],this},copyPosition:function(m){var te=this.elements,me=m.elements;return te[12]=me[12],te[13]=me[13],te[14]=me[14],this},extractBasis:function(xAxis,yAxis,zAxis){return xAxis.setFromMatrixColumn(this,0),yAxis.setFromMatrixColumn(this,1),zAxis.setFromMatrixColumn(this,2),this},makeBasis:function(xAxis,yAxis,zAxis){return this.set(xAxis.x,yAxis.x,zAxis.x,0,xAxis.y,yAxis.y,zAxis.y,0,xAxis.z,yAxis.z,zAxis.z,0,0,0,0,1),this},extractRotation:(v1=new Vector3,function extractRotation(m){var te=this.elements,me=m.elements,scaleX=1/v1.setFromMatrixColumn(m,0).length(),scaleY=1/v1.setFromMatrixColumn(m,1).length(),scaleZ=1/v1.setFromMatrixColumn(m,2).length();return te[0]=me[0]*scaleX,te[1]=me[1]*scaleX,te[2]=me[2]*scaleX,te[3]=0,te[4]=me[4]*scaleY,te[5]=me[5]*scaleY,te[6]=me[6]*scaleY,te[7]=0,te[8]=me[8]*scaleZ,te[9]=me[9]*scaleZ,te[10]=me[10]*scaleZ,te[11]=0,te[12]=0,te[13]=0,te[14]=0,te[15]=1,this}),makeRotationFromEuler:function(euler){euler&&euler.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var te=this.elements,x=euler.x,y=euler.y,z=euler.z,a=Math.cos(x),b=Math.sin(x),c=Math.cos(y),d=Math.sin(y),e=Math.cos(z),f=Math.sin(z);if("XYZ"===euler.order){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e,te[4]=-c*f,te[8]=d,te[1]=af+be*d,te[5]=ae-bf*d,te[9]=-b*c,te[2]=bf-ae*d,te[6]=be+af*d,te[10]=a*c}else if("YXZ"===euler.order){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce+df*b,te[4]=de*b-cf,te[8]=a*d,te[1]=a*f,te[5]=a*e,te[9]=-b,te[2]=cf*b-de,te[6]=df+ce*b,te[10]=a*c}else if("ZXY"===euler.order){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce-df*b,te[4]=-a*f,te[8]=de+cf*b,te[1]=cf+de*b,te[5]=a*e,te[9]=df-ce*b,te[2]=-a*d,te[6]=b,te[10]=a*c}else if("ZYX"===euler.order){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e,te[4]=be*d-af,te[8]=ae*d+bf,te[1]=c*f,te[5]=bf*d+ae,te[9]=af*d-be,te[2]=-d,te[6]=b*c,te[10]=a*c}else if("YZX"===euler.order){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e,te[4]=bd-ac*f,te[8]=bc*f+ad,te[1]=f,te[5]=a*e,te[9]=-b*e,te[2]=-d*e,te[6]=ad*f+bc,te[10]=ac-bd*f}
vendor: 8,067 bytes, line 1
1else if("XZY"===euler.order){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e,te[4]=-f,te[8]=d*e,te[1]=ac*f+bd,te[5]=a*e,te[9]=ad*f-bc,te[2]=bc*f-ad,te[6]=b*e,te[10]=bd*f+ac}return te[3]=0,te[7]=0,te[11]=0,te[12]=0,te[13]=0,te[14]=0,te[15]=1,this},makeRotationFromQuaternion:(zero=new Vector3(0,0,0),one=new Vector3(1,1,1),function makeRotationFromQuaternion(q){return this.compose(zero,q,one)}),lookAt:(x=new Vector3,y=new Vector3,z=new Vector3,function lookAt(eye,target,up){var te=this.elements;return z.subVectors(eye,target),0===z.lengthSq()&&(z.z=1),z.normalize(),x.crossVectors(up,z),0===x.lengthSq()&&(1===Math.abs(up.z)?z.x+=1e-4:z.z+=1e-4,z.normalize(),x.crossVectors(up,z)),x.normalize(),y.crossVectors(z,x),te[0]=x.x,te[4]=y.x,te[8]=z.x,te[1]=x.y,te[5]=y.y,te[9]=z.y,te[2]=x.z,te[6]=y.z,te[10]=z.z,this}),multiply:function(m,n){return void 0!==n?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(m,n)):this.multiplyMatrices(this,m)},premultiply:function(m){return this.multiplyMatrices(m,this)},multiplyMatrices:function(a,b){var ae=a.elements,be=b.elements,te=this.elements,a11=ae[0],a12=ae[4],a13=ae[8],a14=ae[12],a21=ae[1],a22=ae[5],a23=ae[9],a24=ae[13],a31=ae[2],a32=ae[6],a33=ae[10],a34=ae[14],a41=ae[3],a42=ae[7],a43=ae[11],a44=ae[15],b11=be[0],b12=be[4],b13=be[8],b14=be[12],b21=be[1],b22=be[5],b23=be[9],b24=be[13],b31=be[2],b32=be[6],b33=be[10],b34=be[14],b41=be[3],b42=be[7],b43=be[11],b44=be[15];return te[0]=a11*b11+a12*b21+a13*b31+a14*b41,te[4]=a11*b12+a12*b22+a13*b32+a14*b42,te[8]=a11*b13+a12*b23+a13*b33+a14*b43,te[12]=a11*b14+a12*b24+a13*b34+a14*b44,te[1]=a21*b11+a22*b21+a23*b31+a24*b41,te[5]=a21*b12+a22*b22+a23*b32+a24*b42,te[9]=a21*b13+a22*b23+a23*b33+a24*b43,te[13]=a21*b14+a22*b24+a23*b34+a24*b44,te[2]=a31*b11+a32*b21+a33*b31+a34*b41,te[6]=a31*b12+a32*b22+a33*b32+a34*b42,te[10]=a31*b13+a32*b23+a33*b33+a34*b43,te[14]=a31*b14+a32*b24+a33*b34+a34*b44,te[3]=a41*b11+a42*b21+a43*b31+a44*b41,te[7]=a41*b12+a42*b22+a43*b32+a44*b42,te[11]=a41*b13+a42*b23+a43*b33+a44*b43,te[15]=a41*b14+a42*b24+a43*b34+a44*b44,this},multiplyScalar:function(s){var te=this.elements;return te[0]*=s,te[4]*=s,te[8]*=s,te[12]*=s,te[1]*=s,te[5]*=s,te[9]*=s,te[13]*=s,te[2]*=s,te[6]*=s,te[10]*=s,te[14]*=s,te[3]*=s,te[7]*=s,te[11]*=s,te[15]*=s,this},applyToBufferAttribute:function(){var v1=new Vector3;return function applyToBufferAttribute(attribute){for(var i=0,l=attribute.count;i<l;i++)v1.x=attribute.getX(i),v1.y=attribute.getY(i),v1.z=attribute.getZ(i),v1.applyMatrix4(this),attribute.setXYZ(i,v1.x,v1.y,v1.z);return attribute}}(),determinant:function(){var te=this.elements,n11=te[0],n12=te[4],n13=te[8],n14=te[12],n21=te[1],n22=te[5],n23=te[9],n24=te[13],n31=te[2],n32=te[6],n33=te[10],n34=te[14],n41,n42,n43,n44;return te[3]*(+n14*n23*n32-n13*n24*n32-n14*n22*n33+n12*n24*n33+n13*n22*n34-n12*n23*n34)+te[7]*(+n11*n23*n34-n11*n24*n33+n14*n21*n33-n13*n21*n34+n13*n24*n31-n14*n23*n31)+te[11]*(+n11*n24*n32-n11*n22*n34-n14*n21*n32+n12*n21*n34+n14*n22*n31-n12*n24*n31)+te[15]*(-n13*n22*n31-n11*n23*n32+n11*n22*n33+n13*n21*n32-n12*n21*n33+n12*n23*n31)},transpose:function(){var te=this.elements,tmp;return tmp=te[1],te[1]=te[4],te[4]=tmp,tmp=te[2],te[2]=te[8],te[8]=tmp,tmp=te[6],te[6]=te[9],te[9]=tmp,tmp=te[3],te[3]=te[12],te[12]=tmp,tmp=te[7],te[7]=te[13],te[13]=tmp,tmp=te[11],te[11]=te[14],te[14]=tmp,this},setPosition:function(v){var te=this.elements;return te[12]=v.x,te[13]=v.y,te[14]=v.z,this},getInverse:function(m,throwOnDegenerate){var te=this.elements,me=m.elements,n11=me[0],n21=me[1],n31=me[2],n41=me[3],n12=me[4],n22=me[5],n32=me[6],n42=me[7],n13=me[8],n23=me[9],n33=me[10],n43=me[11],n14=me[12],n24=me[13],n34=me[14],n44=me[15],t11=n23*n34*n42-n24*n33*n42+n24*n32*n43-n22*n34*n43-n23*n32*n44+n22*n33*n44,t12=n14*n33*n42-n13*n34*n42-n14*n32*n43+n12*n34*n43+n13*n32*n44-n12*n33*n44,t13=n13*n24*n42-n14*n23*n42+n14*n22*n43-n12*n24*n43-n13*n22*n44+n12*n23*n44,t14=n14*n23*n32-n13*n24*n32-n14*n22*n33+n12*n24*n33+n13*n22*n34-n12*n23*n34,det=n11*t11+n21*t12+n31*t13+n41*t14;if(0===det){var msg="THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0";if(!0===throwOnDegenerate)throw new Error(msg);return console.warn(msg),this.identity()}var detInv=1/det;return te[0]=t11*detInv,te[1]=(n24*n33*n41-n23*n34*n41-n24*n31*n43+n21*n34*n43+n23*n31*n44-n21*n33*n44)*detInv,te[2]=(n22*n34*n41-n24*n32*n41+n24*n31*n42-n21*n34*n42-n22*n31*n44+n21*n32*n44)*detInv,te[3]=(n23*n32*n41-n22*n33*n41-n23*n31*n42+n21*n33*n42+n22*n31*n43-n21*n32*n43)*detInv,te[4]=t12*detInv,te[5]=(n13*n34*n41-n14*n33*n41+n14*n31*n43-n11*n34*n43-n13*n31*n44+n11*n33*n44)*detInv,te[6]=(n14*n32*n41-n12*n34*n41-n14*n31*n42+n11*n34*n42+n12*n31*n44-n11*n32*n44)*detInv,te[7]=(n12*n33*n41-n13*n32*n41+n13*n31*n42-n11*n33*n42-n12*n31*n43+n11*n32*n43)*detInv,te[8]=t13*detInv,te[9]=(n14*n23*n41-n13*n24*n41-n14*n21*n43+n11*n24*n43+n13*n21*n44-n11*n23*n44)*detInv,te[10]=(n12*n24*n41-n14*n22*n41+n14*n21*n42-n11*n24*n42-n12*n21*n44+n11*n22*n44)*detInv,te[11]=(n13*n22*n41-n12*n23*n41-n13*n21*n42+n11*n23*n42+n12*n21*n43-n11*n22*n43)*detInv,te[12]=t14*detInv,te[13]=(n13*n24*n31-n14*n23*n31+n14*n21*n33-n11*n24*n33-n13*n21*n34+n11*n23*n34)*detInv,te[14]=(n14*n22*n31-n12*n24*n31-n14*n21*n32+n11*n24*n32+n12*n21*n34-n11*n22*n34)*detInv,te[15]=(n12*n23*n31-n13*n22*n31+n13*n21*n32-n11*n23*n32-n12*n21*n33+n11*n22*n33)*detInv,this},scale:function(v){var te=this.elements,x=v.x,y=v.y,z=v.z;return te[0]*=x,te[4]*=y,te[8]*=z,te[1]*=x,te[5]*=y,te[9]*=z,te[2]*=x,te[6]*=y,te[10]*=z,te[3]*=x,te[7]*=y,te[11]*=z,this},getMaxScaleOnAxis:function(){var te=this.elements,scaleXSq=te[0]*te[0]+te[1]*te[1]+te[2]*te[2],scaleYSq=te[4]*te[4]+te[5]*te[5]+te[6]*te[6],scaleZSq=te[8]*te[8]+te[9]*te[9]+te[10]*te[10];return Math.sqrt(Math.max(scaleXSq,scaleYSq,scaleZSq))},makeTranslation:function(x,y,z){return this.set(1,0,0,x,0,1,0,y,0,0,1,z,0,0,0,1),this},makeRotationX:function(theta){var c=Math.cos(theta),s=Math.sin(theta);return this.set(1,0,0,0,0,c,-s,0,0,s,c,0,0,0,0,1),this},makeRotationY:function(theta){var c=Math.cos(theta),s=Math.sin(theta);return this.set(c,0,s,0,0,1,0,0,-s,0,c,0,0,0,0,1),this},makeRotationZ:function(theta){var c=Math.cos(theta),s=Math.sin(theta);return this.set(c,-s,0,0,s,c,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(axis,angle){var c=Math.cos(angle),s=Math.sin(angle),t=1-c,x=axis.x,y=axis.y,z=axis.z,tx=t*x,ty=t*y;return this.set(tx*x+c,tx*y-s*z,tx*z+s*y,0,tx*y+s*z,ty*y+c,ty*z-s*x,0,tx*z-s*y,ty*z+s*x,t*z*z+c,0,0,0,0,1),this},makeScale:function(x,y,z){return this.set(x,0,0,0,0,y,0,0,0,0,z,0,0,0,0,1),this},makeShear:function(x,y,z){return this.set(1,y,z,0,x,1,z,0,x,y,1,0,0,0,0,1),this},compose:function(position,quaternion,scale){var te=this.elements,x=quaternion._x,y=quaternion._y,z=quaternion._z,w=quaternion._w,x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2,sx=scale.x,sy=scale.y,sz=scale.z;return te[0]=(1-(yy+zz))*sx,te[1]=(xy+wz)*sx,te[2]=(xz-wy)*sx,te[3]=0,te[4]=(xy-wz)*sy,te[5]=(1-(xx+zz))*sy,te[6]=(yz+wx)*sy,te[7]=0,te[8]=(xz+wy)*sz,te[9]=(yz-wx)*sz,te[10]=(1-(xx+yy))*sz,te[11]=0,te[12]=position.x,te[13]=position.y,te[14]=position.z,te[15]=1,this},decompose:(vector=new Vector3,matrix=new Matrix4,function decompose(position,quaternion,scale){var te=this.elements,sx=vector.set(te[0],te[1],te[2]).length(),sy=vector.set(te[4],te[5],te[6]).length(),sz=vector.set(te[8],te[9],te[10]).length(),det;this.determinant()<0&&(sx=-sx),position.x=te[12],position.y=te[13],position.z=te[14],matrix.copy(this);var invSX=1/sx,invSY=1/sy,invSZ=1/sz;return matrix.elements[0]*=invSX,matrix.elements[1]*=invSX,matrix.elements[2]*=invSX,matrix.elements[4]*=invSY,matrix.elements[5]*=invSY,matrix.elements[6]*=invSY,matrix.elements[8]*=invSZ,matrix.elements[9]*=invSZ,matrix.elements[10]*=invSZ,quaternion.setFromRotationMatrix(matrix),scale.x=sx,scale.y=sy,scale.z=sz,this}),makePerspective:function(left,right,top,bottom,near,far){void 0===far&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a
1new signature. Please check the docs.");var te=this.elements,x=2*near/(right-left),y=2*near/(top-bottom),a=(right+left)/(right-left),b=(top+bottom)/(top-bottom),c=-(far+near)/(far-near),d=-2*far*near/(far-near);return te[0]=x,te[4]=0,te[8]=a,te[12]=0,te[1]=0,te[5]=y,te[9]=b,te[13]=0,te[2]=0,te[6]=0,te[10]=c,te[14]=d,te[3]=0,te[7]=0,te[11]=-1,te[15]=0,this},makeOrthographic:function(left,right,top,bottom,near,far){var te=this.elements,w=1/(right-left),h=1/(top-bottom),p=1/(far-near),x=(right+left)*w,y=(top+bottom)*h,z=(far+near)*p;return te[0]=2*w,te[4]=0,te[8]=0,te[12]=-x,te[1]=0,te[5]=2*h,te[9]=0,te[13]=-y,te[2]=0,te[6]=0,te[10]=-2*p,te[14]=-z,te[3]=0,te[7]=0,te[11]=0,te[15]=1,this},equals:function(matrix){for(var te=this.elements,me=matrix.elements,i=0;i<16;i++)if(te[i]!==me[i])return!1;return!0},fromArray:function(array,offset){void 0===offset&&(offset=0);for(var i=0;i<16;i++)this.elements[i]=array[i+offset];return this},toArray:function(array,offset){void 0===array&&(array=[]),void 0===offset&&(offset=0);var te=this.elements;return array[offset]=te[0],array[offset+1]=te[1],array[offset+2]=te[2],array[offset+3]=te[3],array[offset+4]=te[4],array[offset+5]=te[5],array[offset+6]=te[6],array[offset+7]=te[7],array[offset+8]=te[8],array[offset+9]=te[9],array[offset+10]=te[10],array[offset+11]=te[11],array[offset+12]=te[12],array[offset+13]=te[13],array[offset+14]=te[14],array[offset+15]=te[15],array}}),Object.assign(Quaternion,{slerp:function(qa,qb,qm,t){return qm.copy(qa).slerp(qb,t)},slerpFlat:function(dst,dstOffset,src0,srcOffset0,src1,srcOffset1,t){var x0=src0[srcOffset0+0],y0=src0[srcOffset0+1],z0=src0[srcOffset0+2],w0=src0[srcOffset0+3],x1=src1[srcOffset1+0],y1=src1[srcOffset1+1],z1=src1[srcOffset1+2],w1=src1[srcOffset1+3];if(w0!==w1||x0!==x1||y0!==y1||z0!==z1){var s=1-t,cos=x0*x1+y0*y1+z0*z1+w0*w1,dir=cos>=0?1:-1,sqrSin=1-cos*cos;if(sqrSin>Number.EPSILON){var sin=Math.sqrt(sqrSin),len=Math.atan2(sin,cos*dir);s=Math.sin(s*len)/sin,t=Math.sin(t*len)/sin}var tDir=t*dir;if(x0=x0*s+x1*tDir,y0=y0*s+y1*tDir,z0=z0*s+z1*tDir,w0=w0*s+w1*tDir,s===1-t){var f=1/Math.sqrt(x0*x0+y0*y0+z0*z0+w0*w0);x0*=f,y0*=f,z0*=f,w0*=f}}dst[dstOffset]=x0,dst[dstOffset+1]=y0,dst[dstOffset+2]=z0,dst[dstOffset+3]=w0}}),Object.defineProperties(Quaternion.prototype,{x:{get:function(){return this._x},set:function(value){this._x=value,this.onChangeCallback()}},y:{get:function(){return this._y},set:function(value){this._y=value,this.onChangeCallback()}},z:{get:function(){return this._z},set:function(value){this._z=value,this.onChangeCallback()}},w:{get:function(){return this._w},set:function(value){this._w=value,this.onChangeCallback()}}}),Object.assign(Quaternion.prototype,{isQuaternion:!0,set:function(x,y,z,w){return this._x=x,this._y=y,this._z=z,this._w=w,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(quaternion){return this._x=quaternion.x,this._y=quaternion.y,this._z=quaternion.z,this._w=quaternion.w,this.onChangeCallback(),this},setFromEuler:function(euler,update){if(!euler||!euler.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var x=euler._x,y=euler._y,z=euler._z,order=euler.order,cos=Math.cos,sin=Math.sin,c1=cos(x/2),c2=cos(y/2),c3=cos(z/2),s1=sin(x/2),s2=sin(y/2),s3=sin(z/2);return"XYZ"===order?(this._x=s1*c2*c3+c1*s2*s3,this._y=c1*s2*c3-s1*c2*s3,this._z=c1*c2*s3+s1*s2*c3,this._w=c1*c2*c3-s1*s2*s3):"YXZ"===order?(this._x=s1*c2*c3+c1*s2*s3,this._y=c1*s2*c3-s1*c2*s3,this._z=c1*c2*s3-s1*s2*c3,this._w=c1*c2*c3+s1*s2*s3):"ZXY"===order?(this._x=s1*c2*c3-c1*s2*s3,this._y=c1*s2*c3+s1*c2*s3,this._z=c1*c2*s3+s1*s2*c3,this._w=c1*c2*c3-s1*s2*s3):"ZYX"===order?(this._x=s1*c2*c3-c1*s2*s3,this._y=c1*s2*c3+s1*c2*s3,this._z=c1*c2*s3-s1*s2*c3,this._w=c1*c2*c3+s1*s2*s3):"YZX"===order?(this._x=s1*c2*c3+c1*s2*s3,this._y=c1*s2*c3+s1*c2*s3,this._z=c1*c2*s3-s1*s2*c3,this._w=c1*c2*c3-s1*s2*s3):"XZY"===order&&(this._x=s1*c2*c3-c1*s2*s3,this._y=c1*s2*c3-s1*c2*s3,this._z=c1*c2*s3+s1*s2*c3,this._w=c1*c2*c3+s1*s2*s3),!1!==update&&this.onChangeCallback(),this},setFromAxisAngle:function(axis,angle){var halfAngle=angle/2,s=Math.sin(halfAngle);return this._x=axis.x*s,this._y=axis.y*s,this._z=axis.z*s,this._w=Math.cos(halfAngle),this.onChangeCallback(),this},setFromRotationMatrix:function(m){var te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10],trace=m11+m22+m33,s;return trace>0?(s=.5/Math.sqrt(trace+1),this._w=.25/s,this._x=(m32-m23)*s,this._y=(m13-m31)*s,this._z=(m21-m12)*s):m11>m22&&m11>m33?(s=2*Math.sqrt(1+m11-m22-m33),this._w=(m32-m23)/s,this._x=.25*s,this._y=(m12+m21)/s,this._z=(m13+m31)/s):m22>m33?(s=2*Math.sqrt(1+m22-m11-m33),this._w=(m13-m31)/s,this._x=(m12+m21)/s,this._y=.25*s,this._z=(m23+m32)/s):(s=2*Math.sqrt(1+m33-m11-m22),this._w=(m21-m12)/s,this._x=(m13+m31)/s,this._y=(m23+m32)/s,this._z=.25*s),this.onChangeCallback(),this},setFromUnitVectors:function(){var v1=new Vector3,r,EPS=1e-6;return function setFromUnitVectors(vFrom,vTo){return void 0===v1&&(v1=new Vector3),(r=vFrom.dot(vTo)+1)<EPS?(r=0,Math.abs(vFrom.x)>Math.abs(vFrom.z)?v1.set(-vFrom.y,vFrom.x,0):v1.set(0,-vFrom.z,vFrom.y)):v1.crossVectors(vFrom,vTo),this._x=v1.x,this._y=v1.y,this._z=v1.z,this._w=r,this.normalize()}}(),angleTo:function(q){return 2*Math.acos(Math.abs(_Math.clamp(this.dot(q),-1,1)))},rotateTowards:function(q,step){var angle=this.angleTo(q);
vendor: 5,799 bytes, line 1
1if(0===angle)return this;var t=Math.min(1,step/angle);return this.slerp(q,t),this},inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(v){return this._x*v._x+this._y*v._y+this._z*v._z+this._w*v._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var l=this.length();return 0===l?(this._x=0,this._y=0,this._z=0,this._w=1):(l=1/l,this._x=this._x*l,this._y=this._y*l,this._z=this._z*l,this._w=this._w*l),this.onChangeCallback(),this},multiply:function(q,p){return void 0!==p?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(q,p)):this.multiplyQuaternions(this,q)},premultiply:function(q){return this.multiplyQuaternions(q,this)},multiplyQuaternions:function(a,b){var qax=a._x,qay=a._y,qaz=a._z,qaw=a._w,qbx=b._x,qby=b._y,qbz=b._z,qbw=b._w;return this._x=qax*qbw+qaw*qbx+qay*qbz-qaz*qby,this._y=qay*qbw+qaw*qby+qaz*qbx-qax*qbz,this._z=qaz*qbw+qaw*qbz+qax*qby-qay*qbx,this._w=qaw*qbw-qax*qbx-qay*qby-qaz*qbz,this.onChangeCallback(),this},slerp:function(qb,t){if(0===t)return this;if(1===t)return this.copy(qb);var x=this._x,y=this._y,z=this._z,w=this._w,cosHalfTheta=w*qb._w+x*qb._x+y*qb._y+z*qb._z;if(cosHalfTheta<0?(this._w=-qb._w,this._x=-qb._x,this._y=-qb._y,this._z=-qb._z,cosHalfTheta=-cosHalfTheta):this.copy(qb),cosHalfTheta>=1)return this._w=w,this._x=x,this._y=y,this._z=z,this;var sqrSinHalfTheta=1-cosHalfTheta*cosHalfTheta;if(sqrSinHalfTheta<=Number.EPSILON){var s=1-t;return this._w=s*w+t*this._w,this._x=s*x+t*this._x,this._y=s*y+t*this._y,this._z=s*z+t*this._z,this.normalize()}var sinHalfTheta=Math.sqrt(sqrSinHalfTheta),halfTheta=Math.atan2(sinHalfTheta,cosHalfTheta),ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;return this._w=w*ratioA+this._w*ratioB,this._x=x*ratioA+this._x*ratioB,this._y=y*ratioA+this._y*ratioB,this._z=z*ratioA+this._z*ratioB,this.onChangeCallback(),this},equals:function(quaternion){return quaternion._x===this._x&&quaternion._y===this._y&&quaternion._z===this._z&&quaternion._w===this._w},fromArray:function(array,offset){return void 0===offset&&(offset=0),this._x=array[offset],this._y=array[offset+1],this._z=array[offset+2],this._w=array[offset+3],this.onChangeCallback(),this},toArray:function(array,offset){return void 0===array&&(array=[]),void 0===offset&&(offset=0),array[offset]=this._x,array[offset+1]=this._y,array[offset+2]=this._z,array[offset+3]=this._w,array},onChange:function(callback){return this.onChangeCallback=callback,this},onChangeCallback:function(){}}),Object.assign(Vector3.prototype,{isVector3:!0,set:function(x,y,z){return this.x=x,this.y=y,this.z=z,this},setScalar:function(scalar){return this.x=scalar,this.y=scalar,this.z=scalar,this},setX:function(x){return this.x=x,this},setY:function(y){return this.y=y,this},setZ:function(z){return this.z=z,this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(v){return this.x=v.x,this.y=v.y,this.z=v.z,this},add:function(v,w){return void 0!==w?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(v,w)):(this.x+=v.x,this.y+=v.y,this.z+=v.z,this)},addScalar:function(s){return this.x+=s,this.y+=s,this.z+=s,this},addVectors:function(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z,this},addScaledVector:function(v,s){return this.x+=v.x*s,this.y+=v.y*s,this.z+=v.z*s,this},sub:function(v,w){return void 0!==w?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(v,w)):(this.x-=v.x,this.y-=v.y,this.z-=v.z,this)},subScalar:function(s){return this.x-=s,this.y-=s,this.z-=s,this},subVectors:function(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z,this},multiply:function(v,w){return void 0!==w?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(v,w)):(this.x*=v.x,this.y*=v.y,this.z*=v.z,this)},multiplyScalar:function(scalar){return this.x*=scalar,this.y*=scalar,this.z*=scalar,this},multiplyVectors:function(a,b){return this.x=a.x*b.x,this.y=a.y*b.y,this.z=a.z*b.z,this},applyEuler:(quaternion=new Quaternion,function applyEuler(euler){return euler&&euler.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(quaternion.setFromEuler(euler))}),applyAxisAngle:function(){var quaternion=new Quaternion;return function applyAxisAngle(axis,angle){return this.applyQuaternion(quaternion.setFromAxisAngle(axis,angle))}}(),applyMatrix3:function(m){var x=this.x,y=this.y,z=this.z,e=m.elements;return this.x=e[0]*x+e[3]*y+e[6]*z,this.y=e[1]*x+e[4]*y+e[7]*z,this.z=e[2]*x+e[5]*y+e[8]*z,this},applyMatrix4:function(m){var x=this.x,y=this.y,z=this.z,e=m.elements,w=1/(e[3]*x+e[7]*y+e[11]*z+e[15]);return this.x=(e[0]*x+e[4]*y+e[8]*z+e[12])*w,this.y=(e[1]*x+e[5]*y+e[9]*z+e[13])*w,this.z=(e[2]*x+e[6]*y+e[10]*z+e[14])*w,this},applyQuaternion:function(q){var x=this.x,y=this.y,z=this.z,qx=q.x,qy=q.y,qz=q.z,qw=q.w,ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;
vendor: 7,445 bytes, line 1
1return this.x=ix*qw+iw*-qx+iy*-qz-iz*-qy,this.y=iy*qw+iw*-qy+iz*-qx-ix*-qz,this.z=iz*qw+iw*-qz+ix*-qy-iy*-qx,this},project:function(camera){return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix)},unproject:function(){var matrix=new Matrix4;return function unproject(camera){return this.applyMatrix4(matrix.getInverse(camera.projectionMatrix)).applyMatrix4(camera.matrixWorld)}}(),transformDirection:function(m){var x=this.x,y=this.y,z=this.z,e=m.elements;return this.x=e[0]*x+e[4]*y+e[8]*z,this.y=e[1]*x+e[5]*y+e[9]*z,this.z=e[2]*x+e[6]*y+e[10]*z,this.normalize()},divide:function(v){return this.x/=v.x,this.y/=v.y,this.z/=v.z,this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},min:function(v){return this.x=Math.min(this.x,v.x),this.y=Math.min(this.y,v.y),this.z=Math.min(this.z,v.z),this},max:function(v){return this.x=Math.max(this.x,v.x),this.y=Math.max(this.y,v.y),this.z=Math.max(this.z,v.z),this},clamp:function(min,max){return this.x=Math.max(min.x,Math.min(max.x,this.x)),this.y=Math.max(min.y,Math.min(max.y,this.y)),this.z=Math.max(min.z,Math.min(max.z,this.z)),this},clampScalar:function(){var min=new Vector3,max=new Vector3;return function clampScalar(minVal,maxVal){return min.set(minVal,minVal,minVal),max.set(maxVal,maxVal,maxVal),this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){return this.x+=(v.x-this.x)*alpha,this.y+=(v.y-this.y)*alpha,this.z+=(v.z-this.z)*alpha,this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},cross:function(v,w){return void 0!==w?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(v,w)):this.crossVectors(this,v)},crossVectors:function(a,b){var ax=a.x,ay=a.y,az=a.z,bx=b.x,by=b.y,bz=b.z;return this.x=ay*bz-az*by,this.y=az*bx-ax*bz,this.z=ax*by-ay*bx,this},projectOnVector:function(vector){var scalar=vector.dot(this)/vector.lengthSq();return this.copy(vector).multiplyScalar(scalar)},projectOnPlane:function(){var v1=new Vector3;return function projectOnPlane(planeNormal){return v1.copy(this).projectOnVector(planeNormal),this.sub(v1)}}(),reflect:function(){var v1=new Vector3;return function reflect(normal){return this.sub(v1.copy(normal).multiplyScalar(2*this.dot(normal)))}}(),angleTo:function(v){var theta=this.dot(v)/Math.sqrt(this.lengthSq()*v.lengthSq());return Math.acos(_Math.clamp(theta,-1,1))},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y,dz=this.z-v.z;return dx*dx+dy*dy+dz*dz},manhattanDistanceTo:function(v){return Math.abs(this.x-v.x)+Math.abs(this.y-v.y)+Math.abs(this.z-v.z)},setFromSpherical:function(s){return this.setFromSphericalCoords(s.radius,s.phi,s.theta)},setFromSphericalCoords:function(radius,phi,theta){var sinPhiRadius=Math.sin(phi)*radius;return this.x=sinPhiRadius*Math.sin(theta),this.y=Math.cos(phi)*radius,this.z=sinPhiRadius*Math.cos(theta),this},setFromCylindrical:function(c){return this.setFromCylindricalCoords(c.radius,c.theta,c.y)},setFromCylindricalCoords:function(radius,theta,y){return this.x=radius*Math.sin(theta),this.y=y,this.z=radius*Math.cos(theta),this},setFromMatrixPosition:function(m){var e=m.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},setFromMatrixScale:function(m){var sx=this.setFromMatrixColumn(m,0).length(),sy=this.setFromMatrixColumn(m,1).length(),sz=this.setFromMatrixColumn(m,2).length();return this.x=sx,this.y=sy,this.z=sz,this},setFromMatrixColumn:function(m,index){return this.fromArray(m.elements,4*index)},equals:function(v){return v.x===this.x&&v.y===this.y&&v.z===this.z},fromArray:function(array,offset){return void 0===offset&&(offset=0),this.x=array[offset],this.y=array[offset+1],this.z=array[offset+2],this},toArray:function(array,offset){return void 0===array&&(array=[]),void 0===offset&&(offset=0),array[offset]=this.x,array[offset+1]=this.y,array[offset+2]=this.z,array},fromBufferAttribute:function(attribute,index,offset){return void 0!==offset&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=attribute.getX(index),this.y=attribute.getY(index),this.z=attribute.getZ(index),this}}),Object.assign(Matrix3.prototype,{isMatrix3:!0,set:function(n11,n12,n13,n21,n22,n23,n31,n32,n33){var te=this.elements;return te[0]=n11,te[1]=n21,te[2]=n31,te[3]=n12,te[4]=n22,te[5]=n32,te[6]=n13,te[7]=n23,te[8]=n33,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(m){var te=this.elements,me=m.elements;return te[0]=me[0],te[1]=me[1],te[2]=me[2],te[3]=me[3],te[4]=me[4],te[5]=me[5],te[6]=me[6],te[7]=me[7],te[8]=me[8],this},setFromMatrix4:function(m){var me=m.elements;return this.set(me[0],me[4],me[8],me[1],me[5],me[9],me[2],me[6],me[10]),this},applyToBufferAttribute:function(){var v1=new Vector3;return function applyToBufferAttribute(attribute){for(var i=0,l=attribute.count;i<l;i++)v1.x=attribute.getX(i),v1.y=attribute.getY(i),v1.z=attribute.getZ(i),v1.applyMatrix3(this),attribute.setXYZ(i,v1.x,v1.y,v1.z);return attribute}}(),multiply:function(m){return this.multiplyMatrices(this,m)},premultiply:function(m){return this.multiplyMatrices(m,this)},multiplyMatrices:function(a,b){var ae=a.elements,be=b.elements,te=this.elements,a11=ae[0],a12=ae[3],a13=ae[6],a21=ae[1],a22=ae[4],a23=ae[7],a31=ae[2],a32=ae[5],a33=ae[8],b11=be[0],b12=be[3],b13=be[6],b21=be[1],b22=be[4],b23=be[7],b31=be[2],b32=be[5],b33=be[8];return te[0]=a11*b11+a12*b21+a13*b31,te[3]=a11*b12+a12*b22+a13*b32,te[6]=a11*b13+a12*b23+a13*b33,te[1]=a21*b11+a22*b21+a23*b31,te[4]=a21*b12+a22*b22+a23*b32,te[7]=a21*b13+a22*b23+a23*b33,te[2]=a31*b11+a32*b21+a33*b31,te[5]=a31*b12+a32*b22+a33*b32,te[8]=a31*b13+a32*b23+a33*b33,this},multiplyScalar:function(s){var te=this.elements;return te[0]*=s,te[3]*=s,te[6]*=s,te[1]*=s,te[4]*=s,te[7]*=s,te[2]*=s,te[5]*=s,te[8]*=s,this},determinant:function(){var te=this.elements,a=te[0],b=te[1],c=te[2],d=te[3],e=te[4],f=te[5],g=te[6],h=te[7],i=te[8];return a*e*i-a*f*h-b*d*i+b*f*g+c*d*h-c*e*g},getInverse:function(matrix,throwOnDegenerate){matrix&&matrix.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matr
1ix4 argument.");var me=matrix.elements,te=this.elements,n11=me[0],n21=me[1],n31=me[2],n12=me[3],n22=me[4],n32=me[5],n13=me[6],n23=me[7],n33=me[8],t11=n33*n22-n32*n23,t12=n32*n13-n33*n12,t13=n23*n12-n22*n13,det=n11*t11+n21*t12+n31*t13;if(0===det){var msg="THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0";if(!0===throwOnDegenerate)throw new Error(msg);return console.warn(msg),this.identity()}var detInv=1/det;return te[0]=t11*detInv,te[1]=(n31*n23-n33*n21)*detInv,te[2]=(n32*n21-n31*n22)*detInv,te[3]=t12*detInv,te[4]=(n33*n11-n31*n13)*detInv,te[5]=(n31*n12-n32*n11)*detInv,te[6]=t13*detInv,te[7]=(n21*n13-n23*n11)*detInv,te[8]=(n22*n11-n21*n12)*detInv,this},transpose:function(){var tmp,m=this.elements;return tmp=m[1],m[1]=m[3],m[3]=tmp,tmp=m[2],m[2]=m[6],m[6]=tmp,tmp=m[5],m[5]=m[7],m[7]=tmp,this},getNormalMatrix:function(matrix4){return this.setFromMatrix4(matrix4).getInverse(this).transpose()},transposeIntoArray:function(r){var m=this.elements;return r[0]=m[0],r[1]=m[3],r[2]=m[6],r[3]=m[1],r[4]=m[4],r[5]=m[7],r[6]=m[2],r[7]=m[5],r[8]=m[8],this},setUvTransform:function(tx,ty,sx,sy,rotation,cx,cy){var c=Math.cos(rotation),s=Math.sin(rotation);this.set(sx*c,sx*s,-sx*(c*cx+s*cy)+cx+tx,-sy*s,sy*c,-sy*(-s*cx+c*cy)+cy+ty,0,0,1)},scale:function(sx,sy){var te=this.elements;return te[0]*=sx,te[3]*=sx,te[6]*=sx,te[1]*=sy,te[4]*=sy,te[7]*=sy,this},rotate:function(theta){var c=Math.cos(theta),s=Math.sin(theta),te=this.elements,a11=te[0],a12=te[3],a13=te[6],a21=te[1],a22=te[4],a23=te[7];return te[0]=c*a11+s*a21,te[3]=c*a12+s*a22,te[6]=c*a13+s*a23,te[1]=-s*a11+c*a21,te[4]=-s*a12+c*a22,te[7]=-s*a13+c*a23,this},translate:function(tx,ty){var te=this.elements;return te[0]+=tx*te[2],te[3]+=tx*te[5],te[6]+=tx*te[8],te[1]+=ty*te[2],te[4]+=ty*te[5],te[7]+=ty*te[8],this},equals:function(matrix){for(var te=this.elements,me=matrix.elements,i=0;i<9;i++)if(te[i]!==me[i])return!1;return!0},fromArray:function(array,offset){void 0===offset&&(offset=0);for(var i=0;i<9;i++)this.elements[i]=array[i+offset];return this},toArray:function(array,offset){void 0===array&&(array=[]),void 0===offset&&(offset=0);var te=this.elements;return array[offset]=te[0],array[offset+1]=te[1],array[offset+2]=te[2],array[offset+3]=te[3],array[offset+4]=te[4],array[offset+5]=te[5],array[offset+6]=te[6],array[offset+7]=te[7],array[offset+8]=te[8],array}});var ImageUtils={getDataURL:function(image){var canvas;if("undefined"==typeof HTMLCanvasElement)return image.src;if(image instanceof HTMLCanvasElement)canvas=image;else{void 0===_canvas&&(_canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),_canvas.width=image.width,_canvas.height=image.height;var context=_canvas.getContext("2d");image instanceof ImageData?context.putImageData(image,0,0):context.drawImage(image,0,0,image.width,image.height),canvas=_canvas}return canvas.width>2048||canvas.height>2048?canvas.toDataURL("image/jpeg",.6):canvas.toDataURL("image/png")}},textureId=0,points,closestPoint,box,p,sphere;function Texture(image,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding){Object.defineProperty(this,"id",{value:textureId++}),this.uuid=_Math.generateUUID(),this.name="",this.image=void 0!==image?image:Texture.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==mapping?mapping:Texture.DEFAULT_MAPPING,this.wrapS=void 0!==wrapS?wrapS:1001,this.wrapT=void 0!==wrapT?wrapT:1001,this.magFilter=void 0!==magFilter?magFilter:1006,this.minFilter=void 0!==minFilter?minFilter:1008,this.anisotropy=void 0!==anisotropy?anisotropy:1,this.format=void 0!==format?format:1023,this.type=void 0!==type?type:1009,this.offset=new Vector2(0,0),this.repeat=new Vector2(1,1),this.center=new Vector2(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Matrix3,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==encoding?encoding:3e3,this.version=0,this.onUpdate=null}function Vector4(x,y,z,w){this.x=x||0,this.y=y||0,this.z=z||0,this.w=void 0!==w?w:1}function WebGLRenderTarget(width,height,options){this.width=width,this.height=height,this.scissor=new Vector4(0,0,width,height),this.scissorTest=!1,this.viewport=new Vector4(0,0,width,height),options=options||{},this.texture=new Texture(void 0,void 0,options.wrapS,options.wrapT,options.magFilter,options.minFilter,options.format,options.type,options.anisotropy,options.encoding),this.texture.generateMipmaps=void 0!==options.generateMipmaps&&options.generateMipmaps,this.texture.minFilter=void 0!==options.minFilter?options.minFilter:1006,this.depthBuffer=void 0===options.depthBuffer||options.depthBuffer,this.stencilBuffer=void 0===options.stencilBuffer||options.stencilBuffer,this.depthTexture=void 0!==options.depthTexture?options.depthTexture:null}function WebGLRenderTargetCube(width,height,options){WebGLRenderTarget.call(this,width,height,options),this.activeCubeFace=0,this.activeMipMapLevel=0}function DataTexture(data,width,height,format,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,encoding){Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding),this.image={data:data,width:width,height:height},this.magFilter=void 0!==magFilter?magFilter:1003,this.minFilter=void 0!==minFilter?minFilter:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}function Box3(min,max){this.min=void 0!==min?min:new Vector3(1/0,1/0,1/0),this.max=void 0!==max?max:new Vector3(-1/0,-1/0,-1/0)}
vendor: 6,448 bytes, line 1
1function Sphere(center,radius){this.center=void 0!==center?center:new Vector3,this.radius=void 0!==radius?radius:0}function Plane(normal,constant){this.normal=void 0!==normal?normal:new Vector3(1,0,0),this.constant=void 0!==constant?constant:0}function Frustum(p0,p1,p2,p3,p4,p5){this.planes=[void 0!==p0?p0:new Plane,void 0!==p1?p1:new Plane,void 0!==p2?p2:new Plane,void 0!==p3?p3:new Plane,void 0!==p4?p4:new Plane,void 0!==p5?p5:new Plane]}Texture.DEFAULT_IMAGE=void 0,Texture.DEFAULT_MAPPING=300,Texture.prototype=Object.assign(Object.create(EventDispatcher.prototype),{constructor:Texture,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(source){return this.name=source.name,this.image=source.image,this.mipmaps=source.mipmaps.slice(0),this.mapping=source.mapping,this.wrapS=source.wrapS,this.wrapT=source.wrapT,this.magFilter=source.magFilter,this.minFilter=source.minFilter,this.anisotropy=source.anisotropy,this.format=source.format,this.type=source.type,this.offset.copy(source.offset),this.repeat.copy(source.repeat),this.center.copy(source.center),this.rotation=source.rotation,this.matrixAutoUpdate=source.matrixAutoUpdate,this.matrix.copy(source.matrix),this.generateMipmaps=source.generateMipmaps,this.premultiplyAlpha=source.premultiplyAlpha,this.flipY=source.flipY,this.unpackAlignment=source.unpackAlignment,this.encoding=source.encoding,this},toJSON:function(meta){var isRootObject=void 0===meta||"string"==typeof meta;if(!isRootObject&&void 0!==meta.textures[this.uuid])return meta.textures[this.uuid];var output={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){var image=this.image;if(void 0===image.uuid&&(image.uuid=_Math.generateUUID()),!isRootObject&&void 0===meta.images[image.uuid]){var url;if(Array.isArray(image)){url=[];for(var i=0,l=image.length;i<l;i++)url.push(ImageUtils.getDataURL(image[i]))}else url=ImageUtils.getDataURL(image);meta.images[image.uuid]={uuid:image.uuid,url:url}}output.image=image.uuid}return isRootObject||(meta.textures[this.uuid]=output),output},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(uv){if(300!==this.mapping)return uv;if(uv.applyMatrix3(this.matrix),uv.x<0||uv.x>1)switch(this.wrapS){case 1e3:uv.x=uv.x-Math.floor(uv.x);break;case 1001:uv.x=uv.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(uv.x)%2)?uv.x=Math.ceil(uv.x)-uv.x:uv.x=uv.x-Math.floor(uv.x)}if(uv.y<0||uv.y>1)switch(this.wrapT){case 1e3:uv.y=uv.y-Math.floor(uv.y);break;case 1001:uv.y=uv.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(uv.y)%2)?uv.y=Math.ceil(uv.y)-uv.y:uv.y=uv.y-Math.floor(uv.y)}return this.flipY&&(uv.y=1-uv.y),uv}}),Object.defineProperty(Texture.prototype,"needsUpdate",{set:function(value){!0===value&&this.version++}}),Object.assign(Vector4.prototype,{isVector4:!0,set:function(x,y,z,w){return this.x=x,this.y=y,this.z=z,this.w=w,this},setScalar:function(scalar){return this.x=scalar,this.y=scalar,this.z=scalar,this.w=scalar,this},setX:function(x){return this.x=x,this},setY:function(y){return this.y=y,this},setZ:function(z){return this.z=z,this},setW:function(w){return this.w=w,this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;case 3:this.w=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(v){return this.x=v.x,this.y=v.y,this.z=v.z,this.w=void 0!==v.w?v.w:1,this},add:function(v,w){return void 0!==w?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(v,w)):(this.x+=v.x,this.y+=v.y,this.z+=v.z,this.w+=v.w,this)},addScalar:function(s){return this.x+=s,this.y+=s,this.z+=s,this.w+=s,this},addVectors:function(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z,this.w=a.w+b.w,this},addScaledVector:function(v,s){return this.x+=v.x*s,this.y+=v.y*s,this.z+=v.z*s,this.w+=v.w*s,this},sub:function(v,w){return void 0!==w?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(v,w)):(this.x-=v.x,this.y-=v.y,this.z-=v.z,this.w-=v.w,this)},subScalar:function(s){return this.x-=s,this.y-=s,this.z-=s,this.w-=s,this},subVectors:function(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z,this.w=a.w-b.w,this},multiplyScalar:function(scalar){return this.x*=scalar,this.y*=scalar,this.z*=scalar,this.w*=scalar,this},applyMatrix4:function(m){var x=this.x,y=this.y,z=this.z,w=this.w,e=m.elements;return this.x=e[0]*x+e[4]*y+e[8]*z+e[12]*w,this.y=e[1]*x+e[5]*y+e[9]*z+e[13]*w,this.z=e[2]*x+e[6]*y+e[10]*z+e[14]*w,this.w=e[3]*x+e[7]*y+e[11]*z+e[15]*w,this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},setAxisAngleFromQuaternion:function(q){this.w=2*Math.acos(q.w);var s=Math.sqrt(1-q.w*q.w);return s<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=q.x/s,this.y=q.y/s,this.z=q.z/s),this},setAxisAngleFromRotationMatrix:function(m){var angle,x,y,z,epsilon=.01,epsilon2=.1,te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10];if(Math.abs(m12-m21)<.01&&Math.abs(m13-m31)<.01&&Math.abs(m23-m32)<.01){if(Math.abs(m12+m21)<.1&&Math.abs(m13+m31)<.1&&Math.abs(m23+m32)<.1&&Math.abs(m11+m22+m33-3)<.1)return this.set(1,0,0,0),this;angle=Math.PI;var xx=(m11+1)/2,yy=(m22+1)/2,zz=(m33+1)/2,xy=(m12+m21)/4,xz=(m13+m31)/4,yz=(m23+m32)/4;return xx>yy&&xx>zz?xx<.01?(x=0,y=.707106781,z=.707106781):(y=xy/(x=Math.sqrt(xx)),z=xz/x):yy>zz?yy<.01?(x=.707106781,y=0,z=.707106781):(x=xy/(y=Math.sqrt(yy)),z=yz/y):zz<.01?(
vendor: 18,408 bytes, line 1
1x=.707106781,y=.707106781,z=0):(x=xz/(z=Math.sqrt(zz)),y=yz/z),this.set(x,y,z,angle),this}var s=Math.sqrt((m32-m23)*(m32-m23)+(m13-m31)*(m13-m31)+(m21-m12)*(m21-m12));return Math.abs(s)<.001&&(s=1),this.x=(m32-m23)/s,this.y=(m13-m31)/s,this.z=(m21-m12)/s,this.w=Math.acos((m11+m22+m33-1)/2),this},min:function(v){return this.x=Math.min(this.x,v.x),this.y=Math.min(this.y,v.y),this.z=Math.min(this.z,v.z),this.w=Math.min(this.w,v.w),this},max:function(v){return this.x=Math.max(this.x,v.x),this.y=Math.max(this.y,v.y),this.z=Math.max(this.z,v.z),this.w=Math.max(this.w,v.w),this},clamp:function(min,max){return this.x=Math.max(min.x,Math.min(max.x,this.x)),this.y=Math.max(min.y,Math.min(max.y,this.y)),this.z=Math.max(min.z,Math.min(max.z,this.z)),this.w=Math.max(min.w,Math.min(max.w,this.w)),this},clampScalar:function(){var min,max;return function clampScalar(minVal,maxVal){return void 0===min&&(min=new Vector4,max=new Vector4),min.set(minVal,minVal,minVal,minVal),max.set(maxVal,maxVal,maxVal,maxVal),this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.z+this.w*v.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){return this.x+=(v.x-this.x)*alpha,this.y+=(v.y-this.y)*alpha,this.z+=(v.z-this.z)*alpha,this.w+=(v.w-this.w)*alpha,this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},equals:function(v){return v.x===this.x&&v.y===this.y&&v.z===this.z&&v.w===this.w},fromArray:function(array,offset){return void 0===offset&&(offset=0),this.x=array[offset],this.y=array[offset+1],this.z=array[offset+2],this.w=array[offset+3],this},toArray:function(array,offset){return void 0===array&&(array=[]),void 0===offset&&(offset=0),array[offset]=this.x,array[offset+1]=this.y,array[offset+2]=this.z,array[offset+3]=this.w,array},fromBufferAttribute:function(attribute,index,offset){return void 0!==offset&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=attribute.getX(index),this.y=attribute.getY(index),this.z=attribute.getZ(index),this.w=attribute.getW(index),this}}),WebGLRenderTarget.prototype=Object.assign(Object.create(EventDispatcher.prototype),{constructor:WebGLRenderTarget,isWebGLRenderTarget:!0,setSize:function(width,height){this.width===width&&this.height===height||(this.width=width,this.height=height,this.dispose()),this.viewport.set(0,0,width,height),this.scissor.set(0,0,width,height)},clone:function(){return(new this.constructor).copy(this)},copy:function(source){return this.width=source.width,this.height=source.height,this.viewport.copy(source.viewport),this.texture=source.texture.clone(),this.depthBuffer=source.depthBuffer,this.stencilBuffer=source.stencilBuffer,this.depthTexture=source.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),WebGLRenderTargetCube.prototype=Object.create(WebGLRenderTarget.prototype),WebGLRenderTargetCube.prototype.constructor=WebGLRenderTargetCube,WebGLRenderTargetCube.prototype.isWebGLRenderTargetCube=!0,DataTexture.prototype=Object.create(Texture.prototype),DataTexture.prototype.constructor=DataTexture,DataTexture.prototype.isDataTexture=!0,Object.assign(Box3.prototype,{isBox3:!0,set:function(min,max){return this.min.copy(min),this.max.copy(max),this},setFromArray:function(array){for(var minX=1/0,minY=1/0,minZ=1/0,maxX=-1/0,maxY=-1/0,maxZ=-1/0,i=0,l=array.length;i<l;i+=3){var x=array[i],y=array[i+1],z=array[i+2];x<minX&&(minX=x),y<minY&&(minY=y),z<minZ&&(minZ=z),x>maxX&&(maxX=x),y>maxY&&(maxY=y),z>maxZ&&(maxZ=z)}return this.min.set(minX,minY,minZ),this.max.set(maxX,maxY,maxZ),this},setFromBufferAttribute:function(attribute){for(var minX=1/0,minY=1/0,minZ=1/0,maxX=-1/0,maxY=-1/0,maxZ=-1/0,i=0,l=attribute.count;i<l;i++){var x=attribute.getX(i),y=attribute.getY(i),z=attribute.getZ(i);x<minX&&(minX=x),y<minY&&(minY=y),z<minZ&&(minZ=z),x>maxX&&(maxX=x),y>maxY&&(maxY=y),z>maxZ&&(maxZ=z)}return this.min.set(minX,minY,minZ),this.max.set(maxX,maxY,maxZ),this},setFromPoints:function(points){this.makeEmpty();for(var i=0,il=points.length;i<il;i++)this.expandByPoint(points[i]);return this},setFromCenterAndSize:function(){var v1=new Vector3;return function setFromCenterAndSize(center,size){var halfSize=v1.copy(size).multiplyScalar(.5);return this.min.copy(center).sub(halfSize),this.max.copy(center).add(halfSize),this}}(),setFromObject:function(object){return this.makeEmpty(),this.expandByObject(object)},clone:function(){return(new this.constructor).copy(this)},copy:function(box){return this.min.copy(box.min),this.max.copy(box.max),this},makeEmpty:function(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(target){return void 0===target&&(console.warn("THREE.Box3: .getCenter() target is now required"),target=new Vector3),this.isEmpty()?target.set(0,0,0):target.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(target){return void 0===target&&(console.warn("THREE.Box3: .getSize() target is now required"),target=new Vector3),this.isEmpty()?target.set(0,0,0):target.subVectors(this.max,this.min)},expandByPoint:function(point){return this.min.min(point),this.max.max(point),this},expandByVector:function(vector){return this.min.sub(vector),this.max.add(vector),this},expandByScalar:function(scalar){return this.min.addScalar(-scalar),this.max.addScalar(scalar),this},expandByObject:function(){var scope,i,l,v1=new Vector3;function traverse(node){var geometry=node.geometry;if(void 0!==geometry)if(geometry.isGeometry){var vertices=geometry.vertices;for(i=0,l=vertices.length;i<l;i++)v1.copy(vertices[i]),v1.applyMatrix4(node.matrixWorld),scope.expandByPoint(v1)}else if(geometry.isBufferGeometry){var attribute=geometry.attributes.position;if(void 0!==attribute)for(i=0,l=attribute.count;i<l;i++)v1.fromBufferAttribute(attribute,i).applyMatrix4(node.matrixWorld),scope.expandByPoint(v1)}}return function expandByObject(object){return scope=this,object.updateMatrixWorld(!0),object.traverse(traverse),this}}(),containsPoint:function(point){return!(point.x<this.min.x||point.x>this.max.x||point.y<this.min.y||point.y>this.max.y||point.z<this.min.z||point.z>this.max.z)},containsBox:function(box){return this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y&&this.min.z<=box.min.z&&box.max.z<=this.max.z},getParameter:function(point,target){return void 0===target&&(console.warn("THREE.Box3: .getParameter() target is now required"),target=new Vector3),target.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y),(point.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(box){return!(box.max.x<this.min.x||box.min.x>this.max.x||box.max.y<this.min.y||box.min.y>this.max.y||box.max.z<this.min.z||box.min.z>this.max.z)},intersectsSphere:(closestPoint=new Vector3,function intersectsSphere(sphere){return this.clampPoint(sphere.center,closestPoint),closestPoint.distanceToSquared(sphere.center)<=sphere.radius*sphere.radius}),intersectsPlane:function(plane){var min,max;return plane.normal.x>0?(min=plane.normal.x*this.min.x,max=plane.normal.x*this.max.x):(min=plane.normal.x*this.max.x,max=plane.normal.x*this.min.x),plane.normal.y>0?(min+=plane.normal.y*this.min.y,max+=plane.normal.y*this.max.y):(min+=plane.normal.y*this.max.y,max+=plane.normal.y*this.min.y),plane.normal.z>0?(min+=plane.normal.z*this.min.z,max+=plane.normal.z*this.max.z):(min+=plane.normal.z*this.max.z,max+=plane.normal.z*this.min.z),min<=-plane.constant&&max>=-plane.constant},intersectsTriangle:function(){var v0=new Vector3,v1=new Vector3,v2=new Vector3,f0=new Vector3,f1=new Vector3,f2=new Vector3,testAxis=new Vector3,center=new Vector3,extents=new Vector3,triangleNormal=new Vector3;function satForAxes(axes){var i,j;for(i=0,j=axes.length-3;i<=j;i+=3){testAxis.fromArray(axes,i);var r=extents.x*Math.abs(testAxis.x)+extents.y*Math.abs(testAxis.y)+extents.z*Math.abs(testAxis.z),p0=v0.dot(testAxis),p1=v1.dot(testAxis),p2=v2.dot(testAxis);if(Math.max(-Math.max(p0,p1,p2),Math.min(p0,p1,p2))>r)return!1}return!0}return function intersectsTriangle(triangle){if(this.isEmpty())return!1;this.getCenter(center),extents.subVectors(this.max,center),v0.subVectors(triangle.a,center),v1.subVectors(triangle.b,center),v2.subVectors(triangle.c,center),f0.subVectors(v1,v0),f1.subVectors(v2,v1),f2.subVectors(v0,v2);var axes=[0,-f0.z,f0.y,0,-f1.z,f1.y,0,-f2.z,f2.y,f0.z,0,-f0.x,f1.z,0,-f1.x,f2.z,0,-f2.x,-f0.y,f0.x,0,-f1.y,f1.x,0,-f2.y,f2.x,0];return!!satForAxes(axes)&&(!!satForAxes(axes=[1,0,0,0,1,0,0,0,1])&&(triangleNormal.crossVectors(f0,f1),satForAxes(axes=[triangleNormal.x,triangleNormal.y,triangleNormal.z])))}}(),clampPoint:function(point,target){return void 0===target&&(console.warn("THREE.Box3: .clampPoint() target is now required"),target=new Vector3),target.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new Vector3;return function distanceToPoint(point){var clampedPoint;return v1.copy(point).clamp(this.min,this.max).sub(point).length()}}(),getBoundingSphere:function(){var v1=new Vector3;return function getBoundingSphere(target){return void 0===target&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),target=new Sphere),this.getCenter(target.center),target.radius=.5*this.getSize(v1).length(),target}}(),intersect:function(box){return this.min.max(box.min),this.max.min(box.max),this.isEmpty()&&this.makeEmpty(),this},union:function(box){return this.min.min(box.min),this.max.max(box.max),this},applyMatrix4:(points=[new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3],function applyMatrix4(matrix){return this.isEmpty()?this:(points[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(matrix),points[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(matrix),points[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(matrix),points[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(matrix),points[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(matrix),points[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(matrix),points[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(matrix),points[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(matrix),this.setFromPoints(points),this)}),translate:function(offset){return this.min.add(offset),this.max.add(offset),this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}}),Object.assign(Sphere.prototype,{set:function(center,radius){return this.center.copy(center),this.radius=radius,this},setFromPoints:(box=new Box3,function setFromPoints(points,optionalCenter){var center=this.center;void 0!==optionalCenter?center.copy(optionalCenter):box.setFromPoints(points).getCenter(center);for(var maxRadiusSq=0,i=0,il=points.length;i<il;i++)maxRadiusSq=Math.max(maxRadiusSq,center.distanceToSquared(points[i]));return this.radius=Math.sqrt(maxRadiusSq),this}),clone:function(){return(new this.constructor).copy(this)},copy:function(sphere){return this.center.copy(sphere.center),this.radius=sphere.radius,this},empty:function(){return this.radius<=0},containsPoint:function(point){return point.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(point){return point.distanceTo(this.center)-this.radius},intersectsSphere:function(sphere){var radiusSum=this.radius+sphere.radius;return sphere.center.distanceToSquared(this.center)<=radiusSum*radiusSum},intersectsBox:function(box){return box.intersectsSphere(this)},intersectsPlane:function(plane){return Math.abs(plane.distanceToPoint(this.center))<=this.radius},clampPoint:function(point,target){var deltaLengthSq=this.center.distanceToSquared(point);return void 0===target&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),target=new Vector3),target.copy(point),deltaLengthSq>this.radius*this.radius&&(target.sub(this.center).normalize(),target.multiplyScalar(this.radius).add(this.center)),target},getBoundingBox:function(target){return void 0===target&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),target=new Box3),target.set(this.center,this.center),target.expandByScalar(this.radius),target},applyMatrix4:function(matrix){return this.center.applyMatrix4(matrix),this.radius=this.radius*matrix.getMaxScaleOnAxis(),this},translate:function(offset){return this.center.add(offset),this},equals:function(sphere){return sphere.center.equals(this.center)&&sphere.radius===this.radius}}),Object.assign(Plane.prototype,{set:function(normal,constant){return this.normal.copy(normal),this.constant=constant,this},setComponents:function(x,y,z,w){return this.normal.set(x,y,z),this.constant=w,this},setFromNormalAndCoplanarPoint:function(normal,point){return this.normal.copy(normal),this.constant=-point.dot(this.normal),this},setFromCoplanarPoints:function(){var v1=new Vector3,v2=new Vector3;return function setFromCoplanarPoints(a,b,c){var normal=v1.subVectors(c,b).cross(v2.subVectors(a,b)).normalize();return this.setFromNormalAndCoplanarPoint(normal,a),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(plane){return this.normal.copy(plane.normal),this.constant=plane.constant,this},normalize:function(){var inverseNormalLength=1/this.normal.length();return this.normal.multiplyScalar(inverseNormalLength),this.constant*=inverseNormalLength,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(point){return this.normal.dot(point)+this.constant},distanceToSphere:function(sphere){return this.distanceToPoint(sphere.center)-sphere.radius},projectPoint:function(point,target){return void 0===target&&(console.warn("THREE.Plane: .projectPoint() target is now required"),target=new Vector3),target.copy(this.normal).multiplyScalar(-this.distanceToPoint(point)).add(point)},intersectLine:function(){var v1=new Vector3;return function intersectLine(line,target){void 0===target&&(console.warn("THREE.Plane: .intersectLine() target is now required"),target=new Vector3);var direction=line.delta(v1),denominator=this.normal.dot(direction);if(0===denominator)return 0===this.distanceToPoint(line.start)?target.copy(line.start):void 0;var t=-(line.start.dot(this.normal)+this.constant)/denominator;return t<0||t>1?void 0:target.copy(direction).multiplyScalar(t).add(line.start)}}(),intersectsLine:function(line){var startSign=this.distanceToPoint(line.start),endSign=this.distanceToPoint(line.end);return startSign<0&&endSign>0||endSign<0&&startSign>0},intersectsBox:function(box){return box.intersectsPlane(this)},intersectsSphere:function(sphere){return sphere.intersectsPlane(this)},coplanarPoint:function(target){return void 0===target&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),target=new Vector3),target.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var v1=new Vector3,m1=new Matrix3;return function applyMatrix4(matrix,optionalNormalMatrix){var normalMatrix=optionalNormalMatrix||m1.getNormalMatrix(matrix),referencePoint=this.coplanarPoint(v1).applyMatrix4(matrix),normal=this.normal.applyMatrix3(normalMatrix).normalize();return this.constant=-referencePoint.dot(normal),this}}(),translate:function(offset){return this.constant-=offset.dot(this.normal),this},equals:function(plane){return plane.normal.equals(this.normal)&&plane.constant===this.constant}}),Object.assign(Frustum.prototype,{set:function(p0,p1,p2,p3,p4,p5){var planes=this.planes;return planes[0].copy(p0),planes[1].copy(p1),planes[2].copy(p2),planes[3].copy(p3),planes[4].copy(p4),planes[5].copy(p5),this},clone:function(){return(new this.constructor).copy(this)},copy:function(frustum){for(var planes=this.planes,i=0;i<6;i++)planes[i].copy(frustum.planes[i]);return this},setFromMatrix:function(m){var planes=this.planes,me=m.elements,me0=me[0],me1=me[1],me2=me[2],me3=me[3],me4=me[4],me5=me[5],me6=me[6],me7=me[7],me8=me[8],me9=me[9],me10=me[10],me11=me[11],me12=me[12],me13=me[13],me14=me[14],me15=me[15];return planes[0].setComponents(me3-me0,me7-me4,me11-me8,me15-me12).normalize(),planes[1].setComponents(me3+me0,me7+me4,me11+me8,me15+me12).normalize(),planes[2].setComponents(me3+me1,me7+me5,me11+me9,me15+me13).normalize(),planes[3].setComponents(me3-me1,me7-me5,me11-me9,me15-me13).normalize(),planes[4].setComponents(me3-me2,me7-me6,me11-me10,me15-me14).normalize(),planes[5].setComponents(me3+me2,me7+me6,me11+me10,me15+me14).normalize(),this},intersectsObject:(sphere=new Sphere,function intersectsObject(object){var geometry=object.geometry;return null===geometry.boundingSphere&&geometry.computeBoundingSphere(),sphere.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld),this.intersectsSphere(sphere)}),intersectsSprite:function(){var sphere=new Sphere;return function intersectsSprite(sprite){return sphere.center.set(0,0,0),sphere.radius=.7071067811865476,sphere.applyMatrix4(sprite.matrixWorld),this.intersectsSphere(sphere)}}(),intersectsSphere:function(sphere){for(var planes=this.planes,center=sphere.center,negRadius=-s
1phere.radius,i=0;i<6;i++){var distance;if(planes[i].distanceToPoint(center)<negRadius)return!1}return!0},intersectsBox:(p=new Vector3,function intersectsBox(box){for(var planes=this.planes,i=0;i<6;i++){var plane=planes[i];if(p.x=plane.normal.x>0?box.max.x:box.min.x,p.y=plane.normal.y>0?box.max.y:box.min.y,p.z=plane.normal.z>0?box.max.z:box.min.z,plane.distanceToPoint(p)<0)return!1}return!0}),containsPoint:function(point){for(var planes=this.planes,i=0;i<6;i++)if(planes[i].distanceToPoint(point)<0)return!1;return!0}});var alphamap_fragment,alphamap_pars_fragment,alphatest_fragment,aomap_fragment,aomap_pars_fragment,begin_vertex,beginnormal_vertex,bsdfs,bumpmap_pars_fragment,clipping_planes_fragment,clipping_planes_pars_fragment,clipping_planes_pars_vertex,clipping_planes_vertex,color_fragment,color_pars_fragment,color_pars_vertex,color_vertex,common,cube_uv_reflection_fragment,defaultnormal_vertex,displacementmap_pars_vertex,displacementmap_vertex,emissivemap_fragment,emissivemap_pars_fragment,encodings_fragment,encodings_pars_fragment,envmap_fragment,envmap_pars_fragment,envmap_pars_vertex,envmap_vertex,fog_vertex,fog_pars_vertex,fog_fragment,fog_pars_fragment,gradientmap_pars_fragment,lightmap_fragment,lightmap_pars_fragment,lights_lambert_vertex,lights_pars_begin,envmap_physical_pars_fragment,lights_phong_fragment,lights_phong_pars_fragment,lights_physical_fragment,lights_physical_pars_fragment,lights_fragment_begin,lights_fragment_maps,lights_fragment_end,logdepthbuf_fragment,logdepthbuf_pars_fragment,logdepthbuf_pars_vertex,logdepthbuf_vertex,map_fragment,map_pars_fragment,map_particle_fragment,map_particle_pars_fragment,metalnessmap_fragment,metalnessmap_pars_fragment,morphnormal_vertex,morphtarget_pars_vertex,morphtarget_vertex,normal_fragment_begin,normal_fragment_maps,normalmap_pars_fragment,packing,premultiplied_alpha_fragment,project_vertex,dithering_fragment,dithering_pars_fragment,roughnessmap_fragment,roughnessmap_pars_fragment,shadowmap_pars_fragment,shadowmap_pars_vertex,shadowmap_vertex,shadowmask_pars_fragment,skinbase_vertex,skinning_pars_vertex,skinning_vertex,skinnormal_vertex,specularmap_fragment,specularmap_pars_fragment,tonemapping_fragment,tonemapping_pars_fragment,uv_pars_fragment,uv_pars_vertex,uv_vertex,uv2_pars_fragment,uv2_pars_vertex,uv2_vertex,worldpos_vertex,background_frag,background_vert,cube_frag,cube_vert,depth_frag,depth_vert,distanceRGBA_frag,distanceRGBA_vert,equirect_frag,equirect_vert,linedashed_frag,linedashed_vert,meshbasic_frag,meshbasic_vert,meshlambert_frag,meshlambert_vert,meshmatcap_frag,meshmatcap_vert,meshphong_frag,meshphong_vert,meshphysical_frag,meshphysical_vert,normal_frag,normal_vert,points_frag,points_vert,shadow_frag,shadow_vert,sprite_frag,sprite_vert,ShaderChunk={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor
vendor: 3,896 bytes, line 1
1;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t
1const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvarying vec3 vViewPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);
1\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}
1\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM
vendor: 8,479 bytes, line 1
1;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n
1#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif",lights_pars_begin:"uniform vec3 ambientLightColor;
vendor: 9,189 bytes, line 1
1\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t
1reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShinine
1ssExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );
1\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#if defined( DITHERING )\n
vendor: 12,039 bytes, line 1
1gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n
1#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",cube_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}",depth_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",meshbasic_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include <lightmap_fragment>\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;
1\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <envmap_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",points_vert:"uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <fog_fragment>\n}",shadow_vert:"#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}"};function cloneUniforms(src){var dst={};for(var u in src)for(var p in dst[u]={},src[u]){var property=src[u][p];property&&(property.isColor||property.isMatrix3||property.isMatrix4||property.isVector2||property.isVector3||property.isVector4||property.isTexture)?dst[u][p]=property.clone():Array.isArray(property)?dst[u][p]=property.slice():dst[u][p]=property}return dst}function mergeUniforms(uniforms){for(var merged={},u=0;u<uniforms.length;u++){var tmp=cloneUniforms(uniforms[u]);for(var p in tmp)merged[p]=tmp[p]}return merged}var UniformsUtils={clone:cloneUniforms,merge:mergeUniforms},ColorKeywords={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14
vendor: 33,639 bytes, line 1
1381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},hslA,hslB,hsl;function Color(r,g,b){return void 0===g&&void 0===b?this.set(r):this.setRGB(r,g,b)}Object.assign(Color.prototype,{isColor:!0,r:1,g:1,b:1,set:function(value){return value&&value.isColor?this.copy(value):"number"==typeof value?this.setHex(value):"string"==typeof value&&this.setStyle(value),this},setScalar:function(scalar){return this.r=scalar,this.g=scalar,this.b=scalar,this},setHex:function(hex){return hex=Math.floor(hex),this.r=(hex>>16&255)/255,this.g=(hex>>8&255)/255,this.b=(255&hex)/255,this},setRGB:function(r,g,b){return this.r=r,this.g=g,this.b=b,this},setHSL:function(){function hue2rgb(p,q,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+6*(q-p)*(2/3-t):p}return function setHSL(h,s,l){if(h=_Math.euclideanModulo(h,1),s=_Math.clamp(s,0,1),l=_Math.clamp(l,0,1),0===s)this.r=this.g=this.b=l;else{var p=l<=.5?l*(1+s):l+s-l*s,q=2*l-p;this.r=hue2rgb(q,p,h+1/3),this.g=hue2rgb(q,p,h),this.b=hue2rgb(q,p,h-1/3)}return this}}(),setStyle:function(style){function handleAlpha(string){void 0!==string&&parseFloat(string)<1&&console.warn("THREE.Color: Alpha component of "+style+" will be ignored.")}var m,hex;if(m=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(style)){var color,name=m[1],components=m[2];switch(name){case"rgb":case"rgba":if(color=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components))return this.r=Math.min(255,parseInt(color[1],10))/255,this.g=Math.min(255,parseInt(color[2],10))/255,this.b=Math.min(255,parseInt(color[3],10))/255,handleAlpha(color[5]),this;if(color=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components))return this.r=Math.min(100,parseInt(color[1],10))/100,this.g=Math.min(100,parseInt(color[2],10))/100,this.b=Math.min(100,parseInt(color[3],10))/100,handleAlpha(color[5]),this;break;case"hsl":case"hsla":if(color=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){var h=parseFloat(color[1])/360,s=parseInt(color[2],10)/100,l=parseInt(color[3],10)/100;return handleAlpha(color[5]),this.setHSL(h,s,l)}}}else if(m=/^\#([A-Fa-f0-9]+)$/.exec(style)){var hex,size=(hex=m[1]).length;if(3===size)return this.r=parseInt(hex.charAt(0)+hex.charAt(0),16)/255,this.g=parseInt(hex.charAt(1)+hex.charAt(1),16)/255,this.b=parseInt(hex.charAt(2)+hex.charAt(2),16)/255,this;if(6===size)return this.r=parseInt(hex.charAt(0)+hex.charAt(1),16)/255,this.g=parseInt(hex.charAt(2)+hex.charAt(3),16)/255,this.b=parseInt(hex.charAt(4)+hex.charAt(5),16)/255,this}style&&style.length>0&&(void 0!==(hex=ColorKeywords[style])?this.setHex(hex):console.warn("THREE.Color: Unknown color "+style));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(color){return this.r=color.r,this.g=color.g,this.b=color.b,this},copyGammaToLinear:function(color,gammaFactor){return void 0===gammaFactor&&(gammaFactor=2),this.r=Math.pow(color.r,gammaFactor),this.g=Math.pow(color.g,gammaFactor),this.b=Math.pow(color.b,gammaFactor),this},copyLinearToGamma:function(color,gammaFactor){void 0===gammaFactor&&(gammaFactor=2);var safeInverse=gammaFactor>0?1/gammaFactor:1;return this.r=Math.pow(color.r,safeInverse),this.g=Math.pow(color.g,safeInverse),this.b=Math.pow(color.b,safeInverse),this},convertGammaToLinear:function(gammaFactor){return this.copyGammaToLinear(this,gammaFactor),this},convertLinearToGamma:function(gammaFactor){return this.copyLinearToGamma(this,gammaFactor),this},copySRGBToLinear:function(){function SRGBToLinear(c){return c<.04045?.0773993808*c:Math.pow(.9478672986*c+.0521327014,2.4)}return function copySRGBToLinear(color){return this.r=SRGBToLinear(color.r),this.g=SRGBToLinear(color.g),this.b=SRGBToLinear(color.b),this}}(),copyLinearToSRGB:function(){function LinearToSRGB(c){return c<.0031308?12.92*c:1.055*Math.pow(c,.41666)-.055}return function copyLinearToSRGB(color){return this.r=LinearToSRGB(color.r),this.g=LinearToSRGB(color.g),this.b=LinearToSRGB(color.b),this}}(),convertSRGBToLinear:function(){return this.copySRGBToLinear(this),this},convertLinearToSRGB:function(){return this.copyLinearToSRGB(this),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(target){void 0===target&&(console.warn("THREE.Color: .getHSL() target is now required"),target={h:0,s:0,l:0});var r=this.r,g=this.g,b=this.b,max=Math.max(r,g,b),min=Math.min(r,g,b),hue,saturation,lightness=(min+max)/2;if(min===max)hue=0,saturation=0;else{var delta=max-min;switch(saturation=lightness<=.5?delta/(max+min):delta/(2-max-min),max){case r:hue=(g-b)/delta+(g<b?6:0);break;case g:hue=(b-r)/delta+2;break;case b:hue=(r-g)/delta+4}hue/=6}return target.h=hue,target.s=saturation,target.l=lightness,target},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:(hsl={},function(h,s,l){return this.getHSL(hsl),hsl.h+=h,hsl.s+=s,hsl.l+=l,this.setHSL(hsl.h,hsl.s,hsl.l),this}),add:function(color){return this.r+=color.r,this.g+=color.g,this.b+=color.b,this},addColors:function(color1,color2){return this.r=color1.r+color2.r,this.g=color1.g+color2.g,this.b=color1.b+color2.b,this},addScalar:function(s){return this.r+=s,this.g+=s,this.b+=s,this},sub:function(color){return this.r=Math.max(0,this.r-color.r),this.g=Math.max(0,this.g-color.g),this.b=Math.max(0,this.b-color.b),this},multiply:function(color){return this.r*=color.r,this.g*=color.g,this.b*=color.b,this},multiplyScalar:function(s){return this.r*=s,this.g*=s,this.b*=s,this},lerp:function(color,alpha){return this.r+=(color.r-this.r)*alpha,this.g+=(color.g-this.g)*alpha,this.b+=(color.b-this.b)*alpha,this},lerpHSL:(hslA={h:0,s:0,l:0},hslB={h:0,s:0,l:0},function lerpHSL(color,alpha){this.getHSL(hslA),color.getHSL(hslB);var h=_Math.lerp(hslA.h,hslB.h,alpha),s=_Math.lerp(hslA.s,hslB.s,alpha),l=_Math.lerp(hslA.l,hslB.l,alpha);return this.setHSL(h,s,l),this}),equals:function(c){return c.r===this.r&&c.g===this.g&&c.b===this.b},fromArray:function(array,offset){return void 0===offset&&(offset=0),this.r=array[offset],this.g=array[offset+1],this.b=array[offset+2],this},toArray:function(array,offset){return void 0===array&&(array=[]),void 0===offset&&(offset=0),array[offset]=this.r,array[offset+1]=this.g,array[offset+2]=this.b,array},toJSON:function(){return this.getHex()}});var UniformsLib={common:{diffuse:{value:new Color(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new Matrix3},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Vector2(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Color(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new Color(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},uvTransform:{value:new Matrix3}},sprite:{diffuse:{value:new Color(15658734)},opacity:{value:1},center:{value:new Vector2(.5,.5)},rotation:{value:0},map:{value:null},uvTransform:{value:new Matrix3}}},ShaderLib={basic:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.specularmap,UniformsLib.envmap,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.fog]),vertexShader:ShaderChunk.meshbasic_vert,fragmentShader:ShaderChunk.meshbasic_frag},lambert:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.specularmap,UniformsLib.envmap,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.emissivemap,UniformsLib.fog,UniformsLib.lights,{emissive:{value:new Color(0)}}]),vertexShader:ShaderChunk.meshlambert_vert,fragmentShader:ShaderChunk.meshlambert_frag},phong:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.specularmap,UniformsLib.envmap,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.emissivemap,UniformsLib.bumpmap,UniformsLib.normalmap,UniformsLib.displacementmap,UniformsLib.gradientmap,UniformsLib.fog,UniformsLib.lights,{emissive:{value:new Color(0)},specular:{value:new Color(1118481)},shininess:{value:30}}]),vertexShader:ShaderChunk.meshphong_vert,fragmentShader:ShaderChunk.meshphong_frag},standard:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.envmap,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.emissivemap,UniformsLib.bumpmap,UniformsLib.normalmap,UniformsLib.displacementmap,UniformsLib.roughnessmap,UniformsLib.metalnessmap,UniformsLib.fog,UniformsLib.lights,{emissive:{value:new Color(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:ShaderChunk.meshphysical_vert,fragmentShader:ShaderChunk.meshphysical_frag},matcap:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.bumpmap,UniformsLib.normalmap,UniformsLib.displacementmap,UniformsLib.fog,{matcap:{value:null}}]),vertexShader:ShaderChunk.meshmatcap_vert,fragmentShader:ShaderChunk.meshmatcap_frag},points:{uniforms:mergeUniforms([UniformsLib.points,UniformsLib.fog]),vertexShader:ShaderChunk.points_vert,fragmentShader:ShaderChunk.points_frag},dashed:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:ShaderChunk.linedashed_vert,fragmentShader:ShaderChunk.linedashed_frag},depth:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.displacementmap]),vertexShader:ShaderChunk.depth_vert,fragmentShader:ShaderChunk.depth_frag},normal:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.bumpmap,UniformsLib.normalmap,UniformsLib.displacementmap,{opacity:{value:1}}]),vertexShader:ShaderChunk.normal_vert,fragmentShader:ShaderChunk.normal_frag},sprite:{uniforms:mergeUniforms([UniformsLib.sprite,UniformsLib.fog]),vertexShader:ShaderChunk.sprite_vert,fragmentShader:ShaderChunk.sprite_frag},background:{uniforms:{uvTransform:{value:new Matrix3},t2D:{value:null}},vertexShader:ShaderChunk.background_vert,fragmentShader:ShaderChunk.background_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:ShaderChunk.cube_vert,fragmentShader:ShaderChunk.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:ShaderChunk.equirect_vert,fragmentShader:ShaderChunk.equirect_frag},distanceRGBA:{uniforms:mergeUniforms([UniformsLib.common,UniformsLib.displacementmap,{referencePosition:{value:new Vector3},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:ShaderChunk.distanceRGBA_vert,fragmentShader:ShaderChunk.distanceRGBA_frag},shadow:{uniforms:mergeUniforms([UniformsLib.lights,UniformsLib.fog,{color:{value:new Color(0)},opacity:{value:1}}]),vertexShader:ShaderChunk.shadow_vert,fragmentShader:ShaderChunk.shadow_frag}},q;function WebGLAnimation(){var context=null,isAnimating=!1,animationLoop=null;function onAnimationFrame(time,frame){!1!==isAnimating&&(animationLoop(time,frame),context.requestAnimationFrame(onAnimationFrame))}return{start:function(){!0!==isAnimating&&null!==animationLoop&&(context.requestAnimationFrame(onAnimationFrame),isAnimating=!0)},stop:function(){isAnimating=!1},setAnimationLoop:function(callback){animationLoop=callback},setContext:function(value){context=value}}}function WebGLAttributes(gl){var buffers=new WeakMap;function createBuffer(attribute,bufferType){var array=attribute.array,usage=attribute.dynamic?35048:35044,buffer=gl.createBuffer();gl.bindBuffer(bufferType,buffer),gl.bufferData(bufferType,array,usage),attribute.onUploadCallback();var type=5126;return array instanceof Float32Array?type=5126:array instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):array instanceof Uint16Array?type=5123:array instanceof Int16Array?type=5122:array instanceof Uint32Array?type=5125:array instanceof Int32Array?type=5124:array instanceof Int8Array?type=5120:array instanceof Uint8Array&&(type=5121),{buffer:buffer,type:type,bytesPerElement:array.BYTES_PER_ELEMENT,version:attribute.version}}function updateBuffer(buffer,attribute,bufferType){var array=attribute.array,updateRange=attribute.updateRange;gl.bindBuffer(bufferType,buffer),!1===attribute.dynamic?gl.bufferData(bufferType,array,35044):-1===updateRange.count?gl.bufferSubData(bufferType,0,array):0===updateRange.count?console.error("THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually."):(gl.bufferSubData(bufferType,updateRange.offset*array.BYTES_PER_ELEMENT,array.subarray(updateRange.offset,updateRange.offset+updateRange.count)),updateRange.count=-1)}function get(attribute){return attribute.isInterleavedBufferAttribute&&(attribute=attribute.data),buffers.get(attribute)}function remove(attribute){attribute.isInterleavedBufferAttribute&&(attribute=attribute.data);var data=buffers.get(attribute);data&&(gl.deleteBuffer(data.buffer),buffers.delete(attribute))}function update(attribute,bufferType){attribute.isInterleavedBufferAttribute&&(attribute=attribute.data);var data=buffers.get(attribute);void 0===data?buffers.set(attribute,createBuffer(attribute,bufferType)):data.version<attribute.version&&(updateBuffer(data.buffer,attribute,bufferType),data.version=attribute.version)}return{get:get,remove:remove,update:update}}function Face3(a,b,c,normal,color,materialIndex){this.a=a,this.b=b,this.c=c,this.normal=normal&&normal.isVector3?normal:new Vector3,this.vertexNormals=Array.isArray(normal)?normal:[],this.color=color&&color.isColor?color:new Color,this.vertexColors=Array.isArray(color)?color:[],this.materialIndex=void 0!==materialIndex?materialIndex:0}function Euler(x,y,z,order){this._x=x||0,this._y=y||0,this._z=z||0,this._order=order||Euler.DefaultOrder}function Layers(){this.mask=1}ShaderLib.physical={uniforms:mergeUniforms([ShaderLib.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:ShaderChunk.meshphysical_vert,fragmentShader:ShaderChunk.meshphysical_frag},Object.assign(Face3.prototype,{clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.a=source.a,this.b=source.b,this.c=source.c,this.normal.copy(source.normal),this.color.copy(source.color),this.materialIndex=source.materialIndex;for(var i=0,il=source.vertexNormals.length;i<il;i++)this.vertexNormals[i]=source.vertexNormals[i].clone();for(var i=0,il=source.vertexColors.length;i<il;i++)this.vertexColors[i]=source.vertexColors[i].clone();return this}}),Euler.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],Euler.DefaultOrder="XYZ",Object.defineProperties(Euler.prototype,{x:{get:function(){return this._x},set:function(value){this._x=value,this.onChangeCallback()}},y:{get:function(){return this._y},set:function(value){this._y=value,this.onChangeCallback()}},z:{get:function(){return this._z},set:function(value){this._z=value,this.onChangeCallback()}},order:{get:function(){return this._order},set:function(value){this._order=value,this.onChangeCallback()}}}),Object.assign(Euler.prototype,{isEuler:!0,set:function(x,y,z,order){return this._x=x,this._y=y,this._z=z,this._order=order||this._order,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(euler){return this._x=euler._x,this._y=euler._y,this._z=euler._z,this._order=euler._order,this.onChangeCallback(),this},setFromRotationMatrix:function(m,order,update){var clamp=_Math.clamp,te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10];return"XYZ"===(order=order||this._order)?(this._y=Math.asin(clamp(m13,-1,1)),Math.abs(m13)<.99999?(this._x=Math.atan2(-m23,m33),this._z=Math.atan2(-m12,m11)):(this._x=Math.atan2(m32,m22),this._z=0)):"YXZ"===order?(this._x=Math.asin(-clamp(m23,-1,1)),Math.abs(m23)<.99999?(this._y=Math.atan2(m13,m33),this._z=Math.atan2(m21,m22)):(this._y=Math.atan2(-m31,m11),this._z=0)):"ZXY"===order?(this._x=Math.asin(clamp(m32,-1,1)),Math.abs(m32)<.99999?(this._y=Math.atan2(-m31,m33),this._z=Math.atan2(-m12,m22)):(this._y=0,this._z=Math.atan2(m21,m11))):"ZYX"===order?(this._y=Math.asin(-clamp(m31,-1,1)),Math.abs(m31)<.99999?(this._x=Math.atan2(m32,m33),this._z=Math.atan2(m21,m11)):(this._x=0,this._z=Math.atan2(-m12,m22))):"YZX"===order?(this._z=Math.asin(clamp(m21,-1,1)),Math.abs(m21)<.99999?(this._x=Math.atan2(-m23,m22),this._y=Math.atan2(-m31,m11)):(this._x=0,this._y=Math.atan2(m13,m33))):"XZY"===order?(this._z=Math.asin(-clamp(m12,-1,1)),Math.abs(m12)<.99999?(this._x=Math.atan2(m32,m22),this._y=Math.atan2(m13,m11)):(this._x=Math.atan2(-m23,m33),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+order),this._order=order,!1!==update&&this.onChangeCallback(),this},setFromQuaternion:function(){var matrix=new Matrix4;return function setFromQuaternion(q,order,update){return matrix.makeRotationFromQuaternion(q),this.setFromRotationMatrix(matrix,order,update)}}(),setFromVector3:function(v,order){return this.set(v.x,v.y,v.z,order||this._order)},reorder:(q=new Quaternion,function reorder(newOrder){return q.setFromEuler(this),this.setFromQuaternion(q,newOrder)}),equals:function(euler){return euler._x===this._x&&euler._y===this._y&&euler._z===this._z&&euler._order===this._order},fromArray:function(array){return this._x=array[0],this._y=array[1],this._z=array[2],void 0!==array[3]&&(this._order=array[3]),this.onChangeCallback(),this},toArray:function(array,offset){return void 0===array&&(array=[]),void 0===offset&&(offset=0),array[offset]=this._x,array[offset+1]=this._y,array[offset+2]=this._z,array[offset+3]=this._order,array},toVector3:function(optionalResult){return optionalResult?optionalResult.set(this._x,this._y,this._z):new Vector3(this._x,this._y,this._z)},onChange:function(callback){return this.onChangeCallback=callback,this},onChangeCallback:function(){}}),Object.assign(Layers.prototype,{set:function(channel){this.mask=1<<channel|0},enable:function(channel){this.mask|=1<<channel|0},toggle:function(channel){this.mask^=1<<channel|0},disable:function(channel){this.mask&=~(1<<channel|0)},test:function(layers){return 0!=(this.mask&layers.mask)}});var object3DId=0,position,scale,m1,q1;function Object3D(){Object.defineProperty(this,"id",{value:object3DId++}),this.uuid=_Math.generateUUID(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=Object3D.DefaultUp.clone();var position=new Vector3,rotation=new Euler,quaternion=new Quaternion,scale=new Vector3(1,1,1);function onRotationChange(){quaternion.setFromEuler(rotation,!1)}function onQuaternionChange(){rotation.setFromQuaternion(quaternion,void 0,!1)}rotation.onChange(onRotationChange),quaternion.onChange(onQuaternionChange),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:position},rotation:{configurable:!0,enumerable:!0,value:rotation},quaternion:{configurable:!0,enumerable:!0,value:quaternion},scale:{configurable:!0,enumerable:!0,value:scale},modelViewMatrix:{value:new Matrix4},normalMatrix:{value:new Matrix3}}),this.matrix=new Matrix4,this.matrixWorld=new Matrix4,this.matrixAutoUpdate=Object3D.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new Layers,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.userData={}}Object3D.DefaultUp=new Vector3(0,1,0),Object3D.DefaultMatrixAutoUpdate=!0,Object3D.prototype=Object.assign(Object.create(EventDispatcher.prototype),{constructor:Object3D,isObject3D:!0,onBeforeRender:function(){},onAfterRender:function(){},applyMatrix:function(matrix){this.matrix.multiplyMatrices(matrix,this.matrix),this.matrix.decompose(this.position,this.quaternion,this.scale)},applyQuaternion:function(q){return this.quaternion.premultiply(q),this},setRotationFromAxisAngle:function(axis,angle){this.quaternion.setFromAxisAngle(axis,angle)},setRotationFromEuler:function(euler){this.quaternion.setFromEuler(euler,!0)},setRotationFromMatrix:function(m){this.quaternion.setFromRotationMatrix(m)},setRotationFromQuaternion:function(q){this.quaternion.copy(q)},rotateOnAxis:(q1=new Quaternion,function rotateOnAxis(axis,angle){return q1.setFromAxisAngle(axis,angle),this.quaternion.multiply(q1),this}),rotateOnWorldAxis:function(){var q1=new Quaternion;return function rotateOnWorldAxis(axis,angle){return q1.setFromAxisAngle(axis,angle),this.quaternion.premultiply(q1),this}}(),rotateX:function(){var v1=new Vector3(1,0,0);return function rotateX(angle){return this.rotateOnAxis(v1,angle)}}(),rotateY:function(){var v1=new Vector3(0,1,0);return function rotateY(angle){return this.rotateOnAxis(v1,angle)}}(),rotateZ:function(){var v1=new Vector3(0,0,1);return function rotateZ(angle){return this.rotateOnAxis(v1,angle)}}(),translateOnAxis:function(){var v1=new Vector3;return function translateOnAxis(axis,distance){return v1.copy(axis).applyQuaternion(this.quaternion),this.position.add(v1.multiplyScalar(distance)),this}}(),translateX:function(){var v1=new Vector3(1,0,0);return function translateX(distance){return this.translateOnAxis(v1,distance)}}(),translateY:function(){var v1=new Vector3(0,1,0);return function translateY(distance){return this.translateOnAxis(v1,distance)}}(),translateZ:function(){var v1=new Vector3(0,0,1);return function translateZ(distance){return this.translateOnAxis(v1,distance)}}(),localToWorld:function(vector){return vector.applyMatrix4(this.matrixWorld)},worldToLocal:(m1=new Matrix4,function worldToLocal(vector){return vector.applyMatrix4(m1.getInverse(this.matrixWorld))}),lookAt:function(){var q1=new Quaternion,m1=new Matrix4,target=new Vector3,position=new Vector3;return function lookAt(x,y,z){x.isVector3?target.copy(x):target.set(x,y,z);var parent=this.parent;this.updateWorldMatrix(!0,!1),position.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?m1.lookAt(position,target,this.up):m1.lookAt(target,position,this.up),this.quaternion.setFromRotationMatrix(m1),parent&&(m1.extractRotation(parent.matrixWorld),q1.setFromRotationMatrix(m1),this.quaternion.premultiply(q1.inverse()))}}(),add:function(object){if(arguments.length>1){for(var i=0;i<arguments.length;i++)this.add(arguments[i]);return this}return object===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",object),this):(object&&object.isObject3D?(null!==object.parent&&object.parent.remove(object),object.parent=this,object.dispatchEvent({type:"added"}),this.children.push(object)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",object),this)},remove:function(object){if(arguments.length>1){for(var i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}var index=this.children.indexOf(object);return-1!==index&&(object.parent=null,object.dispatchEvent({type:"removed"}),this.children.splice(index,1)),this},getObjectById:function(id){return this.getObjectByProperty("id",id)},getObjectByName:function(name){return this.getObjectByProperty("name",name)},getObjectByProperty:function(name,value){if(this[name]===value)return this;for(var i=0,l=this.children.length;i<l;i++){var child,object=this.children[i].getObjectByProperty(name,value);if(void 0!==object)return object}},getWorldPosition:function(target){return void 0===target&&(console.warn("THREE.Object3D: .getWorldPosition() target is now required"),target=new Vector3),this.updateMatrixWorld(!0),target.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:(position=new Vector3,scale=new Vector3,function getWorldQuaternion(target){return void 0===target&&(console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"),target=new Quaternion),this.updateMatrixWorld(!0),this.matrixWorld.decompose(position,target,scale),target}),getWorldScale:function(){var position=new Vector3,quaternion=new Quaternion;return function getWorldScale(target){return void 0===target&&(console.warn("THREE.Object3D: .getWorldScale() target is now required"),target=new Vector3),this.updateMatrixWorld(!0),this.matrixWorld.decompose(position,quaternion,target),target}}(),getWorldDirection:function(target){void 0===target&&(console.warn("THREE.Object3D: .getWorldDirection() target is now required"),target=new Vector3),this.updateMatrixWorld(!0);var e=this.matrixWorld.elements;return target.set(e[8],e[9],e[10]).normalize()},raycast:function(){},traverse:function(callback){callback(this);for(var children=this.children,i=0,l=children.length;i<l;i++)children[i].traverse(callback)},traverseVisible:function(callback){if(!1!==this.visible){callback(this);for(var children=this.children,i=0,l=children.length;i<l;i++)children[i].traverseVisible(callback)}},traverseAncestors:function(callback){var parent=this.parent;null!==parent&&(callback(parent),parent.traverseAncestors(callback))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(force){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||force)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,force=!0);for(var children=this.children,i=0,l=children.length;i<l;i++)children[i].updateMatrixWorld(force)},updateWorldMatrix:function(updateParents,updateChildren){var parent=this.parent;if(!0===updateParents&&null!==parent&&parent.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===updateChildren)for(var children=this.children,i=0,l=children.length;i<l;i++)children[i].updateWorldMatrix(!1,!0)},toJSON:function(meta){var isRootObject=void 0===meta||"string"==typeof meta,output={};isRootObject&&(meta={geometries:{},materials:{},textures:{},images:{},shapes:{}},output.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});var object={};function serialize(library,element){return void 0===library[element.uuid]&&(library[element.uuid]=element.toJSON(meta)),element.uuid}if(object.uuid=this.uuid,object.type=this.type,""!==this.name&&(object.name=this.name),!0===this.castShadow&&(object.castShadow=!0),!0===this.receiveShadow&&(object.receiveShadow=!0),!1===this.visible&&(object.visible=!1),!1===this.frustumCulled&&(object.frustumCulled=!1),0!==this.renderOrder&&(object.renderOrder=this.renderOrder),"{}"!==JSON.stringify(this.userData)&&(object.userData=this.userData),object.layers=this.layers.mask,object.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(object.matrixAutoUpdate=!1),this.isMesh||this.isLine||this.isPoints){object.geometry=serialize(meta.geometries,this.geometry);var parameters=this.geometry.parameters;if(void 0!==parameters&&void 0!==parameters.shapes){var shapes=parameters.shapes;if(Array.isArray(shapes))for(var i=0,l=shapes.length;i<l;i++){var shape=shapes[i];serialize(meta.shapes,shape)}else serialize(meta.shapes,shapes)}}if(void 0!==this.material)if(Array.isArray(this.material)){for(var uuids=[],i=0,l=this.material.length;i<l;i++)uuids.push(serialize(meta.materials,this.material[i]));object.material=uuids}else object.material=serialize(meta.materials,this.material);if(this.children.length>0){object.children=[];for(var i=0;i<this.children.length;i++)object.children.push(this.children[i].toJSON(meta).object)}if(isRootObject){var geometries=extractFromCache(meta.geometries),materials=extractFromCache(meta.materials),textures=extractFromCache(meta.textures),images=extractFromCache(meta.images),shapes=extractFromCache(meta.shapes);geometries.length>0&&(output.geometries=geometries),materials.length>0&&(output.materials=materials),textures.length>0&&(output.textures=textures),images.length>0&&(output.images=images),shapes.length>0&&(output.shapes=shapes)}return output.object=object,output;function extractFromCache(cache){var values=[];for(var key in cache){var data=cache[key];delete data.metadata,values.push(data)}return values}},clone:function(recursive){return(new this.constructor).copy(this,recursive)},copy:function(source,recursive){if(void 0===recursive&&(recursive=!0),this.name=source.name,this.up.copy(source.up),this.position.copy(source.position),this.quaternion.copy(source.quaternion),this.scale.copy(source.scale),this.matrix.copy(source.matrix),this.matrixWorld.copy(source.matrixWorld),this.matrixAutoUpdate=source.matrixAutoUpdate,this.matrixWorldNeedsUpdate=source.matrixWorldNeedsUpdate,this.layers.mask=source.layers.mask,this.visible=source.visible,this.castShadow=source.castShadow,this.receiveShadow=source.receiveShadow,this.frustumCulled=source.frustumCulled,this.renderOrder=source.renderOrder,this.userData=JSON.parse(JSON.stringify(source.userData)),!0===recursive)for(var i=0;i<source.children.length;i++){var child=source.children[i];this.add(child.clone())}return this}});var geometryId=0,offset,obj;function Geometry(){Object.defineProperty(this,"id",{value:geometryId+=2}),this.uuid=_Math.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}function BufferAttribute(array,itemSize,normalized){if(Array.isArray(array))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=array,this.itemSize=itemSize,this.count=void 0!==array?array.length/itemSize:0,this.normalized=!0===normalized,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.version=0}function Int8BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Int8Array(array),itemSize,normalized)}function Uint8BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Uint8Array(array),itemSize,normalized)}function Uint8ClampedBufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Uint8ClampedArray(array),itemSize,normalized)}function Int16BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Int16Array(array),itemSize,normalized)}function Uint16BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Uint16Array(array),itemSize,normalized)}function Int32BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Int32Array(array),itemSize,normalized)}function Uint32BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Uint32Array(array),itemSize,normalized)}function Float32BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Float32Array(array),itemSize,normalized)}function Float64BufferAttribute(array,itemSize,normalized){BufferAttribute.call(this,new Float64Array(array),itemSize,normalized)}function DirectGeometry(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}function arrayMax(array){if(0===array.length)return-1/0;for(var max=array[0],i=1,l=array.length;i<l;++i)array[i]>max&&(max=array[i]);return max}Geometry.prototype=Object.assign(Object.create(EventDispatcher.prototype),{constructor:Geometry,isGeometry:!0,applyMatrix:function(matrix){for(var normalMatrix=(new Matrix3).getNormalMatrix(matrix),i=0,il=this.vertices.length;i<il;i++){var vertex;this.vertices[i].applyMatrix4(matrix)}for(var i=0,il=this.faces.length;i<il;i++){var face=this.faces[i];
vendor: 4,178 bytes, line 1
1face.normal.applyMatrix3(normalMatrix).normalize();for(var j=0,jl=face.vertexNormals.length;j<jl;j++)face.vertexNormals[j].applyMatrix3(normalMatrix).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this},rotateX:function(){var m1=new Matrix4;return function rotateX(angle){return m1.makeRotationX(angle),this.applyMatrix(m1),this}}(),rotateY:function(){var m1=new Matrix4;return function rotateY(angle){return m1.makeRotationY(angle),this.applyMatrix(m1),this}}(),rotateZ:function(){var m1=new Matrix4;return function rotateZ(angle){return m1.makeRotationZ(angle),this.applyMatrix(m1),this}}(),translate:function(){var m1=new Matrix4;return function translate(x,y,z){return m1.makeTranslation(x,y,z),this.applyMatrix(m1),this}}(),scale:function(){var m1=new Matrix4;return function scale(x,y,z){return m1.makeScale(x,y,z),this.applyMatrix(m1),this}}(),lookAt:(obj=new Object3D,function lookAt(vector){obj.lookAt(vector),obj.updateMatrix(),this.applyMatrix(obj.matrix)}),fromBufferGeometry:function(geometry){var scope=this,indices=null!==geometry.index?geometry.index.array:void 0,attributes=geometry.attributes,positions=attributes.position.array,normals=void 0!==attributes.normal?attributes.normal.array:void 0,colors=void 0!==attributes.color?attributes.color.array:void 0,uvs=void 0!==attributes.uv?attributes.uv.array:void 0,uvs2=void 0!==attributes.uv2?attributes.uv2.array:void 0;void 0!==uvs2&&(this.faceVertexUvs[1]=[]);for(var i=0,j=0;i<positions.length;i+=3,j+=2)scope.vertices.push((new Vector3).fromArray(positions,i)),void 0!==colors&&scope.colors.push((new Color).fromArray(colors,i));function addFace(a,b,c,materialIndex){var vertexColors=void 0===colors?[]:[scope.colors[a].clone(),scope.colors[b].clone(),scope.colors[c].clone()],vertexNormals,face=new Face3(a,b,c,void 0===normals?[]:[(new Vector3).fromArray(normals,3*a),(new Vector3).fromArray(normals,3*b),(new Vector3).fromArray(normals,3*c)],vertexColors,materialIndex);scope.faces.push(face),void 0!==uvs&&scope.faceVertexUvs[0].push([(new Vector2).fromArray(uvs,2*a),(new Vector2).fromArray(uvs,2*b),(new Vector2).fromArray(uvs,2*c)]),void 0!==uvs2&&scope.faceVertexUvs[1].push([(new Vector2).fromArray(uvs2,2*a),(new Vector2).fromArray(uvs2,2*b),(new Vector2).fromArray(uvs2,2*c)])}var groups=geometry.groups;if(groups.length>0)for(var i=0;i<groups.length;i++)for(var group=groups[i],start=group.start,count,j=start,jl=start+group.count;j<jl;j+=3)void 0!==indices?addFace(indices[j],indices[j+1],indices[j+2],group.materialIndex):addFace(j,j+1,j+2,group.materialIndex);else if(void 0!==indices)for(var i=0;i<indices.length;i+=3)addFace(indices[i],indices[i+1],indices[i+2]);else for(var i=0;i<positions.length/3;i+=3)addFace(i,i+1,i+2);return this.computeFaceNormals(),null!==geometry.boundingBox&&(this.boundingBox=geometry.boundingBox.clone()),null!==geometry.boundingSphere&&(this.boundingSphere=geometry.boundingSphere.clone()),this},center:(offset=new Vector3,function center(){return this.computeBoundingBox(),this.boundingBox.getCenter(offset).negate(),this.translate(offset.x,offset.y,offset.z),this}),normalize:function(){this.computeBoundingSphere();var center=this.boundingSphere.center,radius=this.boundingSphere.radius,s=0===radius?1:1/radius,matrix=new Matrix4;return matrix.set(s,0,0,-s*center.x,0,s,0,-s*center.y,0,0,s,-s*center.z,0,0,0,1),this.applyMatrix(matrix),this},computeFaceNormals:function(){for(var cb=new Vector3,ab=new Vector3,f=0,fl=this.faces.length;f<fl;f++){var face=this.faces[f],vA=this.vertices[face.a],vB=this.vertices[face.b],vC=this.vertices[face.c];cb.subVectors(vC,vB),ab.subVectors(vA,vB),cb.cross(ab),cb.normalize(),face.normal.copy(cb)}},computeVertexNormals:function(areaWeighted){var v,vl,f,fl,face,vertices;for(void 0===areaWeighted&&(areaWeighted=!0),vertices=new Array(this.vertices.length),v=0,vl=this.vertices.length;v<vl;v++)vertices[v]=new Vector3;if(areaWeighted){var vA,vB,vC,cb=new Vector3,ab=new Vector3;for(f=0,fl=this.faces.length;f<fl;f++)face=this.faces[f],vA=this.vertices[face.a],vB=this.vertices[face.b],v
vendor: 32,646 bytes, line 1
1C=this.vertices[face.c],cb.subVectors(vC,vB),ab.subVectors(vA,vB),cb.cross(ab),vertices[face.a].add(cb),vertices[face.b].add(cb),vertices[face.c].add(cb)}else for(this.computeFaceNormals(),f=0,fl=this.faces.length;f<fl;f++)vertices[(face=this.faces[f]).a].add(face.normal),vertices[face.b].add(face.normal),vertices[face.c].add(face.normal);for(v=0,vl=this.vertices.length;v<vl;v++)vertices[v].normalize();for(f=0,fl=this.faces.length;f<fl;f++){var vertexNormals=(face=this.faces[f]).vertexNormals;3===vertexNormals.length?(vertexNormals[0].copy(vertices[face.a]),vertexNormals[1].copy(vertices[face.b]),vertexNormals[2].copy(vertices[face.c])):(vertexNormals[0]=vertices[face.a].clone(),vertexNormals[1]=vertices[face.b].clone(),vertexNormals[2]=vertices[face.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var f,fl,face;for(this.computeFaceNormals(),f=0,fl=this.faces.length;f<fl;f++){var vertexNormals=(face=this.faces[f]).vertexNormals;3===vertexNormals.length?(vertexNormals[0].copy(face.normal),vertexNormals[1].copy(face.normal),vertexNormals[2].copy(face.normal)):(vertexNormals[0]=face.normal.clone(),vertexNormals[1]=face.normal.clone(),vertexNormals[2]=face.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var i,il,f,fl,face;for(f=0,fl=this.faces.length;f<fl;f++)for((face=this.faces[f]).__originalFaceNormal?face.__originalFaceNormal.copy(face.normal):face.__originalFaceNormal=face.normal.clone(),face.__originalVertexNormals||(face.__originalVertexNormals=[]),i=0,il=face.vertexNormals.length;i<il;i++)face.__originalVertexNormals[i]?face.__originalVertexNormals[i].copy(face.vertexNormals[i]):face.__originalVertexNormals[i]=face.vertexNormals[i].clone();var tmpGeo=new Geometry;for(tmpGeo.faces=this.faces,i=0,il=this.morphTargets.length;i<il;i++){if(!this.morphNormals[i]){this.morphNormals[i]={},this.morphNormals[i].faceNormals=[],this.morphNormals[i].vertexNormals=[];var dstNormalsFace=this.morphNormals[i].faceNormals,dstNormalsVertex=this.morphNormals[i].vertexNormals,faceNormal,vertexNormals;for(f=0,fl=this.faces.length;f<fl;f++)faceNormal=new Vector3,vertexNormals={a:new Vector3,b:new Vector3,c:new Vector3},dstNormalsFace.push(faceNormal),dstNormalsVertex.push(vertexNormals)}var morphNormals=this.morphNormals[i],faceNormal,vertexNormals;for(tmpGeo.vertices=this.morphTargets[i].vertices,tmpGeo.computeFaceNormals(),tmpGeo.computeVertexNormals(),f=0,fl=this.faces.length;f<fl;f++)face=this.faces[f],faceNormal=morphNormals.faceNormals[f],vertexNormals=morphNormals.vertexNormals[f],faceNormal.copy(face.normal),vertexNormals.a.copy(face.vertexNormals[0]),vertexNormals.b.copy(face.vertexNormals[1]),vertexNormals.c.copy(face.vertexNormals[2])}for(f=0,fl=this.faces.length;f<fl;f++)(face=this.faces[f]).normal=face.__originalFaceNormal,face.vertexNormals=face.__originalVertexNormals},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Box3),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new Sphere),this.boundingSphere.setFromPoints(this.vertices)},merge:function(geometry,matrix,materialIndexOffset){if(geometry&&geometry.isGeometry){var normalMatrix,vertexOffset=this.vertices.length,vertices1=this.vertices,vertices2=geometry.vertices,faces1=this.faces,faces2=geometry.faces,uvs1=this.faceVertexUvs[0],uvs2=geometry.faceVertexUvs[0],colors1=this.colors,colors2=geometry.colors;void 0===materialIndexOffset&&(materialIndexOffset=0),void 0!==matrix&&(normalMatrix=(new Matrix3).getNormalMatrix(matrix));for(var i=0,il=vertices2.length;i<il;i++){var vertex,vertexCopy=vertices2[i].clone();void 0!==matrix&&vertexCopy.applyMatrix4(matrix),vertices1.push(vertexCopy)}for(var i=0,il=colors2.length;i<il;i++)colors1.push(colors2[i].clone());for(i=0,il=faces2.length;i<il;i++){var face=faces2[i],faceCopy,normal,color,faceVertexNormals=face.vertexNormals,faceVertexColors=face.vertexColors;(faceCopy=new Face3(face.a+vertexOffset,face.b+vertexOffset,face.c+vertexOffset)).normal.copy(face.normal),void 0!==normalMatrix&&faceCopy.normal.applyMatrix3(normalMatrix).normalize();for(var j=0,jl=faceVertexNormals.length;j<jl;j++)normal=faceVertexNormals[j].clone(),void 0!==normalMatrix&&normal.applyMatrix3(normalMatrix).normalize(),faceCopy.vertexNormals.push(normal);faceCopy.color.copy(face.color);for(var j=0,jl=faceVertexColors.length;j<jl;j++)color=faceVertexColors[j],faceCopy.vertexColors.push(color.clone());faceCopy.materialIndex=face.materialIndex+materialIndexOffset,faces1.push(faceCopy)}for(i=0,il=uvs2.length;i<il;i++){var uv=uvs2[i],uvCopy=[];if(void 0!==uv){for(var j=0,jl=uv.length;j<jl;j++)uvCopy.push(uv[j].clone());uvs1.push(uvCopy)}}}else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",geometry)},mergeMesh:function(mesh){mesh&&mesh.isMesh?(mesh.matrixAutoUpdate&&mesh.updateMatrix(),this.merge(mesh.geometry,mesh.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",mesh)},mergeVertices:function(){var verticesMap={},unique=[],changes=[],v,key,precisionPoints=4,precision=Math.pow(10,4),i,il,face,indices,j,jl;for(i=0,il=this.vertices.length;i<il;i++)v=this.vertices[i],void 0===verticesMap[key=Math.round(v.x*precision)+"_"+Math.round(v.y*precision)+"_"+Math.round(v.z*precision)]?(verticesMap[key]=i,unique.push(this.vertices[i]),changes[i]=unique.length-1):changes[i]=changes[verticesMap[key]];var faceIndicesToRemove=[];for(i=0,il=this.faces.length;i<il;i++){(face=this.faces[i]).a=changes[face.a],face.b=changes[face.b],face.c=changes[face.c],indices=[face.a,face.b,face.c];for(var n=0;n<3;n++)if(indices[n]===indices[(n+1)%3]){faceIndicesToRemove.push(i);break}}for(i=faceIndicesToRemove.length-1;i>=0;i--){var idx=faceIndicesToRemove[i];for(this.faces.splice(idx,1),j=0,jl=this.faceVertexUvs.length;j<jl;j++)this.faceVertexUvs[j].splice(idx,1)}var diff=this.vertices.length-unique.length;return this.vertices=unique,diff},setFromPoints:function(points){this.vertices=[];for(var i=0,l=points.length;i<l;i++){var point=points[i];this.vertices.push(new Vector3(point.x,point.y,point.z||0))}return this},sortFacesByMaterialIndex:function(){for(var faces=this.faces,length=faces.length,i=0;i<length;i++)faces[i]._id=i;function materialIndexSort(a,b){return a.materialIndex-b.materialIndex}faces.sort(materialIndexSort);var uvs1=this.faceVertexUvs[0],uvs2=this.faceVertexUvs[1],newUvs1,newUvs2;uvs1&&uvs1.length===length&&(newUvs1=[]),uvs2&&uvs2.length===length&&(newUvs2=[]);for(var i=0;i<length;i++){var id=faces[i]._id;newUvs1&&newUvs1.push(uvs1[id]),newUvs2&&newUvs2.push(uvs2[id])}newUvs1&&(this.faceVertexUvs[0]=newUvs1),newUvs2&&(this.faceVertexUvs[1]=newUvs2)},toJSON:function(){var data={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(data.uuid=this.uuid,data.type=this.type,""!==this.name&&(data.name=this.name),void 0!==this.parameters){var parameters=this.parameters;for(var key in parameters)void 0!==parameters[key]&&(data[key]=parameters[key]);return data}for(var vertices=[],i=0;i<this.vertices.length;i++){var vertex=this.vertices[i];vertices.push(vertex.x,vertex.y,vertex.z)}for(var faces=[],normals=[],normalsHash={},colors=[],colorsHash={},uvs=[],uvsHash={},i=0;i<this.faces.length;i++){var face=this.faces[i],hasMaterial=!0,hasFaceUv=!1,hasFaceVertexUv=void 0!==this.faceVertexUvs[0][i],hasFaceNormal=face.normal.length()>0,hasFaceVertexNormal=face.vertexNormals.length>0,hasFaceColor=1!==face.color.r||1!==face.color.g||1!==face.color.b,hasFaceVertexColor=face.vertexColors.length>0,faceType=0;if(faceType=setBit(faceType,0,0),faceType=setBit(faceType,1,!0),faceType=setBit(faceType,2,!1),faceType=setBit(faceType,3,hasFaceVertexUv),faceType=setBit(faceType,4,hasFaceNormal),faceType=setBit(faceType,5,hasFaceVertexNormal),faceType=setBit(faceType,6,hasFaceColor),faceType=setBit(faceType,7,hasFaceVertexColor),faces.push(faceType),faces.push(face.a,face.b,face.c),faces.push(face.materialIndex),hasFaceVertexUv){var faceVertexUvs=this.faceVertexUvs[0][i];faces.push(getUvIndex(faceVertexUvs[0]),getUvIndex(faceVertexUvs[1]),getUvIndex(faceVertexUvs[2]))}if(hasFaceNormal&&faces.push(getNormalIndex(face.normal)),hasFaceVertexNormal){var vertexNormals=face.vertexNormals;faces.push(getNormalIndex(vertexNormals[0]),getNormalIndex(vertexNormals[1]),getNormalIndex(vertexNormals[2]))}if(hasFaceColor&&faces.push(getColorIndex(face.color)),hasFaceVertexColor){var vertexColors=face.vertexColors;faces.push(getColorIndex(vertexColors[0]),getColorIndex(vertexColors[1]),getColorIndex(vertexColors[2]))}}function setBit(value,position,enabled){return enabled?value|1<<position:value&~(1<<position)}function getNormalIndex(normal){var hash=normal.x.toString()+normal.y.toString()+normal.z.toString();return void 0!==normalsHash[hash]?normalsHash[hash]:(normalsHash[hash]=normals.length/3,normals.push(normal.x,normal.y,normal.z),normalsHash[hash])}function getColorIndex(color){var hash=color.r.toString()+color.g.toString()+color.b.toString();return void 0!==colorsHash[hash]?colorsHash[hash]:(colorsHash[hash]=colors.length,colors.push(color.getHex()),colorsHash[hash])}function getUvIndex(uv){var hash=uv.x.toString()+uv.y.toString();return void 0!==uvsHash[hash]?uvsHash[hash]:(uvsHash[hash]=uvs.length/2,uvs.push(uv.x,uv.y),uvsHash[hash])}return data.data={},data.data.vertices=vertices,data.data.normals=normals,colors.length>0&&(data.data.colors=colors),uvs.length>0&&(data.data.uvs=[uvs]),data.data.faces=faces,data},clone:function(){return(new Geometry).copy(this)},copy:function(source){var i,il,j,jl,k,kl;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=source.name;var vertices=source.vertices;for(i=0,il=vertices.length;i<il;i++)this.vertices.push(vertices[i].clone());var colors=source.colors;for(i=0,il=colors.length;i<il;i++)this.colors.push(colors[i].clone());var faces=source.faces;for(i=0,il=faces.length;i<il;i++)this.faces.push(faces[i].clone());for(i=0,il=source.faceVertexUvs.length;i<il;i++){var faceVertexUvs=source.faceVertexUvs[i];for(void 0===this.faceVertexUvs[i]&&(this.faceVertexUvs[i]=[]),j=0,jl=faceVertexUvs.length;j<jl;j++){var uvs=faceVertexUvs[j],uvsCopy=[];for(k=0,kl=uvs.length;k<kl;k++){var uv=uvs[k];uvsCopy.push(uv.clone())}this.faceVertexUvs[i].push(uvsCopy)}}var morphTargets=source.morphTargets;for(i=0,il=morphTargets.length;i<il;i++){var morphTarget={};if(morphTarget.name=morphTargets[i].name,void 0!==morphTargets[i].vertices)for(morphTarget.vertices=[],j=0,jl=morphTargets[i].vertices.length;j<jl;j++)morphTarget.vertices.push(morphTargets[i].vertices[j].clone());if(void 0!==morphTargets[i].normals)for(morphTarget.normals=[],j=0,jl=morphTargets[i].normals.length;j<jl;j++)morphTarget.normals.push(morphTargets[i].normals[j].clone());this.morphTargets.push(morphTarget)}var morphNormals=source.morphNormals;for(i=0,il=morphNormals.length;i<il;i++){var morphNormal={};if(void 0!==morphNormals[i].vertexNormals)for(morphNormal.vertexNormals=[],j=0,jl=morphNormals[i].vertexNormals.length;j<jl;j++){var srcVertexNormal=morphNormals[i].vertexNormals[j],destVertexNormal={};destVertexNormal.a=srcVertexNormal.a.clone(),destVertexNormal.b=srcVertexNormal.b.clone(),destVertexNormal.c=srcVertexNormal.c.clone(),morphNormal.vertexNormals.push(destVertexNormal)}if(void 0!==morphNormals[i].faceNormals)for(morphNormal.faceNormals=[],j=0,jl=morphNormals[i].faceNormals.length;j<jl;j++)morphNormal.faceNormals.push(morphNormals[i].faceNormals[j].clone());this.morphNormals.push(morphNormal)}var skinWeights=source.skinWeights;for(i=0,il=skinWeights.length;i<il;i++)this.skinWeights.push(skinWeights[i].clone());var skinIndices=source.skinIndices;for(i=0,il=skinIndices.length;i<il;i++)this.skinIndices.push(skinIndices[i].clone());var lineDistances=source.lineDistances;for(i=0,il=lineDistances.length;i<il;i++)this.lineDistances.push(lineDistances[i]);var boundingBox=source.boundingBox;null!==boundingBox&&(this.boundingBox=boundingBox.clone());var boundingSphere=source.boundingSphere;return null!==boundingSphere&&(this.boundingSphere=boundingSphere.clone()),this.elementsNeedUpdate=source.elementsNeedUpdate,this.verticesNeedUpdate=source.verticesNeedUpdate,this.uvsNeedUpdate=source.uvsNeedUpdate,this.normalsNeedUpdate=source.normalsNeedUpdate,this.colorsNeedUpdate=source.colorsNeedUpdate,this.lineDistancesNeedUpdate=source.lineDistancesNeedUpdate,this.groupsNeedUpdate=source.groupsNeedUpdate,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(BufferAttribute.prototype,"needsUpdate",{set:function(value){!0===value&&this.version++}}),Object.assign(BufferAttribute.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setArray:function(array){if(Array.isArray(array))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");return this.count=void 0!==array?array.length/this.itemSize:0,this.array=array,this},setDynamic:function(value){return this.dynamic=value,this},copy:function(source){return this.name=source.name,this.array=new source.array.constructor(source.array),this.itemSize=source.itemSize,this.count=source.count,this.normalized=source.normalized,this.dynamic=source.dynamic,this},copyAt:function(index1,attribute,index2){index1*=this.itemSize,index2*=attribute.itemSize;for(var i=0,l=this.itemSize;i<l;i++)this.array[index1+i]=attribute.array[index2+i];return this},copyArray:function(array){return this.array.set(array),this},copyColorsArray:function(colors){for(var array=this.array,offset=0,i=0,l=colors.length;i<l;i++){var color=colors[i];void 0===color&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",i),color=new Color),array[offset++]=color.r,array[offset++]=color.g,array[offset++]=color.b}return this},copyVector2sArray:function(vectors){for(var array=this.array,offset=0,i=0,l=vectors.length;i<l;i++){var vector=vectors[i];void 0===vector&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",i),vector=new Vector2),array[offset++]=vector.x,array[offset++]=vector.y}return this},copyVector3sArray:function(vectors){for(var array=this.array,offset=0,i=0,l=vectors.length;i<l;i++){var vector=vectors[i];void 0===vector&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",i),vector=new Vector3),array[offset++]=vector.x,array[offset++]=vector.y,array[offset++]=vector.z}return this},copyVector4sArray:function(vectors){for(var array=this.array,offset=0,i=0,l=vectors.length;i<l;i++){var vector=vectors[i];void 0===vector&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",i),vector=new Vector4),array[offset++]=vector.x,array[offset++]=vector.y,array[offset++]=vector.z,array[offset++]=vector.w}return this},set:function(value,offset){return void 0===offset&&(offset=0),this.array.set(value,offset),this},getX:function(index){return this.array[index*this.itemSize]},setX:function(index,x){return this.array[index*this.itemSize]=x,this},getY:function(index){return this.array[index*this.itemSize+1]},setY:function(index,y){return this.array[index*this.itemSize+1]=y,this},getZ:function(index){return this.array[index*this.itemSize+2]},setZ:function(index,z){return this.array[index*this.itemSize+2]=z,this},getW:function(index){return this.array[index*this.itemSize+3]},setW:function(index,w){return this.array[index*this.itemSize+3]=w,this},setXY:function(index,x,y){return index*=this.itemSize,this.array[index+0]=x,this.array[index+1]=y,this},setXYZ:function(index,x,y,z){return index*=this.itemSize,this.array[index+0]=x,this.array[index+1]=y,this.array[index+2]=z,this},setXYZW:function(index,x,y,z,w){return index*=this.itemSize,this.array[index+0]=x,this.array[index+1]=y,this.array[index+2]=z,this.array[index+3]=w,this},onUpload:function(callback){return this.onUploadCallback=callback,this},clone:function(){return new this.constructor(this.array,this.itemSize).copy(this)}}),Int8BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Int8BufferAttribute.prototype.constructor=Int8BufferAttribute,Uint8BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Uint8BufferAttribute.prototype.constructor=Uint8BufferAttribute,Uint8ClampedBufferAttribute.prototype=Object.create(BufferAttribute.prototype),Uint8ClampedBufferAttribute.prototype.constructor=Uint8ClampedBufferAttribute,Int16BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Int16BufferAttribute.prototype.constructor=Int16BufferAttribute,Uint16BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Uint16BufferAttribute.prototype.constructor=Uint16BufferAttribute,Int32BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Int32BufferAttribute.prototype.constructor=Int32BufferAttribute,Uint32BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Uint32BufferAttribute.prototype.constructor=Uint32BufferAttribute,Float32BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Float32BufferAttribute.prototype.constructor=Float32BufferAttribute,Float64BufferAttribute.prototype=Object.create(BufferAttribute.prototype),Float64BufferAttribute.prototype.constructor=Float64BufferAttribute,Object.assign(DirectGeometry.prototype,{computeGroups:function(geometry){for(var group,groups=[],materialIndex=void 0,faces=geometry.faces,i=0;i<faces.length;i++){var face=faces[i];face.materialIndex!==materialIndex&&(materialIndex=face.materialIndex,void 0!==group&&(group.count=3*i-group.start,groups.push(group)),group={start:3*i,materialIndex:materialIndex})}void 0!==group&&(group.count=3*i-group.start,groups.push(group)),this.groups=groups},fromGeometry:function(geometry){var faces=geometry.faces,vertices=geometry.vertices,faceVertexUvs=geometry.faceVertexUvs,hasFaceVertexUv=faceVertexUvs[0]&&faceVertexUvs[0].length>0,hasFaceVertexUv2=faceVertexUvs[1]&&faceVertexUvs[1].length>0,morphTargets=geometry.morphTargets,morphTargetsLength=morphTargets.length,morphTargetsPosition;if(morphTargetsLength>0){morphTargetsPosition=[];for(var i=0;i<morphTargetsLength;i++)morphTargetsPosition[i]={name:morphTargets[i].name,data:[]};this.morphTargets.position=morphTargetsPosition}var morphNormals=geometry.morphNormals,morphNormalsLength=morphNormals.length,morphTargetsNormal;if(morphNormalsLength>0){morphTargetsNormal=[];for(var i=0;i<morphNormalsLength;i++)morphTargetsNormal[i]={name:morphNormals[i].name,data:[]};this.morphTargets.normal=morphTargetsNormal}var skinIndices=geometry.skinIndices,skinWeights=geometry.skinWeights,hasSkinIndices=skinIndices.length===vertices.length,hasSkinWeights=skinWeights.length===vertices.length;vertices.length>0&&0===faces.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(var i=0;i<faces.length;i++){var face=faces[i];this.vertices.push(vertices[face.a],vertices[face.b],vertices[face.c]);var vertexNormals=face.vertexNormals;if(3===vertexNormals.length)this.normals.push(vertexNormals[0],vertexNormals[1],vertexNormals[2]);else{var normal=face.normal;this.normals.push(normal,normal,normal)}var vertexColors=face.vertexColors,vertexUvs,vertexUvs;if(3===vertexColors.length)this.colors.push(vertexColors[0],vertexColors[1],vertexColors[2]);else{var color=face.color;this.colors.push(color,color,color)}if(!0===hasFaceVertexUv)void 0!==(vertexUvs=faceVertexUvs[0][i])?this.uvs.push(vertexUvs[0],vertexUvs[1],vertexUvs[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",i),this.uvs.push(new Vector2,new Vector2,new Vector2));if(!0===hasFaceVertexUv2)void 0!==(vertexUvs=faceVertexUvs[1][i])?this.uvs2.push(vertexUvs[0],vertexUvs[1],vertexUvs[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",i),this.uvs2.push(new Vector2,new Vector2,new Vector2));for(var j=0;j<morphTargetsLength;j++){var morphTarget=morphTargets[j].vertices;morphTargetsPosition[j].data.push(morphTarget[face.a],morphTarget[face.b],morphTarget[face.c])}for(var j=0;j<morphNormalsLength;j++){var morphNormal=morphNormals[j].vertexNormals[i];morphTargetsNormal[j].data.push(morphNormal.a,morphNormal.b,morphNormal.c)}hasSkinIndices&&this.skinIndices.push(skinIndices[face.a],skinIndices[face.b],skinIndices[face.c]),hasSkinWeights&&this.skinWeights.push(skinWeights[face.a],skinWeights[face.b],skinWeights[face.c])}return this.computeGroups(geometry),this.verticesNeedUpdate=geometry.verticesNeedUpdate,this.normalsNeedUpdate=geometry.normalsNeedUpdate,this.colorsNeedUpdate=geometry.colorsNeedUpdate,this.uvsNeedUpdate=geometry.uvsNeedUpdate,this.groupsNeedUpdate=geometry.groupsNeedUpdate,this}});var bufferGeometryId=1;function BufferGeometry(){Object.defineProperty(this,"id",{value:bufferGeometryId+=2}),this.uuid=_Math.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}function BoxGeometry(width,height,depth,widthSegments,heightSegments,depthSegments){Geometry.call(this),this.type="BoxGeometry",this.parameters={width:width,height:height,depth:depth,widthSegments:widthSegments,heightSegments:heightSegments,depthSegments:depthSegments},this.fromBufferGeometry(new BoxBufferGeometry(width,height,depth,widthSegments,heightSegments,depthSegments)),this.mergeVertices()}function BoxBufferGeometry(width,height,depth,widthSegments,heightSegments,depthSegments){BufferGeometry.call(this),this.type="BoxBufferGeometry",this.parameters={width:width,height:height,depth:depth,widthSegments:widthSegments,heightSegments:heightSegments,depthSegments:depthSegments};var scope=this;width=width||1,height=height||1,depth=depth||1,widthSegments=Math.floor(widthSegments)||1,heightSegments=Math.floor(heightSegments)||1,depthSegments=Math.floor(depthSegments)||1;var indices=[],vertices=[],normals=[],uvs=[],numberOfVertices=0,groupStart=0;function buildPlane(u,v,w,udir,vdir,width,height,depth,gridX,gridY,materialIndex){var segmentWidth=width/gridX,segmentHeight=height/gridY,widthHalf=width/2,heightHalf=height/2,depthHalf=depth/2,gridX1=gridX+1,gridY1=gridY+1,vertexCounter=0,groupCount=0,ix,iy,vector=new Vector3;for(iy=0;iy<gridY1;iy++){var y=iy*segmentHeight-heightHalf;for(ix=0;ix<gridX1;ix++){var x=ix*segmentWidth-widthHalf;vector[u]=x*udir,vector[v]=y*vdir,vector[w]=depthHalf,vertices.push(vector.x,vector.y,vector.z),vector[u]=0,vector[v]=0,vector[w]=depth>0?1:-1,normals.push(vector.x,vector.y,vector.z),uvs.push(ix/gridX),uvs.push(1-iy/gridY),vertexCounter+=1}}for(iy=0;iy<gridY;iy++)for(ix=0;ix<gridX;ix++){var a=numberOfVertices+ix+gridX1*iy,b=numberOfVertices+ix+gridX1*(iy+1),c=numberOfVertices+(ix+1)+gridX1*(iy+1),d=numberOfVertices+(ix+1)+gridX1*iy;indices.push(a,b,d),indices.push(b,c,d),groupCount+=6}scope.addGroup(groupStart,groupCount,materialIndex),groupStart+=groupCount,numberOfVertices+=vertexCounter}buildPlane("z","y","x",-1,-1,depth,height,width,depthSegments,heightSegments,0),buildPlane("z","y","x",1,-1,depth,height,-width,depthSegments,heightSegments,1),buildPlane("x","z","y",1,1,width,depth,height,widthSegments,depthSegments,2),buildPlane("x","z","y",1,-1,width,depth,-height,widthSegments,depthSegments,3),buildPlane("x","y","z",1,-1,width,height,depth,widthSegments,heightSegments,4),buildPlane("x","y","z",-1,-1,width,height,-depth,widthSegments,heightSegments,5),this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function PlaneGeometry(width,height,widthSegments,heightSegments){Geometry.call(this),this.type="PlaneGeometry",this.parameters={width:width,height:height,widthSegments:widthSegments,heightSegments:heightSegments},this.fromBufferGeometry(new PlaneBufferGeometry(width,height,widthSegments,heightSegments)),this.mergeVertices()}function PlaneBufferGeometry(width,height,widthSegments,heightSegments){BufferGeometry.call(this),this.type="PlaneBufferGeometry",this.parameters={width:width,height:height,widthSegments:widthSegments,heightSegments:heightSegments};var width_half=(width=width||1)/2,height_half=(height=height||1)/2,gridX=Math.floor(widthSegments)||1,gridY=Math.floor(heightSegments)||1,gridX1=gridX+1,gridY1=gridY+1,segment_width=width/gridX,segment_height=height/gridY,ix,iy,indices=[],vertices=[],normals=[],uvs=[];for(iy=0;iy<gridY1;iy++){var y=iy*segment_height-height_half;for(ix=0;ix<gridX1;ix++){var x=ix*segment_width-width_half;vertices.push(x,-y,0),normals.push(0,0,1),uvs.push(ix/gridX),uvs.push(1-iy/gridY)}}for(iy=0;iy<gridY;iy++)for(ix=0;ix<gridX;ix++){var a=ix+gridX1*iy,b=ix+gridX1*(iy+1),c=ix+1+gridX1*(iy+1),d=ix+1+gridX1*iy;indices.push(a,b,d),indices.push(b,c,d)}this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}BufferGeometry.prototype=Object.assign(Object.create(EventDispatcher.prototype),{constructor:BufferGeometry,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(index){Array.isArray(index)?this.index=new(arrayMax(index)>65535?Uint32BufferAttribute:Uint16BufferAttribute)(index,1):this.index=index},addAttribute:function(name,attribute){return attribute&&attribute.isBufferAttribute||attribute&&attribute.isInterleavedBufferAttribute?"index"===name?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(attribute),this):(this.attributes[name]=attribute,this):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(name,new BufferAttribute(arguments[1],arguments[2])))},getAttribute:function(name){return this.attributes[name]},removeAttribute:function(name){return delete this.attributes[name],this},addGroup:function(start,count,materialIndex){this.groups.push({start:start,count:count,materialIndex:void 0!==materialIndex?materialIndex:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(start,count){this.drawRange.start=start,this.drawRange.count=count},applyMatrix:function(matrix){var position=this.attributes.position;void 0!==position&&(matrix.applyToBufferAttribute(position),position.needsUpdate=!0);var normal=this.attributes.normal,normalMatrix;void 0!==normal&&((new Matrix3).getNormalMatrix(matrix).applyToBufferAttribute(normal),normal.needsUpdate=!0);return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var m1=new Matrix4;return function rotateX(angle){return m1.makeRotationX(angle),this.applyMatrix(m1),this}}(),rotateY:function(){var m1=new Matrix4;return function rotateY(angle){return m1.makeRotationY(angle),this.applyMatrix(m1),this}}(),rotateZ:function(){var m1=new Matrix4;return function rotateZ(angle){return m1.makeRotationZ(angle),this.applyMatrix(m1),this}}(),translate:function(){var m1=new Matrix4;return function translate(x,y,z){return m1.makeTranslation(x,y,z),this.applyMatrix(m1),this}}(),scale:function(){var m1=new Matrix4;return function scale(x,y,z){return m1.makeScale(x,y,z),this.applyMatrix(m1),this}}(),lookAt:function(){var obj=new Object3D;return function lookAt(vector){obj.lookAt(vector),obj.updateMatrix(),this.applyMatrix(obj.matrix)}}(),center:function(){var offset=new Vector3;return function center(){return this.computeBoundingBox(),this.boundingBox.getCenter(offset).negate(),this.translate(offset.x,offset.y,offset.z),this}}(),setFromObject:function(object){var geometry=object.geometry;if(object.isPoints||object.isLine){var positions=new Float32BufferAttribute(3*geometry.vertices.length,3),colors=new Float32BufferAttribute(3*geometry.colors.length,3);if(this.addAttribute("position",positions.copyVector3sArray(geometry.vertices)),this.addAttribute("color",colors.copyColorsArray(geometry.colors)),geometry.lineDistances&&geometry.lineDistances.length===geometry.vertices.length){var lineDistances=new Float32BufferAttribute(geometry.lineDistances.length,1);this.addAttribute("lineDistance",lineDistances.copyArray(geometry.lineDistances))}null!==geometry.boundingSphere&&(this.boundingSphere=geometry.boundingSphere.clone()),null!==geometry.boundingBox&&(this.boundingBox=geometry.boundingBox.clone())}else object.isMesh&&geometry&&geometry.isGeometry&&this.fromGeometry(geometry);return this},setFromPoints:function(points){for(var position=[],i=0,l=points.length;i<l;i++){var point=points[i];position.push(point.x,point.y,point.z||0)}return this.addAttribute("position",new Float32BufferAttribute(position,3)),this},updateFromObject:function(object){var geometry=object.geometry,attribute;if(object.isMesh){var direct=geometry.__directGeometry;if(!0===geometry.elementsNeedUpdate&&(direct=void 0,geometry.elementsNeedUpdate=!1),void 0===direct)return this.fromGeometry(geometry);direct.verticesNeedUpdate=geometry.verticesNeedUpdate,direct.normalsNeedUpdate=geometry.normalsNeedUpdate,direct.colorsNeedUpdate=geometry.colorsNeedUpdate,direct.uvsNeedUpdate=geometry.uvsNeedUpdate,direct.groupsNeedUpdate=geometry.groupsNeedUpdate,geometry.verticesNeedUpdate=!1,geometry.normalsNeedUpdate=!1,geometry.colorsNeedUpdate=!1,geometry.uvsNeedUpdate=!1,geometry.groupsNeedUpdate=!1,geometry=direct}return!0===geometry.verticesNeedUpdate&&(void 0!==(attribute=this.attributes.position)&&(attribute.copyVector3sArray(geometry.vertices),attribute.needsUpdate=!0),geometry.verticesNeedUpdate=!1),!0===geometry.normalsNeedUpdate&&(void 0!==(attribute=this.attributes.normal)&&(attribute.copyVector3sArray(geometry.normals),attribute.needsUpdate=!0),geometry.normalsNeedUpdate=!1),!0===geometry.colorsNeedUpdate&&(void 0!==(attribute=this.attributes.color)&&(attribute.copyColorsArray(geometry.colors),attribute.needsUpdate=!0),geometry.colorsNeedUpdate=!1),geometry.uvsNeedUpdate&&(void 0!==(attribute=this.attributes.uv)&&(attribute.copyVector2sArray(geometry.uvs),attribute.needsUpdate=!0),geometry.uvsNeedUpdate=!1),geometry.lineDistancesNeedUpdate&&(void 0!==(attribute=this.attributes.lineDistance)&&(attribute.copyArray(geometry.lineDistances),attribute.needsUpdate=!0),geometry.lineDistancesNeedUpdate=!1),geometry.groupsNeedUpdate&&(geometry.computeGroups(object.geometry),this.groups=geometry.groups,geometry.groupsNeedUpdate=!1),this},fromGeometry:function(geometry){return geometry.__directGeometry=(new DirectGeometry).fromGeometry(geometry),this.fromDirectGeometry(geometry.__directGeometry)},fromDirectGeometry:function(geometry){var positions=new Float32Array(3*geometry.vertices.length);if(this.addAttribute("position",new BufferAttribute(positions,3).copyVector3sArray(geometry.vertices)),geometry.normals.length>0){var normals=new Float32Array(3*geometry.normals.length);this.addAttribute("normal",new BufferAttribute(normals,3).copyVector3sArray(geometry.normals))}if(geometry.colors.length>0){var colors=new Float32Array(3*geometry.colors.length);this.addAttribute("color",new BufferAttribute(colors,3).copyColorsArray(geometry.colors))}if(geometry.uvs.length>0){var uvs=new Float32Array(2*geometry.uvs.length);this.addAttribute("uv",new BufferAttribute(uvs,2).copyVector2sArray(geometry.uvs))}if(geometry.uvs2.length>0){var uvs2=new Float32Array(2*geometry.uvs2.length);this.addAttribute("uv2",new BufferAttribute(uvs2,2).copyVector2sArray(geometry.uvs2))}for(var name in this.groups=geometry.groups,geometry.morphTargets){for(var array=[],morphTargets=geometry.morphTargets[name],i=0,l=morphTargets.length;i<l;i++){var morphTarget=morphTargets[i],attribute=new Float32BufferAttribute(3*morphTarget.data.length,3);attribute.name=morphTarget.name,array.push(attribute.copyVector3sArray(morphTarget.data))}this.morphAttributes[name]=array}if(geometry.skinIndices.length>0){var skinIndices=new Float32BufferAttribute(4*geometry.skinIndices.length,4);this.addAttribute("skinIndex",skinIndices.copyVector4sArray(geometry.skinIndices))}if(geometry.skinWeights.length>0){var skinWeights=new Float32BufferAttribute(4*geometry.skinWeights.length,4);this.addAttribute("skinWeight",skinWeights.copyVector4sArray(geometry.skinWeights))}return null!==geometry.boundingSphere&&(this.boundingSphere=geometry.boundingSphere.clone()),null!==geometry.boundingBox&&(this.boundingBox=geometry.boundingBox.clone()),this}
1,computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Box3);var position=this.attributes.position;void 0!==position?this.boundingBox.setFromBufferAttribute(position):this.boundingBox.makeEmpty(),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var box=new Box3,vector=new Vector3;return function computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new Sphere);var position=this.attributes.position;if(position){var center=this.boundingSphere.center;box.setFromBufferAttribute(position),box.getCenter(center);for(var maxRadiusSq=0,i=0,il=position.count;i<il;i++)vector.x=position.getX(i),vector.y=position.getY(i),vector.z=position.getZ(i),maxRadiusSq=Math.max(maxRadiusSq,center.distanceToSquared(vector));this.boundingSphere.radius=Math.sqrt(maxRadiusSq),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var index=this.index,attributes=this.attributes;if(attributes.position){var positions=attributes.position.array;if(void 0===attributes.normal)this.addAttribute("normal",new BufferAttribute(new Float32Array(positions.length),3));else for(var array=attributes.normal.array,i=0,il=array.length;i<il;i++)array[i]=0;var normals=attributes.normal.array,vA,vB,vC,pA=new Vector3,pB=new Vector3,pC=new Vector3,cb=new Vector3,ab=new Vector3;if(index)for(var indices=index.array,i=0,il=index.count;i<il;i+=3)vA=3*indices[i+0],vB=3*indices[i+1],vC=3*indices[i+2],pA.fromArray(positions,vA),pB.fromArray(positions,vB),pC.fromArray(positions,vC),cb.subVectors(pC,pB),ab.subVectors(pA,pB),cb.cross(ab),normals[vA]+=cb.x,normals[vA+1]+=cb.y,normals[vA+2]+=cb.z,normals[vB]+=cb.x,normals[vB+1]+=cb.y,normals[vB+2]+=cb.z,normals[vC]+=cb.x,normals[vC+1]+=cb.y,normals[vC+2]+=cb.z;else for(var i=0,il=positions.length;i<il;i+=9)pA.fromArray(positions,i),pB.fromArray(positions,i+3),pC.fromArray(positions,i+6),cb.subVectors(pC,pB),ab.subVectors(pA,pB),cb.cross(ab),normals[i]=cb.x,normals[i+1]=cb.y,normals[i+2]=cb.z,normals[i+3]=cb.x,normals[i+4]=cb.y,normals[i+5]=cb.z,normals[i+6]=cb.x,normals[i+7]=cb.y,normals[i+8]=cb.z;this.normalizeNormals(),attributes.normal.needsUpdate=!0}},merge:function(geometry,offset){if(geometry&&geometry.isBufferGeometry){void 0===offset&&(offset=0,console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));var attributes=this.attributes;for(var key in attributes)if(void 0!==geometry.attributes[key])for(var attribute1,attributeArray1=attributes[key].array,attribute2=geometry.attributes[key],attributeArray2=attribute2.array,attributeSize,i=0,j=attribute2.itemSize*offset;i<attributeArray2.length;i++,j++)attributeArray1[j]=attributeArray2[i];return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",geometry)},normalizeNormals:function(){var vector=new Vector3;return function normalizeNormals(){for(var normals=this.attributes.normal,i=0,il=normals.count;i<il;i++)vector.x=normals.getX(i),vector.y=normals.getY(i),vector.z=normals.getZ(i),vector.normalize(),normals.setXYZ(i,vector.x,vector.y,vector.z)}}(),toNonIndexed:function(){if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var geometry2=new BufferGeometry,indices=this.index.array,attributes=this.attributes;for(var name in attributes){for(var attribute=attributes[name],array=attribute.array,itemSize=attribute.itemSize,array2=new array.constructor(indices.length*itemSize),index=0,index2=0,i=0,l=indices.length;i<l;i++){index=indices[i]*itemSize;for(var j=0;j<itemSize;j++)array2[index2++]=array[index++]}geometry2.addAttribute(name,new BufferAttribute(array2,itemSize))}for(var groups=this.groups,i=0,l=groups.length;i<l;i++){var group=groups[i];geometry2.addGroup(group.start,group.count,group.materialIndex)}return geometry2},toJSON:function(){var data={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};
vendor: 5,445 bytes, line 1
1if(data.uuid=this.uuid,data.type=this.type,""!==this.name&&(data.name=this.name),Object.keys(this.userData).length>0&&(data.userData=this.userData),void 0!==this.parameters){var parameters=this.parameters;for(var key in parameters)void 0!==parameters[key]&&(data[key]=parameters[key]);return data}data.data={attributes:{}};var index=this.index;if(null!==index){var array=Array.prototype.slice.call(index.array);data.data.index={type:index.array.constructor.name,array:array}}var attributes=this.attributes;for(var key in attributes){var attribute=attributes[key],array=Array.prototype.slice.call(attribute.array);data.data.attributes[key]={itemSize:attribute.itemSize,type:attribute.array.constructor.name,array:array,normalized:attribute.normalized}}var groups=this.groups;groups.length>0&&(data.data.groups=JSON.parse(JSON.stringify(groups)));var boundingSphere=this.boundingSphere;return null!==boundingSphere&&(data.data.boundingSphere={center:boundingSphere.center.toArray(),radius:boundingSphere.radius}),data},clone:function(){return(new BufferGeometry).copy(this)},copy:function(source){var name,i,l;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=source.name;var index=source.index;null!==index&&this.setIndex(index.clone());var attributes=source.attributes;for(name in attributes){var attribute=attributes[name];this.addAttribute(name,attribute.clone())}var morphAttributes=source.morphAttributes;for(name in morphAttributes){var array=[],morphAttribute=morphAttributes[name];for(i=0,l=morphAttribute.length;i<l;i++)array.push(morphAttribute[i].clone());this.morphAttributes[name]=array}var groups=source.groups;for(i=0,l=groups.length;i<l;i++){var group=groups[i];this.addGroup(group.start,group.count,group.materialIndex)}var boundingBox=source.boundingBox;null!==boundingBox&&(this.boundingBox=boundingBox.clone());var boundingSphere=source.boundingSphere;return null!==boundingSphere&&(this.boundingSphere=boundingSphere.clone()),this.drawRange.start=source.drawRange.start,this.drawRange.count=source.drawRange.count,this.userData=source.userData,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),BoxGeometry.prototype=Object.create(Geometry.prototype),BoxGeometry.prototype.constructor=BoxGeometry,BoxBufferGeometry.prototype=Object.create(BufferGeometry.prototype),BoxBufferGeometry.prototype.constructor=BoxBufferGeometry,PlaneGeometry.prototype=Object.create(Geometry.prototype),PlaneGeometry.prototype.constructor=PlaneGeometry,PlaneBufferGeometry.prototype=Object.create(BufferGeometry.prototype),PlaneBufferGeometry.prototype.constructor=PlaneBufferGeometry;var materialId=0,v,segCenter,segDir,diff,barycoord,v0,vab,vac,vbc,vap,vbp,vcp;function Material(){Object.defineProperty(this,"id",{value:materialId++}),this.uuid=_Math.generateUUID(),this.name="",this.type="Material",this.fog=!0,this.lights=!0,this.blending=1,this.side=0,this.flatShading=!1,this.vertexColors=0,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.premultipliedAlpha=!1,this.visible=!0,this.userData={},this.needsUpdate=!0}function ShaderMaterial(parameters){Material.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,void 0!==parameters&&(void 0!==parameters.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(parameters))}function Ray(origin,direction){this.origin=void 0!==origin?origin:new Vector3,this.direction=void 0!==direction?direction:new Vector3}function Triangle(a,b,c){this.a=void 0!==a?a:new Vector3,this.b=void 0!==b?b:new Vector3,this.c=void 0!==c?c:new Vector3}function MeshBasicMaterial(parameters){Material.call(this),this.type="MeshBasicMaterial",this.color=new Color(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.lights=!1,this.setValues(parameters)}function Mesh(geometry,material){Object3D.call(this),this.type="Mesh",this.geometry=void 0!==geometry?geometry:new BufferGeometry,this.material=void 0!==material?material:new MeshBasicMaterial({color:16777215*Math.random()}),this.drawMode=0,this.updateMorphTargets()}
vendor: 6,646 bytes, line 1
1function WebGLBackground(renderer,state,objects,premultipliedAlpha){var clearColor=new Color(0),clearAlpha=0,planeMesh,boxMesh,currentBackground=null,currentBackgroundVersion=0;function render(renderList,scene,camera,forceClear){var background=scene.background;if(null===background?(setClear(clearColor,clearAlpha),currentBackground=null,currentBackgroundVersion=0):background&&background.isColor&&(setClear(background,1),forceClear=!0,currentBackground=null,currentBackgroundVersion=0),(renderer.autoClear||forceClear)&&renderer.clear(renderer.autoClearColor,renderer.autoClearDepth,renderer.autoClearStencil),background&&(background.isCubeTexture||background.isWebGLRenderTargetCube)){void 0===boxMesh&&((boxMesh=new Mesh(new BoxBufferGeometry(1,1,1),new ShaderMaterial({type:"BackgroundCubeMaterial",uniforms:cloneUniforms(ShaderLib.cube.uniforms),vertexShader:ShaderLib.cube.vertexShader,fragmentShader:ShaderLib.cube.fragmentShader,side:1,depthTest:!0,depthWrite:!1,fog:!1}))).geometry.removeAttribute("normal"),boxMesh.geometry.removeAttribute("uv"),boxMesh.onBeforeRender=function(renderer,scene,camera){this.matrixWorld.copyPosition(camera.matrixWorld)},Object.defineProperty(boxMesh.material,"map",{get:function(){return this.uniforms.tCube.value}}),objects.update(boxMesh));var texture=background.isWebGLRenderTargetCube?background.texture:background;boxMesh.material.uniforms.tCube.value=texture,boxMesh.material.uniforms.tFlip.value=background.isWebGLRenderTargetCube?1:-1,currentBackground===background&¤tBackgroundVersion===texture.version||(boxMesh.material.needsUpdate=!0,currentBackground=background,currentBackgroundVersion=texture.version),renderList.unshift(boxMesh,boxMesh.geometry,boxMesh.material,0,null)}else background&&background.isTexture&&(void 0===planeMesh&&((planeMesh=new Mesh(new PlaneBufferGeometry(2,2),new ShaderMaterial({type:"BackgroundMaterial",uniforms:cloneUniforms(ShaderLib.background.uniforms),vertexShader:ShaderLib.background.vertexShader,fragmentShader:ShaderLib.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.removeAttribute("normal"),Object.defineProperty(planeMesh.material,"map",{get:function(){return this.uniforms.t2D.value}}),objects.update(planeMesh)),planeMesh.material.uniforms.t2D.value=background,!0===background.matrixAutoUpdate&&background.updateMatrix(),planeMesh.material.uniforms.uvTransform.value.copy(background.matrix),currentBackground===background&¤tBackgroundVersion===background.version||(planeMesh.material.needsUpdate=!0,currentBackground=background,currentBackgroundVersion=background.version),renderList.unshift(planeMesh,planeMesh.geometry,planeMesh.material,0,null))}function setClear(color,alpha){state.buffers.color.setClear(color.r,color.g,color.b,alpha,premultipliedAlpha)}return{getClearColor:function(){return clearColor},setClearColor:function(color,alpha){clearColor.set(color),setClear(clearColor,clearAlpha=void 0!==alpha?alpha:1)},getClearAlpha:function(){return clearAlpha},setClearAlpha:function(alpha){setClear(clearColor,clearAlpha=alpha)},render:render}}function WebGLBufferRenderer(gl,extensions,info,capabilities){var mode;function setMode(value){mode=value}function render(start,count){gl.drawArrays(mode,start,count),info.update(count,mode)}function renderInstances(geometry,start,count){var extension;if(capabilities.isWebGL2)extension=gl;else if(null===(extension=extensions.get("ANGLE_instanced_arrays")))return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");extension[capabilities.isWebGL2?"drawArraysInstanced":"drawArraysInstancedANGLE"](mode,start,count,geometry.maxInstancedCount),info.update(count,mode,geometry.maxInstancedCount)}this.setMode=setMode,this.render=render,this.renderInstances=renderInstances}function WebGLCapabilities(gl,extensions,parameters){var maxAnisotropy;function getMaxAnisotropy(){if(void 0!==maxAnisotropy)return maxAnisotropy;var extension=extensions.get("EXT_texture_filter_anisotropic");return maxAnisotropy=null!==extension?gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}function getMaxPrecision(precision){if("highp"===precision){if(gl.getShaderPrecisionFormat(35633,36338).precision>0&&gl.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";precision="mediump"}return"mediump"===precision&&gl.getShaderPrecisionFormat(35633,36337).precision>0&&gl.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}var isWebGL2="undefined"!=typeof WebGL2RenderingContext&&gl instanceof WebGL2RenderingContext,precision=void 0!==parameters.precision?parameters.precision:"highp",maxPrecision=getMaxPrecision(precision);maxPrecision!==precision&&(console.warn("THREE.WebGLRenderer:",precision,"not supported, using",maxPrecision,"instead."),precision=maxPrecision);var logarithmicDepthBuffer=!0===parameters.logarithmicDepthBuffer,maxTextures=gl.getParameter(34930),maxVertexTextures=gl.getParameter(35660),maxTextureSize=gl.getParameter(3379),maxCubemapSize=gl.getParameter(34076),maxAttributes=gl.getParameter(34921),maxVertexUniforms=gl.getParameter(36347),maxVaryings=gl.getParameter(36348),maxFragmentUniforms=gl.getParameter(36349),vertexTextures=maxVertexTextures>0,floatFragmentTextures=isWebGL2||!!extensions.get("OES_texture_float"),floatVertexTextures;return{isWebGL2:isWebGL2,getMaxAnisotropy:getMaxAnisotropy,getMaxPrecision:getMaxPrecision,precision:precision,logarithmicDepthBuffer:logarithmicDepthBuffer,maxTextures:maxTextures,maxVertexTextures:maxVertexTextures,maxTextureSize:maxTextureSize,maxCubemapSize:maxCubemapSize,maxAttributes:maxAttributes,maxVertexUniforms:maxVertexUniforms,maxVaryings:maxVaryings,maxFragmentUniforms:maxFragmentUniforms,vertexTextures:vertexTextures,floatFragmentTextures:floatFragmentTextures,floatVertexTextures:vertexTextures&&floatFragmentTextures}}function WebGLClipping(){var scope=this,globalState=null,numGlobalPlanes=0,localClippingEnabled=!1,renderingShadows=!1,plane=new Plane,viewNormalMatrix=new Matrix3,uniform={value:null,needsUpdate:!1};function resetGlobalState(){uniform.value!==globalState&&(uniform.value=globalState,uniform.needsUpdate=numGlobalPlanes>0),scope.numPlanes=numGlobalPlanes,scope.numIntersection=0}function projectPlanes(planes,camera,dstOffset,skipTransform){var nPlanes=null!==planes?planes.length:0,dstArray=null;if(0!==nPlanes){if(dstArray=uniform.value,!0!==skipTransform||null===dstArray){var flatSize=dstOffset+4*nPlanes,viewMatrix=camera.matrixWorldInverse;viewNormalMatrix.getNormalMatrix(viewMatrix),(null===dstArray||dstArray.length<flatSize)&&(
vendor: 5,287 bytes, line 1
1dstArray=new Float32Array(flatSize));for(var i=0,i4=dstOffset;i!==nPlanes;++i,i4+=4)plane.copy(planes[i]).applyMatrix4(viewMatrix,viewNormalMatrix),plane.normal.toArray(dstArray,i4),dstArray[i4+3]=plane.constant}uniform.value=dstArray,uniform.needsUpdate=!0}return scope.numPlanes=nPlanes,dstArray}this.uniform=uniform,this.numPlanes=0,this.numIntersection=0,this.init=function(planes,enableLocalClipping,camera){var enabled=0!==planes.length||enableLocalClipping||0!==numGlobalPlanes||localClippingEnabled;return localClippingEnabled=enableLocalClipping,globalState=projectPlanes(planes,camera,0),numGlobalPlanes=planes.length,enabled},this.beginShadows=function(){renderingShadows=!0,projectPlanes(null)},this.endShadows=function(){renderingShadows=!1,resetGlobalState()},this.setState=function(planes,clipIntersection,clipShadows,camera,cache,fromCache){if(!localClippingEnabled||null===planes||0===planes.length||renderingShadows&&!clipShadows)renderingShadows?projectPlanes(null):resetGlobalState();else{var nGlobal=renderingShadows?0:numGlobalPlanes,lGlobal=4*nGlobal,dstArray=cache.clippingState||null;uniform.value=dstArray,dstArray=projectPlanes(planes,camera,lGlobal,fromCache);for(var i=0;i!==lGlobal;++i)dstArray[i]=globalState[i];cache.clippingState=dstArray,this.numIntersection=clipIntersection?this.numPlanes:0,this.numPlanes+=nGlobal}}}function WebGLExtensions(gl){var extensions={};return{get:function(name){if(void 0!==extensions[name])return extensions[name];var extension;switch(name){case"WEBGL_depth_texture":extension=gl.getExtension("WEBGL_depth_texture")||gl.getExtension("MOZ_WEBGL_depth_texture")||gl.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":extension=gl.getExtension("EXT_texture_filter_anisotropic")||gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":extension=gl.getExtension("WEBGL_compressed_texture_s3tc")||gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":extension=gl.getExtension("WEBGL_compressed_texture_pvrtc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:extension=gl.getExtension(name)}return null===extension&&console.warn("THREE.WebGLRenderer: "+name+" extension not supported."),extensions[name]=extension,extension}}}function WebGLGeometries(gl,attributes,info){var geometries={},wireframeAttributes={};function onGeometryDispose(event){var geometry=event.target,buffergeometry=geometries[geometry.id];for(var name in null!==buffergeometry.index&&attributes.remove(buffergeometry.index),buffergeometry.attributes)attributes.remove(buffergeometry.attributes[name]);geometry.removeEventListener("dispose",onGeometryDispose),delete geometries[geometry.id];var attribute=wireframeAttributes[buffergeometry.id];attribute&&(attributes.remove(attribute),delete wireframeAttributes[buffergeometry.id]),info.memory.geometries--}function get(object,geometry){var buffergeometry=geometries[geometry.id];return buffergeometry||(geometry.addEventListener("dispose",onGeometryDispose),geometry.isBufferGeometry?buffergeometry=geometry:geometry.isGeometry&&(void 0===geometry._bufferGeometry&&(geometry._bufferGeometry=(new BufferGeometry).setFromObject(object)),buffergeometry=geometry._bufferGeometry),geometries[geometry.id]=buffergeometry,info.memory.geometries++,buffergeometry)}function update(geometry){var index=geometry.index,geometryAttributes=geometry.attributes;for(var name in null!==index&&attributes.update(index,34963),geometryAttributes)attributes.update(geometryAttributes[name],34962);var morphAttributes=geometry.morphAttributes;for(var name in morphAttributes)for(var array=morphAttributes[name],i=0,l=array.length;i<l;i++)attributes.update(array[i],34962)}function getWireframeAttribute(geometry){var attribute=wireframeAttributes[geometry.id];if(attribute)return attribute;var indices=[],geometryIndex=geometry.index,geometryAttributes=geometry.attributes;if(null!==geometryIndex)for(var array,i=0,l=(array=geometryIndex.array).length;i<l;i+=3){var a=array[i+0],b=array[i+1],c=array[i+2];indices.push(a,b,b,c,c,a)}else for(var array,i=0,l=(array=geometryAttributes.position.array).length/3-1;i<l;i+=3){var a=i+0,b=i+1,c=i+2;indices.push(a,b,b,c,c,a)}return attribute=new(arrayMax(indices)>65535?Uint32BufferAttribute:Uint16BufferAttribute)(indices,1),attributes.update(attribute,34963),wireframeAttributes[geometry.id]=attribute,attribute}return{get:get,update:update,getWireframeAttribute:getWireframeAttribute}}function WebGLIndexedBufferRenderer(gl,extensions,info,capabilities){var mode,type,bytesPerElement;function setMode(value){mode=value}function setIndex(value){type=value.type,bytesPerElement=value.bytesPerElement}function render(start,count){gl.drawElements(mode,count,type,start*bytesPerElement),info.update(count,mode)}function renderInstances(geometry,start,count){var extension,extension;if(capabilities.isWebGL2)extension=gl;else if(null===(extension=extensions.get("ANGLE_instanced_arrays")))return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_
1instanced_arrays.");extension[capabilities.isWebGL2?"drawElementsInstanced":"drawElementsInstancedANGLE"](mode,count,type,start*bytesPerElement,geometry.maxInstancedCount),info.update(count,mode,geometry.maxInstancedCount)}this.setMode=setMode,this.setIndex=setIndex,this.render=render,this.renderInstances=renderInstances}function WebGLInfo(gl){var memory,render={frame:0,calls:0,triangles:0,points:0,lines:0};function update(count,mode,instanceCount){switch(instanceCount=instanceCount||1,render.calls++,mode){case 4:render.triangles+=instanceCount*(count/3);break;case 5:case 6:render.triangles+=instanceCount*(count-2);break;case 1:render.lines+=instanceCount*(count/2);break;case 3:render.lines+=instanceCount*(count-1);break;case 2:render.lines+=instanceCount*count;break;case 0:render.points+=instanceCount*count;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",mode)}}function reset(){render.frame++,render.calls=0,render.triangles=0,render.points=0,render.lines=0}return{memory:{geometries:0,textures:0},render:render,programs:null,autoReset:!0,reset:reset,update:update}}function absNumericalSort(a,b){return Math.abs(b[1])-Math.abs(a[1])}function WebGLMorphtargets(gl){var influencesList={},morphInfluences=new Float32Array(8);function update(object,geometry,material,program){var objectInfluences=object.morphTargetInfluences,length=objectInfluences.length,influences=influencesList[geometry.id];if(void 0===influences){influences=[];for(var i=0;i<length;i++)influences[i]=[i,0];influencesList[geometry.id]=influences}for(var morphTargets=material.morphTargets&&geometry.morphAttributes.position,morphNormals=material.morphNormals&&geometry.morphAttributes.normal,i=0;i<length;i++){var influence;0!==(influence=influences[i])[1]&&(morphTargets&&geometry.removeAttribute("morphTarget"+i),morphNormals&&geometry.removeAttribute("morphNormal"+i))}for(var i=0;i<length;i++){var influence;(influence=influences[i])[0]=i,influence[1]=objectInfluences[i]}influences.sort(absNumericalSort);for(var i=0;i<8;i++){var influence;if(influence=influences[i]){var index=influence[0],value=influence[1];if(value){morphTargets&&geometry.addAttribute("morphTarget"+i,morphTargets[index]),morphNormals&&geometry.addAttribute("morphNormal"+i,morphNormals[index]),morphInfluences[i]=value;continue}}morphInfluences[i]=0}program.getUniforms().setValue(gl,"morphTargetInfluences",morphInfluences)}return{update:update}}function WebGLObjects(geometries,info){var updateList={};function update(object){var frame=info.render.frame,geometry=object.geometry,buffergeometry=geometries.get(object,geometry);return updateList[buffergeometry.id]!==frame&&(geometry.isGeometry&&buffergeometry.updateFromObject(object),geometries.update(buffergeometry),updateList[buffergeometry.id]=frame),buffergeometry}function dispose(){updateList={}}return{update:update,dispose:dispose}}function CubeTexture(images,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding){images=void 0!==images?images:[],mapping=void 0!==mapping?mapping:301,Texture.call(this,images,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding),this.flipY=!1}function DataTexture3D(data,width,height,depth){Texture.call(this,null),this.image={data:data,width:width,height:height,depth:depth},this.magFilter=1003,this.minFilter=1003,this.generateMipmaps=!1,this.flipY=!1}Material.prototype=Object.assign(Object.create(EventDispatcher.prototype),{constructor:Material,isMaterial:!0,onBeforeCompile:function(){},setValues:function(values){if(void 0!==values)for(var key in values){var newValue=values[key];if(void 0!==newValue)if("shading"!==key){var currentValue=this[key];void 0!==currentValue?currentValue&¤tValue.isColor?currentValue.set(newValue):currentValue&¤tValue.isVector3&&newValue&&newValue.isVector3?currentValue.copy(newValue):this[key]=newValue:console.warn("THREE."+this.type+": '"+key+"' is not a property of this material.")}else console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===newValue;else console.warn("THREE.Material: '"+key+"' parameter is undefined.")}}
vendor: 5,543 bytes, line 1
1,toJSON:function(meta){var isRoot=void 0===meta||"string"==typeof meta;isRoot&&(meta={textures:{},images:{}});var data={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function extractFromCache(cache){var values=[];for(var key in cache){var data=cache[key];delete data.metadata,values.push(data)}return values}if(data.uuid=this.uuid,data.type=this.type,""!==this.name&&(data.name=this.name),this.color&&this.color.isColor&&(data.color=this.color.getHex()),void 0!==this.roughness&&(data.roughness=this.roughness),void 0!==this.metalness&&(data.metalness=this.metalness),this.emissive&&this.emissive.isColor&&(data.emissive=this.emissive.getHex()),1!==this.emissiveIntensity&&(data.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(data.specular=this.specular.getHex()),void 0!==this.shininess&&(data.shininess=this.shininess),void 0!==this.clearCoat&&(data.clearCoat=this.clearCoat),void 0!==this.clearCoatRoughness&&(data.clearCoatRoughness=this.clearCoatRoughness),this.map&&this.map.isTexture&&(data.map=this.map.toJSON(meta).uuid),this.alphaMap&&this.alphaMap.isTexture&&(data.alphaMap=this.alphaMap.toJSON(meta).uuid),this.lightMap&&this.lightMap.isTexture&&(data.lightMap=this.lightMap.toJSON(meta).uuid),this.aoMap&&this.aoMap.isTexture&&(data.aoMap=this.aoMap.toJSON(meta).uuid,data.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(data.bumpMap=this.bumpMap.toJSON(meta).uuid,data.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(data.normalMap=this.normalMap.toJSON(meta).uuid,data.normalMapType=this.normalMapType,data.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(data.displacementMap=this.displacementMap.toJSON(meta).uuid,data.displacementScale=this.displacementScale,data.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(data.roughnessMap=this.roughnessMap.toJSON(meta).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(data.metalnessMap=this.metalnessMap.toJSON(meta).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(data.emissiveMap=this.emissiveMap.toJSON(meta).uuid),this.specularMap&&this.specularMap.isTexture&&(data.specularMap=this.specularMap.toJSON(meta).uuid),this.envMap&&this.envMap.isTexture&&(data.envMap=this.envMap.toJSON(meta).uuid,data.reflectivity=this.reflectivity,void 0!==this.combine&&(data.combine=this.combine),void 0!==this.envMapIntensity&&(data.envMapIntensity=this.envMapIntensity)),this.gradientMap&&this.gradientMap.isTexture&&(data.gradientMap=this.gradientMap.toJSON(meta).uuid),void 0!==this.size&&(data.size=this.size),void 0!==this.sizeAttenuation&&(data.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(data.blending=this.blending),!0===this.flatShading&&(data.flatShading=this.flatShading),0!==this.side&&(data.side=this.side),0!==this.vertexColors&&(data.vertexColors=this.vertexColors),this.opacity<1&&(data.opacity=this.opacity),!0===this.transparent&&(data.transparent=this.transparent),data.depthFunc=this.depthFunc,data.depthTest=this.depthTest,data.depthWrite=this.depthWrite,0!==this.rotation&&(data.rotation=this.rotation),!0===this.polygonOffset&&(data.polygonOffset=!0),0!==this.polygonOffsetFactor&&(data.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(data.polygonOffsetUnits=this.polygonOffsetUnits),1!==this.linewidth&&(data.linewidth=this.linewidth),void 0!==this.dashSize&&(data.dashSize=this.dashSize),void 0!==this.gapSize&&(data.gapSize=this.gapSize),void 0!==this.scale&&(data.scale=this.scale),!0===this.dithering&&(data.dithering=!0),this.alphaTest>0&&(data.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(data.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(data.wireframe=this.wireframe),this.wireframeLinewidth>1&&(data.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(data.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(data.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(data.morphTargets=!0),!0===this.skinning&&(data.skinning=!0),!1===this.visible&&(data.visible=!1),"{}"!==JSON.stringify(this.userData)&&(data.userData=this.userData),isRoot){var textures=extractFromCache(meta.textures),images=extractFromCache(meta.images);textures.length>0&&(data.textures=textures),images.length>0&&(data.images=images)}return data},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.name=source.name,this.fog=source.fog,this.lights=source.lights,this.blending=source.blending,this.side=source.side,this.flatShading=source.flatShading,this.vertexColors=source.vertexColors,this.opacity=source.opacity,this.transparent=source.transparent,this.blendSrc=source.blendSrc,this.blendDst=source.blendDst,this.blendEquation=source.blendEquation,this.blendSrcAlpha=source.blendSrcAlpha,this.blendDstAlpha=source.blendDstAlpha,this.blendEquationAlpha=source.blendEquationAlpha,this.depthFunc=source.depthFunc,this.depthTest=source.depthTest,this.depthWrite=source.depthWrite,this.colorWrite=source.colorWrite,this.precision=source.precision,this.polygonOffset=source.polygonOffset,this.polygonOffsetFactor=source.polygonOffsetFactor,this.polygonOffsetUnits=source.polygonOffsetUnits,this.dithering=source.dithering,this.alphaTest=source.alphaTest,this.premultipliedAlpha=source.premultipliedAlpha,this.visible=source.visible,this.userData=JSON.parse(JSON.stringify(source.userData)),this.clipShadows=source.clipSh
vendor: 22,724 bytes, line 1
1adows,this.clipIntersection=source.clipIntersection;var srcPlanes=source.clippingPlanes,dstPlanes=null;if(null!==srcPlanes){var n=srcPlanes.length;dstPlanes=new Array(n);for(var i=0;i!==n;++i)dstPlanes[i]=srcPlanes[i].clone()}return this.clippingPlanes=dstPlanes,this.shadowSide=source.shadowSide,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),ShaderMaterial.prototype=Object.create(Material.prototype),ShaderMaterial.prototype.constructor=ShaderMaterial,ShaderMaterial.prototype.isShaderMaterial=!0,ShaderMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.fragmentShader=source.fragmentShader,this.vertexShader=source.vertexShader,this.uniforms=cloneUniforms(source.uniforms),this.defines=Object.assign({},source.defines),this.wireframe=source.wireframe,this.wireframeLinewidth=source.wireframeLinewidth,this.lights=source.lights,this.clipping=source.clipping,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.morphNormals=source.morphNormals,this.extensions=source.extensions,this},ShaderMaterial.prototype.toJSON=function(meta){var data=Material.prototype.toJSON.call(this,meta);for(var name in data.uniforms={},this.uniforms){var uniform,value=this.uniforms[name].value;value&&value.isTexture?data.uniforms[name]={type:"t",value:value.toJSON(meta).uuid}:value&&value.isColor?data.uniforms[name]={type:"c",value:value.getHex()}:value&&value.isVector2?data.uniforms[name]={type:"v2",value:value.toArray()}:value&&value.isVector3?data.uniforms[name]={type:"v3",value:value.toArray()}:value&&value.isVector4?data.uniforms[name]={type:"v4",value:value.toArray()}:value&&value.isMatrix4?data.uniforms[name]={type:"m4",value:value.toArray()}:data.uniforms[name]={value:value}}Object.keys(this.defines).length>0&&(data.defines=this.defines),data.vertexShader=this.vertexShader,data.fragmentShader=this.fragmentShader;var extensions={};for(var key in this.extensions)!0===this.extensions[key]&&(extensions[key]=!0);return Object.keys(extensions).length>0&&(data.extensions=extensions),data},Object.assign(Ray.prototype,{set:function(origin,direction){return this.origin.copy(origin),this.direction.copy(direction),this},clone:function(){return(new this.constructor).copy(this)},copy:function(ray){return this.origin.copy(ray.origin),this.direction.copy(ray.direction),this},at:function(t,target){return void 0===target&&(console.warn("THREE.Ray: .at() target is now required"),target=new Vector3),target.copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(v){return this.direction.copy(v).sub(this.origin).normalize(),this},recast:function(){var v1=new Vector3;return function recast(t){return this.origin.copy(this.at(t,v1)),this}}(),closestPointToPoint:function(point,target){void 0===target&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),target=new Vector3),target.subVectors(point,this.origin);var directionDistance=target.dot(this.direction);return directionDistance<0?target.copy(this.origin):target.copy(this.direction).multiplyScalar(directionDistance).add(this.origin)},distanceToPoint:function(point){return Math.sqrt(this.distanceSqToPoint(point))},distanceSqToPoint:function(){var v1=new Vector3;return function distanceSqToPoint(point){var directionDistance=v1.subVectors(point,this.origin).dot(this.direction);return directionDistance<0?this.origin.distanceToSquared(point):(v1.copy(this.direction).multiplyScalar(directionDistance).add(this.origin),v1.distanceToSquared(point))}}(),distanceSqToSegment:(segCenter=new Vector3,segDir=new Vector3,diff=new Vector3,function distanceSqToSegment(v0,v1,optionalPointOnRay,optionalPointOnSegment){segCenter.copy(v0).add(v1).multiplyScalar(.5),segDir.copy(v1).sub(v0).normalize(),diff.copy(this.origin).sub(segCenter);var segExtent=.5*v0.distanceTo(v1),a01=-this.direction.dot(segDir),b0=diff.dot(this.direction),b1=-diff.dot(segDir),c=diff.lengthSq(),det=Math.abs(1-a01*a01),s0,s1,sqrDist,extDet;if(det>0)if(s1=a01*b0-b1,extDet=segExtent*det,(s0=a01*b1-b0)>=0)if(s1>=-extDet)if(s1<=extDet){var invDet=1/det;sqrDist=(s0*=invDet)*(s0+a01*(s1*=invDet)+2*b0)+s1*(a01*s0+s1+2*b1)+c}else s1=segExtent,sqrDist=-(s0=Math.max(0,-(a01*s1+b0)))*s0+s1*(s1+2*b1)+c;else s1=-segExtent,sqrDist=-(s0=Math.max(0,-(a01*s1+b0)))*s0+s1*(s1+2*b1)+c;else s1<=-extDet?sqrDist=-(s0=Math.max(0,-(-a01*segExtent+b0)))*s0+(s1=s0>0?-segExtent:Math.min(Math.max(-segExtent,-b1),segExtent))*(s1+2*b1)+c:s1<=extDet?(s0=0,sqrDist=(s1=Math.min(Math.max(-segExtent,-b1),segExtent))*(s1+2*b1)+c):sqrDist=-(s0=Math.max(0,-(a01*segExtent+b0)))*s0+(s1=s0>0?segExtent:Math.min(Math.max(-segExtent,-b1),segExtent))*(s1+2*b1)+c;else s1=a01>0?-segExtent:segExtent,sqrDist=-(s0=Math.max(0,-(a01*s1+b0)))*s0+s1*(s1+2*b1)+c;return optionalPointOnRay&&optionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin),optionalPointOnSegment&&optionalPointOnSegment.copy(segDir).multiplyScalar(s1).add(segCenter),sqrDist}),intersectSphere:function(){var v1=new Vector3;return function intersectSphere(sphere,target){v1.subVectors(sphere.center,this.origin);var tca=v1.dot(this.direction),d2=v1.dot(v1)-tca*tca,radius2=sphere.radius*sphere.radius;if(d2>radius2)return null;var thc=Math.sqrt(radius2-d2),t0=tca-thc,t1=tca+thc;return t0<0&&t1<0?null:t0<0?this.at(t1,target):this.at(t0,target)}}(),intersectsSphere:function(sphere){return this.distanceSqToPoint(sphere.center)<=sphere.radius*sphere.radius},distanceToPlane:function(plane){var denominator=plane.normal.dot(this.direction);if(0===denominator)return 0===plane.distanceToPoint(this.origin)?0:null;var t=-(this.origin.dot(plane.normal)+plane.constant)/denominator;return t>=0?t:null},intersectPlane:function(plane,target){var t=this.distanceToPlane(plane);return null===t?null:this.at(t,target)},intersectsPlane:function(plane){var distToPoint=plane.distanceToPoint(this.origin),denominator;return 0===distToPoint||plane.normal.dot(this.direction)*distToPoint<0},intersectBox:function(box,target){var tmin,tmax,tymin,tymax,tzmin,tzmax,invdirx=1/this.direction.x,invdiry=1/this.direction.y,invdirz=1/this.direction.z,origin=this.origin;return invdirx>=0?(tmin=(box.min.x-origin.x)*invdirx,tmax=(box.max.x-origin.x)*invdirx):(tmin=(box.max.x-origin.x)*invdirx,tmax=(box.min.x-origin.x)*invdirx),invdiry>=0?(tymin=(box.min.y-origin.y)*invdiry,tymax=(box.max.y-origin.y)*invdiry):(tymin=(box.max.y-origin.y)*invdiry,tymax=(box.min.y-origin.y)*invdiry),tmin>tymax||tymin>tmax?null:((tymin>tmin||tmin!=tmin)&&(tmin=tymin),(tymax<tmax||tmax!=tmax)&&(tmax=tymax),invdirz>=0?(tzmin=(box.min.z-origin.z)*invdirz,tzmax=(box.max.z-origin.z)*invdirz):(tzmin=(box.max.z-origin.z)*invdirz,tzmax=(box.min.z-origin.z)*invdirz),tmin>tzmax||tzmin>tmax?null:((tzmin>tmin||tmin!=tmin)&&(tmin=tzmin),(tzmax<tmax||tmax!=tmax)&&(tmax=tzmax),tmax<0?null:this.at(tmin>=0?tmin:tmax,target)))},intersectsBox:(v=new Vector3,function intersectsBox(box){return null!==this.intersectBox(box,v)}),intersectTriangle:function(){var diff=new Vector3,edge1=new Vector3,edge2=new Vector3,normal=new Vector3;return function intersectTriangle(a,b,c,backfaceCulling,target){edge1.subVectors(b,a),edge2.subVectors(c,a),normal.crossVectors(edge1,edge2);var DdN=this.direction.dot(normal),sign;if(DdN>0){if(backfaceCulling)return null;sign=1}else{if(!(DdN<0))return null;sign=-1,DdN=-DdN}diff.subVectors(this.origin,a);var DdQxE2=sign*this.direction.dot(edge2.crossVectors(diff,edge2));if(DdQxE2<0)return null;var DdE1xQ=sign*this.direction.dot(edge1.cross(diff));if(DdE1xQ<0)return null;if(DdQxE2+DdE1xQ>DdN)return null;var QdN=-sign*diff.dot(normal);return QdN<0?null:this.at(QdN/DdN,target)}}(),applyMatrix4:function(matrix4){return this.origin.applyMatrix4(matrix4),this.direction.transformDirection(matrix4),this},equals:function(ray){return ray.origin.equals(this.origin)&&ray.direction.equals(this.direction)}}),Object.assign(Triangle,{getNormal:(v0=new Vector3,function getNormal(a,b,c,target){void 0===target&&(console.warn("THREE.Triangle: .getNormal() target is now required"),target=new Vector3),target.subVectors(c,b),v0.subVectors(a,b),target.cross(v0);var targetLengthSq=target.lengthSq();return targetLengthSq>0?target.multiplyScalar(1/Math.sqrt(targetLengthSq)):target.set(0,0,0)}),getBarycoord:function(){var v0=new Vector3,v1=new Vector3,v2=new Vector3;return function getBarycoord(point,a,b,c,target){v0.subVectors(c,a),v1.subVectors(b,a),v2.subVectors(point,a);var dot00=v0.dot(v0),dot01=v0.dot(v1),dot02=v0.dot(v2),dot11=v1.dot(v1),dot12=v1.dot(v2),denom=dot00*dot11-dot01*dot01;if(void 0===target&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),target=new Vector3),0===denom)return target.set(-2,-1,-1);var invDenom=1/denom,u=(dot11*dot02-dot01*dot12)*invDenom,v=(dot00*dot12-dot01*dot02)*invDenom;return target.set(1-u-v,v,u)}}(),containsPoint:function(){var v1=new Vector3;return function containsPoint(point,a,b,c){return Triangle.getBarycoord(point,a,b,c,v1),v1.x>=0&&v1.y>=0&&v1.x+v1.y<=1}}(),getUV:(barycoord=new Vector3,function getUV(point,p1,p2,p3,uv1,uv2,uv3,target){return this.getBarycoord(point,p1,p2,p3,barycoord),target.set(0,0),target.addScaledVector(uv1,barycoord.x),target.addScaledVector(uv2,barycoord.y),target.addScaledVector(uv3,barycoord.z),target})}),Object.assign(Triangle.prototype,{set:function(a,b,c){return this.a.copy(a),this.b.copy(b),this.c.copy(c),this},setFromPointsAndIndices:function(points,i0,i1,i2){return this.a.copy(points[i0]),this.b.copy(points[i1]),this.c.copy(points[i2]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(triangle){return this.a.copy(triangle.a),this.b.copy(triangle.b),this.c.copy(triangle.c),this},getArea:function(){var v0=new Vector3,v1=new Vector3;return function getArea(){return v0.subVectors(this.c,this.b),v1.subVectors(this.a,this.b),.5*v0.cross(v1).length()}}(),getMidpoint:function(target){return void 0===target&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),target=new Vector3),target.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(target){return Triangle.getNormal(this.a,this.b,this.c,target)},getPlane:function(target){return void 0===target&&(console.warn("THREE.Triangle: .getPlane() target is now required"),target=new Vector3),target.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(point,target){return Triangle.getBarycoord(point,this.a,this.b,this.c,target)},containsPoint:function(point){return Triangle.containsPoint(point,this.a,this.b,this.c)},getUV:function(point,uv1,uv2,uv3,result){return Triangle.getUV(point,this.a,this.b,this.c,uv1,uv2,uv3,result)},intersectsBox:function(box){return box.intersectsTriangle(this)},closestPointToPoint:(vab=new Vector3,vac=new Vector3,vbc=new Vector3,vap=new Vector3,vbp=new Vector3,vcp=new Vector3,function closestPointToPoint(p,target){void 0===target&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),target=new Vector3);var a=this.a,b=this.b,c=this.c,v,w;vab.subVectors(b,a),vac.subVectors(c,a),vap.subVectors(p,a);var d1=vab.dot(vap),d2=vac.dot(vap);if(d1<=0&&d2<=0)return target.copy(a);vbp.subVectors(p,b);var d3=vab.dot(vbp),d4=vac.dot(vbp);if(d3>=0&&d4<=d3)return target.copy(b);var vc=d1*d4-d3*d2;if(vc<=0&&d1>=0&&d3<=0)return v=d1/(d1-d3),target.copy(a).addScaledVector(vab,v);vcp.subVectors(p,c);var d5=vab.dot(vcp),d6=vac.dot(vcp);if(d6>=0&&d5<=d6)return target.copy(c);var vb=d5*d2-d1*d6;if(vb<=0&&d2>=0&&d6<=0)return w=d2/(d2-d6),target.copy(a).addScaledVector(vac,w);var va=d3*d6-d5*d4;if(va<=0&&d4-d3>=0&&d5-d6>=0)return vbc.subVectors(c,b),w=(d4-d3)/(d4-d3+(d5-d6)),target.copy(b).addScaledVector(vbc,w);var denom=1/(va+vb+vc);return v=vb*denom,w=vc*denom,target.copy(a).addScaledVector(vab,v).addScaledVector(vac,w)}),equals:function(triangle){return triangle.a.equals(this.a)&&triangle.b.equals(this.b)&&triangle.c.equals(this.c)}}),MeshBasicMaterial.prototype=Object.create(Material.prototype),MeshBasicMaterial.prototype.constructor=MeshBasicMaterial,MeshBasicMaterial.prototype.isMeshBasicMaterial=!0,MeshBasicMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.color.copy(source.color),this.map=source.map,this.lightMap=source.lightMap,this.lightMapIntensity=source.lightMapIntensity,this.aoMap=source.aoMap,this.aoMapIntensity=source.aoMapIntensity,this.specularMap=source.specularMap,this.alphaMap=source.alphaMap,this.envMap=source.envMap,this.combine=source.combine,this.reflectivity=source.reflectivity,this.refractionRatio=source.refractionRatio,this.wireframe=source.wireframe,this.wireframeLinewidth=source.wireframeLinewidth,this.wireframeLinecap=source.wireframeLinecap,this.wireframeLinejoin=source.wireframeLinejoin,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this},Mesh.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Mesh,isMesh:!0,setDrawMode:function(value){this.drawMode=value},copy:function(source){return Object3D.prototype.copy.call(this,source),this.drawMode=source.drawMode,void 0!==source.morphTargetInfluences&&(this.morphTargetInfluences=source.morphTargetInfluences.slice()),void 0!==source.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},source.morphTargetDictionary)),this},updateMorphTargets:function(){var geometry=this.geometry,m,ml,name;if(geometry.isBufferGeometry){var morphAttributes=geometry.morphAttributes,keys=Object.keys(morphAttributes);if(keys.length>0){var morphAttribute=morphAttributes[keys[0]];if(void 0!==morphAttribute)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},m=0,ml=morphAttribute.length;m<ml;m++)name=morphAttribute[m].name||String(m),this.morphTargetInfluences.push(0),this.morphTargetDictionary[name]=m}}else{var morphTargets=geometry.morphTargets;void 0!==morphTargets&&morphTargets.length>0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(){var inverseMatrix=new Matrix4,ray=new Ray,sphere=new Sphere,vA=new Vector3,vB=new Vector3,vC=new Vector3,tempA=new Vector3,tempB=new Vector3,tempC=new Vector3,uvA=new Vector2,uvB=new Vector2,uvC=new Vector2,intersectionPoint=new Vector3,intersectionPointWorld=new Vector3;function checkIntersection(object,material,raycaster,ray,pA,pB,pC,point){var intersect;if(null===(intersect=1===material.side?ray.intersectTriangle(pC,pB,pA,!0,point):ray.intersectTriangle(pA,pB,pC,2!==material.side,point)))return null;intersectionPointWorld.copy(point),intersectionPointWorld.applyMatrix4(object.matrixWorld);var distance=raycaster.ray.origin.distanceTo(intersectionPointWorld);return distance<raycaster.near||distance>raycaster.far?null:{distance:distance,point:intersectionPointWorld.clone(),object:object}}function checkBufferGeometryIntersection(object,material,raycaster,ray,position,uv,a,b,c){vA.fromBufferAttribute(position,a),vB.fromBufferAttribute(position,b),vC.fromBufferAttribute(position,c);var intersection=checkIntersection(object,material,raycaster,ray,vA,vB,vC,intersectionPoint);if(intersection){uv&&(uvA.fromBufferAttribute(uv,a),uvB.fromBufferAttribute(uv,b),uvC.fromBufferAttribute(uv,c),intersection.uv=Triangle.getUV(intersectionPoint,vA,vB,vC,uvA,uvB,uvC,new Vector2));var face=new Face3(a,b,c);Triangle.getNormal(vA,vB,vC,face.normal),intersection.face=face}return intersection}return function raycast(raycaster,intersects){var geometry=this.geometry,material=this.material,matrixWorld=this.matrixWorld,intersection;if(void 0!==material&&(null===geometry.boundingSphere&&geometry.computeBoundingSphere(),sphere.copy(geometry.boundingSphere),sphere.applyMatrix4(matrixWorld),!1!==raycaster.ray.intersectsSphere(sphere)&&(inverseMatrix.getInverse(matrixWorld),ray.copy(raycaster.ray).applyMatrix4(inverseMatrix),null===geometry.boundingBox||!1!==ray.intersectsBox(geometry.boundingBox))))if(geometry.isBufferGeometry){var a,b,c,index=geometry.index,position=geometry.attributes.position,uv=geometry.attributes.uv,groups=geometry.groups,drawRange=geometry.drawRange,i,j,il,jl,group,groupMaterial,start,end;if(null!==index)if(Array.isArray(material))for(i=0,il=groups.length;i<il;i++)for(groupMaterial=material[(group=groups[i]).materialIndex],j=start=Math.max(group.start,drawRange.start),jl=end=Math.min(group.start+group.count,drawRange.start+drawRange.count);j<jl;j+=3)a=index.getX(j),b=index.getX(j+1),c=index.getX(j+2),(intersection=checkBufferGeometryIntersection(this,groupMaterial,raycaster,ray,position,uv,a,b,c))&&(intersection.faceIndex=Math.floor(j/3),intersects.push(intersection));else for(i=start=Math.max(0,drawRange.start),il=end=Math.min(index.count,drawRange.start+drawRange.count);i<il;i+=3)a=index.getX(i),b=index.getX(i+1),c=index.getX(i+2),(intersection=checkBufferGeometryIntersection(this,material,raycaster,ray,position,uv,a,b,c))&&(intersection.faceIndex=Math.floor(i/3),intersects.push(intersection));else if(void 0!==position)if(Array.isArray(material))for(i=0,il=groups.length;i<il;i++)for(groupMaterial=material[(group=groups[i]).materialIndex],j=start=Math.max(group.start,drawRange.start),jl=end=Math.min(group.start+group.count,drawRange.start+drawRange.count);j<jl;j+=3)(intersection=checkBufferGeometryIntersection(this,groupMaterial,raycaster,ray,position,uv,a=j,b=j+1,c=j+2))&&(intersection.faceIndex=Math.floor(j/3),intersects.push(intersection));else for(i=start=Math.max(0,drawRange.start),il=end=Math.min(position.count,drawRange.start+drawRange.count);i<il;i+=3)(intersection=checkBufferGeometryIntersection(this,material,raycaster,ray,position,uv,a=i,b=i+1,c=i+2))&&(intersection.faceIndex=Math.floor(i/3),intersects.push(intersection))}else if(geometry.isGeometry){var fvA,fvB,fvC,isMultiMaterial=Array.isArray(material),vertices=geometry.vertices,faces=geometry.faces,uvs,faceVertexUvs=geometry.faceVertexUvs[0];faceVertexUvs.length>0&&(uvs=faceVertexUvs);for(var f=0,fl=faces.length;f<fl;f++){var face=faces[f],faceMaterial=isMultiMaterial?material[face.materialIndex]:material;if(void 0!==faceMaterial){if(fvA=vertices[face.a],fvB=vertices[face.b],fvC=vertices[face.c],!0===faceMaterial.morphTargets){var morphTargets=geometry.morphTargets,morphInfluences=this.morphTargetInfluences;vA.set(0,0,0),vB.set(0,0,0),vC.set(0,0,0);for(var t=0,tl=morphTargets.length;t<tl;t++){var influence=morphInfluences[t];if(0!==influence){var targets=morphTargets[t].vertices;vA.addScaledVector(tempA.subVectors(targets[face.a],fvA),influence),vB.addScaledVector(tempB.subVectors(targets[face.b],fvB),influence),vC.addScaledVector(tempC.subVectors(targets[face.c],fvC),influence)}}vA.add(fvA),vB.add(fvB),vC.add(fvC),fvA=vA,fvB=vB,fvC=vC}if(intersection=checkIntersection(this,faceMaterial,raycaster,ray,fvA,fvB,fvC,intersectionPoint)){if(uvs&&uvs[f]){var uvs_f=uvs[f];uvA.copy(uvs_f[0]),uvB.copy(uvs_f[1]),uvC.copy(uvs_f[2]),intersection.uv=Triangle.getUV(intersectionPoint,fvA,fvB,fvC,uvA,uvB,uvC,new Vector2)}intersection.face=face,intersection.faceIndex=f,intersects.push(intersection)}}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),CubeTexture.prototype=Object.create(Texture.prototype),CubeTexture.prototype.constructor=CubeTexture,CubeTexture.prototype.isCubeTexture=!0,Object.defineProperty(CubeTexture.prototype,"images",{get:function(){return this.image},set:function(value){this.image=value}}),DataTexture3D.prototype=Object.create(Texture.prototype),DataTexture3D.prototype.constructor=DataTexture3D,DataTexture3D.prototype.isDataTexture3D=!0;var emptyTexture=new Texture,emptyTexture3d=new DataTexture3D,emptyCubeTexture=new CubeTexture;function UniformContainer(){this.seq=[],this.map={}}var arrayCacheF32=[],arrayCacheI32=[],mat4array=new Float32Array(16),mat3array=new Float32Array(9),mat2array=new Float32Array(4);function flatten(array,nBlocks,blockSize){var firstElem=array[0];if(firstElem<=0||firstElem>0)return array;var n=nBlocks*blockSize,r=arrayCacheF32[n];if(void 0===r&&(r=new Float32Array(n),arrayCacheF32[n]=r),0!==nBlocks){firstElem.toArray(r,0);for(var i=1,offset=0;i!==nBlocks;++i)offset+=blockSize,array[i].toArray(r,offset)}return r}function arraysEqual(a,b){if(a.length!==b.length)return!1;for(var i=0,l=a.length;i<l;i++)if(a[i]!==b[i])return!1;return!0}function copyArray(a,b){for(var i=0,l=b.length;i<l;i++)a[i]=b[i]}function allocTexUnits(renderer,n){var r=arrayCacheI32[n];void 0===r&&(r=new Int32Array(n),arrayCacheI32[n]=r);for(var i=0;i!==n;++i)r[i]=renderer.allocTextureUnit();return r}function setValue1f(gl,v){var cache=this.cache;cache[0]!==v&&(gl.uniform1f(this.addr,v),cache[0]=v)}function setValue1i(gl,v){var cache=this.cache;cache[0]!==v&&(gl.uniform1i(this.addr,v),cache[0]=v)}function setValue2fv(gl,v){var cache=this.cache;if(void 0!==v.x)cache[0]===v.x&&cache[1]===v.y||(gl.uniform2f(this.addr,v.x,v.y),cache[0]=v.x,cache[1]=v.y);else{if(arraysEqual(cache,v))return;gl.uniform2fv(this.addr,v),copyArray(cache,v)}}function setValue3fv(gl,v){var cache=this.cache;if(void 0!==v.x)cache[0]===v.x&&cache[1]===v.y&&cache[2]===v.z||(gl.uniform3f(this.addr,v.x,v.y,v.z),cache[0]=v.x,cache[1]=v.y,cache[2]=v.z);else if(void 0!==v.r)cache[0]===v.r&&cache[1]===v.g&&cache[2]===v.b||(gl.uniform3f(this.addr,v.r,v.g,v.b),cache[0]=v.r,cache[1]=v.g,cache[2]=v.b);else{if(arraysEqual(cache,v))return;gl.uniform3fv(this.addr,v),copyArray(cache,v)}}function setValue4fv(gl,v){var cache=this.cache;if(void 0!==v.x)cache[0]===v.x&&cache[1]===v.y&&cache[2]===v.z&&cache[3]===v.w||(gl.uniform4f(this.addr,v.x,v.y,v.z,v.w),cache[0]=v.x,cache[1]=v.y,cache[2]=v.z,cache[3]=v.w);else{if(arraysEqual(cache,v))return;gl.uniform4fv(this.addr,v),copyArray(cache,v)}}function setValue2fm(gl,v){var cache=this.cache,elements=v.elements;if(void 0===elements){if(arraysEqual(cache,v))return;gl.uniformMatrix2fv(this.addr,!1,v),copyArray(cache,v)}else{if(arraysEqual(cache,elements))return;mat2array.set(elements),gl.uniformMatrix2fv(this.addr,!1,mat2array),copyArray(cache,elements)}}function setValue3fm(gl,v){var cache=this.cache,elements=v.elements;if(void 0===elements){if(arraysEqual(cache,v))return;gl.uniformMatrix3fv(this.addr,!1,v),copyArray(cache,v)}else{if(arraysEqual(cache,elements))return;mat3array.set(elements),gl.uniformMatrix3fv(this.addr,!1,mat3array),copyArray(cache,elements)}}function setValue4fm(gl,v){var cache=this.cache,elements=v.elements;if(void 0===elements){if(arraysEqual(cache,v))return;gl.uniformMatrix4fv(this.addr,!1,v),copyArray(cache,v)}else{if(arraysEqual(cache,elements))return;mat4array.set(elements),gl.uniformMatrix4fv(this.addr,!1,mat4array),copyArray(cache,elements)}}function setValueT1(gl,v,renderer){var cache=this.cache,unit=renderer.allocTextureUnit();
1cache[0]!==unit&&(gl.uniform1i(this.addr,unit),cache[0]=unit),renderer.setTexture2D(v||emptyTexture,unit)}function setValueT3D1(gl,v,renderer){var cache=this.cache,unit=renderer.allocTextureUnit();cache[0]!==unit&&(gl.uniform1i(this.addr,unit),cache[0]=unit),renderer.setTexture3D(v||emptyTexture3d,unit)}function setValueT6(gl,v,renderer){var cache=this.cache,unit=renderer.allocTextureUnit();cache[0]!==unit&&(gl.uniform1i(this.addr,unit),cache[0]=unit),renderer.setTextureCube(v||emptyCubeTexture,unit)}function setValue2iv(gl,v){var cache=this.cache;arraysEqual(cache,v)||(gl.uniform2iv(this.addr,v),copyArray(cache,v))}function setValue3iv(gl,v){var cache=this.cache;arraysEqual(cache,v)||(gl.uniform3iv(this.addr,v),copyArray(cache,v))}function setValue4iv(gl,v){var cache=this.cache;arraysEqual(cache,v)||(gl.uniform4iv(this.addr,v),copyArray(cache,v))}function getSingularSetter(type){switch(type){case 5126:return setValue1f;case 35664:return setValue2fv;case 35665:return setValue3fv;case 35666:return setValue4fv;case 35674:return setValue2fm;case 35675:return setValue3fm;case 35676:return setValue4fm;case 35678:case 36198:return setValueT1;case 35679:return setValueT3D1;case 35680:return setValueT6;case 5124:case 35670:return setValue1i;case 35667:case 35671:return setValue2iv;case 35668:case 35672:return setValue3iv;case 35669:case 35673:return setValue4iv}}function setValue1fv(gl,v){var cache=this.cache;arraysEqual(cache,v)||(gl.uniform1fv(this.addr,v),copyArray(cache,v))}function setValue1iv(gl,v){var cache=this.cache;arraysEqual(cache,v)||(gl.uniform1iv(this.addr,v),copyArray(cache,v))}function setValueV2a(gl,v){var cache=this.cache,data=flatten(v,this.size,2);arraysEqual(cache,data)||(gl.uniform2fv(this.addr,data),this.updateCache(data))}function setValueV3a(gl,v){var cache=this.cache,data=flatten(v,this.size,3);arraysEqual(cache,data)||(gl.uniform3fv(this.addr,data),this.updateCache(data))}function setValueV4a(gl,v){var cache=this.cache,data=flatten(v,this.size,4);arraysEqual(cache,data)||(gl.uniform4fv(this.addr,data),this.updateCache(data))}function setValueM2a(gl,v){var cache=this.cache,data=flatten(v,this.size,4);arraysEqual(cache,data)||(gl.uniformMatrix2fv(this.addr,!1,data),this.updateCache(data))}function setValueM3a(gl,v){var cache=this.cache,data=flatten(v,this.size,9);arraysEqual(cache,data)||(gl.uniformMatrix3fv(this.addr,!1,data),this.updateCache(data))}function setValueM4a(gl,v){var cache=this.cache,data=flatten(v,this.size,16);arraysEqual(cache,data)||(gl.uniformMatrix4fv(this.addr,!1,data),this.updateCache(data))}function setValueT1a(gl,v,renderer){var cache=this.cache,n=v.length,units=allocTexUnits(renderer,n);!1===arraysEqual(cache,units)&&(gl.uniform1iv(this.addr,units),copyArray(cache,units));for(var i=0;i!==n;++i)renderer.setTexture2D(v[i]||emptyTexture,units[i])}function setValueT6a(gl,v,renderer){var cache=this.cache,n=v.length,units=allocTexUnits(renderer,n);!1===arraysEqual(cache,units)&&(gl.uniform1iv(this.addr,units),copyArray(cache,units));for(var i=0;i!==n;++i)renderer.setTextureCube(v[i]||emptyCubeTexture,units[i])}function getPureArraySetter(type){switch(type){case 5126:return setValue1fv;case 35664:return setValueV2a;case 35665:return setValueV3a;case 35666:return setValueV4a;case 35674:return setValueM2a;case 35675:return setValueM3a;case 35676:return setValueM4a;case 35678:return setValueT1a;case 35680:return setValueT6a;case 5124:case 35670:return setValue1iv;case 35667:case 35671:return setValue2iv;case 35668:case 35672:return setValue3iv;case 35669:case 35673:return setValue4iv}}function SingleUniform(id,activeInfo,addr){this.id=id,this.addr=addr,this.cache=[],this.setValue=getSingularSetter(activeInfo.type)}function PureArrayUniform(id,activeInfo,addr){this.id=id,this.addr=addr,this.cache=[],this.size=activeInfo.size,this.setValue=getPureArraySetter(activeInfo.type)}function StructuredUniform(id){this.id=id,UniformContainer.call(this)}PureArrayUniform.prototype.updateCache=function(data){var cache=this.cache;data instanceof Float32Array&&cache.length!==data.length&&(this.cache=new Float32Array(data.length)),copyArray(cache,data)},StructuredUniform.prototype.setValue=function(gl,value,renderer){for(var seq=this.seq,i=0,n=seq.length;i!==n;++i){var u=seq[i];u.setValue(gl,value[u.id],renderer)}};var RePathPart=/([\w\d_]+)(\])?(\[|\.)?/g;function addUniform(container,uniformObject){container.seq.push(uniformObject),container.map[uniformObject.id]=uniformObject}function parseUniform(activeInfo,addr,container){var path=activeInfo.name,pathLength=path.length;for(RePathPart.lastIndex=0;;){var match=RePathPart.exec(path),matchEnd=RePathPart.lastIndex,id=match[1],idIsIndex="]"===match[2],subscript=match[3];if(idIsIndex&&(id|=0),void 0===subscript||"["===subscript&&matchEnd+2===pathLength){addUniform(container,void 0===subscript?new SingleUniform(id,activeInfo,addr):new PureArrayUniform(id,activeInfo,addr));break}var map,next=container.map[id];void 0===next&&addUniform(container,next=new StructuredUniform(id)),container=next}}function WebGLUniforms(gl,program,renderer){UniformContainer.call(this),this.renderer=renderer;for(var n=gl.getProgramParameter(program,35718),i=0;i<n;++i){var info=gl.getActiveUniform(program,i),addr;parseUniform(info,gl.getUniformLocation(program,info.name),this)}}function addLineNumbers(string){for(var lines=string.split("\n"),i=0;i<lines.length;i++)lines[i]=i+1+": "+lines[i];return lines.join("\n")}function WebGLShader(gl,type,string){var shader=gl.createShader(type);
1return gl.shaderSource(shader,string),gl.compileShader(shader),!1===gl.getShaderParameter(shader,35713)&&console.error("THREE.WebGLShader: Shader couldn't compile."),""!==gl.getShaderInfoLog(shader)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",35633===type?"vertex":"fragment",gl.getShaderInfoLog(shader),addLineNumbers(string)),shader}WebGLUniforms.prototype.setValue=function(gl,name,value){var u=this.map[name];void 0!==u&&u.setValue(gl,value,this.renderer)},WebGLUniforms.prototype.setOptional=function(gl,object,name){var v=object[name];void 0!==v&&this.setValue(gl,name,v)},WebGLUniforms.upload=function(gl,seq,values,renderer){for(var i=0,n=seq.length;i!==n;++i){var u=seq[i],v=values[u.id];!1!==v.needsUpdate&&u.setValue(gl,v.value,renderer)}},WebGLUniforms.seqWithValue=function(seq,values){for(var r=[],i=0,n=seq.length;i!==n;++i){var u=seq[i];u.id in values&&r.push(u)}return r};var programIdCount=0;function getEncodingComponents(encoding){switch(encoding){case 3e3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];case 3002:return["RGBE","( value )"];case 3004:return["RGBM","( value, 7.0 )"];case 3005:return["RGBM","( value, 16.0 )"];case 3006:return["RGBD","( value, 256.0 )"];case 3007:return["Gamma","( value, float( GAMMA_FACTOR ) )"];default:throw new Error("unsupported encoding: "+encoding)}}function getTexelDecodingFunction(functionName,encoding){var components=getEncodingComponents(encoding);return"vec4 "+functionName+"( vec4 value ) { return "+components[0]+"ToLinear"+components[1]+"; }"}function getTexelEncodingFunction(functionName,encoding){var components=getEncodingComponents(encoding);return"vec4 "+functionName+"( vec4 value ) { return LinearTo"+components[0]+components[1]+"; }"}function getToneMappingFunction(functionName,toneMapping){var toneMappingName;switch(toneMapping){case 1:toneMappingName="Linear";break;case 2:toneMappingName="Reinhard";break;case 3:toneMappingName="Uncharted2";break;case 4:toneMappingName="OptimizedCineon";break;case 5:toneMappingName="ACESFilmic";break;default:throw new Error("unsupported toneMapping: "+toneMapping)}return"vec3 "+functionName+"( vec3 color ) { return "+toneMappingName+"ToneMapping( color ); }"}function generateExtensions(extensions,parameters,rendererExtensions){var chunks;return[(extensions=extensions||{}).derivatives||parameters.envMapCubeUV||parameters.bumpMap||parameters.normalMap&&!parameters.objectSpaceNormalMap||parameters.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(extensions.fragDepth||parameters.logarithmicDepthBuffer)&&rendererExtensions.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",extensions.drawBuffers&&rendererExtensions.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(extensions.shaderTextureLOD||parameters.envMap)&&rendererExtensions.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(filterEmptyLine).join("\n")}function generateDefines(defines){var chunks=[];for(var name in defines){var value=defines[name];!1!==value&&chunks.push("#define "+name+" "+value)}return chunks.join("\n")}function fetchAttributeLocations(gl,program){for(var attributes={},n=gl.getProgramParameter(program,35721),i=0;i<n;i++){var info,name=gl.getActiveAttrib(program,i).name;attributes[name]=gl.getAttribLocation(program,name)}return attributes}function filterEmptyLine(string){return""!==string}function replaceLightNums(string,parameters){return string.replace(/NUM_DIR_LIGHTS/g,parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g,parameters.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g,parameters.numHemiLights)}function replaceClippingPlaneNums(string,parameters){return string.replace(/NUM_CLIPPING_PLANES/g,parameters.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,parameters.numClippingPlanes-parameters.numClipIntersection)}function parseIncludes(string){var pattern=/^[ \t]*#include +<([\w\d./]+)>/gm;function replace(match,include){var replace=ShaderChunk[include];if(void 0===replace)throw new Error("Can not resolve #include <"+include+">");return parseIncludes(replace)}return string.replace(pattern,replace)}function unrollLoops(string){var pattern=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g;function replace(match,start,end,snippet){for(var unroll="",i=parseInt(start);i<parseInt(end);i++)unroll+=snippet.replace(/\[ i \]/g,"[ "+i+" ]");return unroll}return string.replace(pattern,replace)}function WebGLProgram(renderer,extensions,code,material,shader,parameters,capabilities){var gl=renderer.context,defines=material.defines,vertexShader=sh
vendor: 9,750 bytes, line 1
1ader.vertexShader,fragmentShader=shader.fragmentShader,shadowMapTypeDefine="SHADOWMAP_TYPE_BASIC";1===parameters.shadowMapType?shadowMapTypeDefine="SHADOWMAP_TYPE_PCF":2===parameters.shadowMapType&&(shadowMapTypeDefine="SHADOWMAP_TYPE_PCF_SOFT");var envMapTypeDefine="ENVMAP_TYPE_CUBE",envMapModeDefine="ENVMAP_MODE_REFLECTION",envMapBlendingDefine="ENVMAP_BLENDING_MULTIPLY";if(parameters.envMap){switch(material.envMap.mapping){case 301:case 302:envMapTypeDefine="ENVMAP_TYPE_CUBE";break;case 306:case 307:envMapTypeDefine="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:envMapTypeDefine="ENVMAP_TYPE_EQUIREC";break;case 305:envMapTypeDefine="ENVMAP_TYPE_SPHERE"}switch(material.envMap.mapping){case 302:case 304:envMapModeDefine="ENVMAP_MODE_REFRACTION"}switch(material.combine){case 0:envMapBlendingDefine="ENVMAP_BLENDING_MULTIPLY";break;case 1:envMapBlendingDefine="ENVMAP_BLENDING_MIX";break;case 2:envMapBlendingDefine="ENVMAP_BLENDING_ADD"}}var gammaFactorDefine=renderer.gammaFactor>0?renderer.gammaFactor:1,customExtensions=capabilities.isWebGL2?"":generateExtensions(material.extensions,parameters,extensions),customDefines=generateDefines(defines),program=gl.createProgram(),prefixVertex,prefixFragment;if(material.isRawShaderMaterial?((prefixVertex=[customDefines].filter(filterEmptyLine).join("\n")).length>0&&(prefixVertex+="\n"),(prefixFragment=[customExtensions,customDefines].filter(filterEmptyLine).join("\n")).length>0&&(prefixFragment+="\n")):(prefixVertex=["precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+shader.name,customDefines,parameters.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+gammaFactorDefine,"#define MAX_BONES "+parameters.maxBones,parameters.useFog&¶meters.fog?"#define USE_FOG":"",parameters.useFog&¶meters.fogExp?"#define FOG_EXP2":"",parameters.map?"#define USE_MAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.normalMap&¶meters.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",parameters.displacementMap&¶meters.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.roughnessMap?"#define USE_ROUGHNESSMAP":"",parameters.metalnessMap?"#define USE_METALNESSMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.skinning?"#define USE_SKINNING":"",parameters.useVertexTexture?"#define BONE_TEXTURE":"",parameters.morphTargets?"#define USE_MORPHTARGETS":"",parameters.morphNormals&&!1===parameters.flatShading?"#define USE_MORPHNORMALS":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"",parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.sizeAttenuation?"#define USE_SIZEATTENUATION":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&(capabilities.isWebGL2||extensions.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(filterEmptyLine).join("\n"),prefixFragment=[customExtensions,"precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+shader.name,customDefines,parameters.alphaTest?"#define ALPHATEST "+parameters.alphaTest+(parameters.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+gammaFactorDefine,parameters.useFog&¶meters.fog?"#define USE_FOG":"",parameters.useFog&¶meters.fogExp?"#define FOG_EXP2":"",parameters.map?"#define USE_MAP":"",parameters.matcap?"#define USE_MATCAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapTypeDefine:"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.envMap?"#define "+envMapBlendingDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.normalMap&¶meters.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.roughnessMap?"#define USE_ROUGHNESSMAP":"",parameters.metalnessMap?"#define USE_METALNESSMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.gradientMap?"#define USE_GRADIENTMAP":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"",parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",parameters.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&(capabilities.isWebGL2||extensions.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"",parameters.envMap&&(capabilities.isWebGL2||extensions.get("EXT_shader_texture_lod"))?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",0!==parameters.toneMapping?"#define TONE_MAPPING":"",0!==parameters.toneMapping?ShaderChunk.tonemapping_pars_fragment:"",0!==parameters.toneMapping?getToneMappingFunction("toneMapping",parameters.toneMapping):"",parameters.dithering?"#define DITHERING":"",parameters.outputEncoding||parameters.mapEncoding||parameters.matcapEncoding||parameters.envMapEncoding||parameters.emissiveMapEncoding?ShaderChunk.encodings_pars_fragment:"",parameters.mapEncoding?getTexelDecodingFunction("mapTexelToLinear",parameters.mapEncoding):"",parameters.matcapEncoding?getTexelDecodingFunction("matcapTexelToLinear",parameters.matcapEncoding):"",parameters.envMapEncoding?getTexelDecodingFunction("envMapTexelToLinear",parameters.envMapEncoding):"",parameters.emissiveMapEncoding?getTexelDecodingFunction("emissiveMapTexelToLinear",parameters.emissiveMapEncoding):"",parameters.outputEncoding?getTexelEncodingFunction("linearToOutputTexel",parameters.outputEncoding):"",parameters.depthPacking?"#define DEPTH_PACKING "+material.depthPacking:"","\n"].filter(filterEmptyLine).join("\n")),vertexShader=replaceClippingPlaneNums(vertexShader=replaceLightNums(vertexShader=parseIncludes(vertexShader),parameters),parameters),fragmentShader=replaceClippingPlaneNums(fragmentShader=replaceLightNums(fragmentShader=parseIncludes(fragmentShader),parameters),parameters),vertexShader=unrollLoops(vertexShader),fragmentShader=unrollLoops(fragmentShader),capabilities.isWebGL2&&!material.isRawShaderMaterial){var isGLSL3ShaderMaterial=!1,versionRegex=/^\s*#version\s+300\s+es\s*\n/;material.isShaderMaterial&&null!==vertexShader.match(versionRegex)&&null!==fragmentShader.match(versionRegex)&&(isGLSL3ShaderMaterial=!0,vertexShader=vertexShader.replace(versionRegex,""),fragmentShader=fragmentShader.replace(versionRegex,"")),prefixVertex=["#version 300 es\n","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+prefixVertex,prefixFragment=["#version 300 es\n","#define varying in",isGLSL3ShaderMaterial?"":"out highp vec4 pc_fragColor;",isGLSL3ShaderMaterial?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+prefixFragment}var vertexGlsl,fragmentGlsl=prefixFragment+fragmentShader,glVertexShader=WebGLShader(gl,35633,prefixVertex+vertexShader),glFragmentShader=WebGLShader(gl,35632,fragmentGlsl);gl.attachShader(program,glVertexShader),gl.attachShader(program,glFragmentShader),void 0!==material.index0AttributeName?gl.bindAttribLocation(program,0,material.index0AttributeName):!0===parameters.morphTargets&&gl.bindAttribLocation(program,0,"position"),gl.linkProgram(program);var programLog=gl.getProgramInfoLog(program).trim(),vertexLog=gl.getShaderInfoLog(glVertexShader).trim(),fragmentLog=gl.getShaderInfoLog(glFragmentShader).trim(),runnable=!0,haveDiagnostics=!0,cachedUniforms,cachedAttributes;return!1===gl.getProgramParameter(program,35714)?(runnable=!1,console.error("THREE.WebGLProgram: shader error: ",gl.getError(),"35
1715",gl.getProgramParameter(program,35715),"gl.getProgramInfoLog",programLog,vertexLog,fragmentLog)):""!==programLog?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",programLog):""!==vertexLog&&""!==fragmentLog||(haveDiagnostics=!1),haveDiagnostics&&(this.diagnostics={runnable:runnable,material:material,programLog:programLog,vertexShader:{log:vertexLog,prefix:prefixVertex},fragmentShader:{log:fragmentLog,prefix:prefixFragment}}),gl.deleteShader(glVertexShader),gl.deleteShader(glFragmentShader),this.getUniforms=function(){return void 0===cachedUniforms&&(cachedUniforms=new WebGLUniforms(gl,program,renderer)),cachedUniforms},this.getAttributes=function(){return void 0===cachedAttributes&&(cachedAttributes=fetchAttributeLocations(gl,program)),cachedAttributes},this.destroy=function(){gl.deleteProgram(program),this.program=void 0},Object.defineProperties(this,{uniforms:{get:function(){return console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms()."),this.getUniforms()}},attributes:{get:function(){return console.warn("THREE.WebGLProgram: .attributes is now .getAttributes()."),this.getAttributes()}}}),this.name=shader.name,this.id=programIdCount++,this.code=code,this.usedTimes=1,this.program=program,this.vertexShader=glVertexShader,this.fragmentShader=glFragmentShader,this}function WebGLPrograms(renderer,extensions,capabilities){var programs=[],shaderIDs={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"},parameterNames=["precision","supportsVertexTextures","map","mapEncoding","matcap","matcapEncoding","envMap","envMapMode","envMapEncoding","lightMap","aoMap","emissiveMap","emissiveMapEncoding","bumpMap","normalMap","objectSpaceNormalMap","displacementMap","specularMap","roughnessMap","metalnessMap","gradientMap","alphaMap","combine","vertexColors","fog","useFog","fogExp","flatShading","sizeAttenuation","logarithmicDepthBuffer","skinning","maxBones","useVertexTexture","morphTargets","morphNormals","maxMorphTargets","maxMorphNormals","premultipliedAlpha","numDirLights","numPointLights","numSpotLights","numHemiLights","numRectAreaLights","shadowMapEnabled","shadowMapType","toneMapping","physicallyCorrectLights","alphaTest","doubleSided","flipSided","numClippingPlanes","numClipIntersection","depthPacking","dithering"];function allocateBones(object){var skeleton,bones=object.skeleton.bones;if(capabilities.floatVertexTextures)return 1024;var nVertexUniforms=capabilities.maxVertexUniforms,nVertexMatrices=Math.floor((nVertexUniforms-20)/4),maxBones=Math.min(nVertexMatrices,bones.length);return maxBones<bones.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+bones.length+" bones. This GPU supports "+maxBones+"."),0):maxBones}function getTextureEncodingFromMap(map,gammaOverrideLinear){var encoding;return map?map.isTexture?encoding=map.encoding:map.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),encoding=map.texture.encoding):encoding=3e3,3e3===encoding&&gammaOverrideLinear&&(encoding=3007),encoding}this.getParameters=function(material,lights,shadows,fog,nClipPlanes,nClipIntersection,object){var shaderID=shaderIDs[material.type],maxBones=object.isSkinnedMesh?allocateBones(object):0,precision=capabilities.precision;null!==material.precision&&(precision=capabilities.getMaxPrecision(material.precision))!==material.precision&&console.warn("THREE.WebGLProgram.getParameters:",material.precision,"not supported, using",precision,"instead.");var currentRenderTarget=renderer.getRenderTarget(),parameters;return{shaderID:shaderID,precision:precision,supportsVertexTextures:capabilities.vertexTextures,outputEncoding:getTextureEncodingFromMap(currentRenderTarget?currentRenderTarget.texture:null,renderer.gammaOutput),map:!!material.map,mapEncoding:getTextureEncodingFromMap(material.map,renderer.gammaInput),matcap:!!material.matcap,matc
vendor: 2,646 bytes, line 1
1apEncoding:getTextureEncodingFromMap(material.matcap,renderer.gammaInput),envMap:!!material.envMap,envMapMode:material.envMap&&material.envMap.mapping,envMapEncoding:getTextureEncodingFromMap(material.envMap,renderer.gammaInput),envMapCubeUV:!!material.envMap&&(306===material.envMap.mapping||307===material.envMap.mapping),lightMap:!!material.lightMap,aoMap:!!material.aoMap,emissiveMap:!!material.emissiveMap,emissiveMapEncoding:getTextureEncodingFromMap(material.emissiveMap,renderer.gammaInput),bumpMap:!!material.bumpMap,normalMap:!!material.normalMap,objectSpaceNormalMap:1===material.normalMapType,displacementMap:!!material.displacementMap,roughnessMap:!!material.roughnessMap,metalnessMap:!!material.metalnessMap,specularMap:!!material.specularMap,alphaMap:!!material.alphaMap,gradientMap:!!material.gradientMap,combine:material.combine,vertexColors:material.vertexColors,fog:!!fog,useFog:material.fog,fogExp:fog&&fog.isFogExp2,flatShading:material.flatShading,sizeAttenuation:material.sizeAttenuation,logarithmicDepthBuffer:capabilities.logarithmicDepthBuffer,skinning:material.skinning&&maxBones>0,maxBones:maxBones,useVertexTexture:capabilities.floatVertexTextures,morphTargets:material.morphTargets,morphNormals:material.morphNormals,maxMorphTargets:renderer.maxMorphTargets,maxMorphNormals:renderer.maxMorphNormals,numDirLights:lights.directional.length,numPointLights:lights.point.length,numSpotLights:lights.spot.length,numRectAreaLights:lights.rectArea.length,numHemiLights:lights.hemi.length,numClippingPlanes:nClipPlanes,numClipIntersection:nClipIntersection,dithering:material.dithering,shadowMapEnabled:renderer.shadowMap.enabled&&object.receiveShadow&&shadows.length>0,shadowMapType:renderer.shadowMap.type,toneMapping:renderer.toneMapping,physicallyCorrectLights:renderer.physicallyCorrectLights,premultipliedAlpha:material.premultipliedAlpha,alphaTest:material.alphaTest,doubleSided:2===material.side,flipSided:1===material.side,depthPacking:void 0!==material.depthPacking&&material.depthPacking}},this.getProgramCode=function(material,parameters){var array=[];if(parameters.shaderID?array.push(parameters.shaderID):(array.push(material.fragmentShader),array.push(material.vertexShader)),void 0!==material.defines)for(var name in material.defines)array.push(name),array.push(material.defines[name]);for(var i=0;i<parameterNames.length;i++)array.push(parameters[parameterNames[i]]);return array.push(material.onBeforeCompile.toString()),array.push(renderer.gammaOutput),array.push(renderer.gammaFactor),array.join()},this.acquireProgram=function(material,shader,parameters,code){for(var program,p=0,pl=programs.length;p<pl;
1p++){var programInfo=programs[p];if(programInfo.code===code){++(program=programInfo).usedTimes;break}}return void 0===program&&(program=new WebGLProgram(renderer,extensions,code,material,shader,parameters,capabilities),programs.push(program)),program},this.releaseProgram=function(program){if(0==--program.usedTimes){var i=programs.indexOf(program);programs[i]=programs[programs.length-1],programs.pop(),program.destroy()}},this.programs=programs}function WebGLProperties(){var properties=new WeakMap;function get(object){var map=properties.get(object);return void 0===map&&(map={},properties.set(object,map)),map}function remove(object){properties.delete(object)}function update(object,key,value){properties.get(object)[key]=value}function dispose(){properties=new WeakMap}return{get:get,remove:remove,update:update,dispose:dispose}}function painterSortStable(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.program&&b.program&&a.program!==b.program?a.program.id-b.program.id:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function reversePainterSortStable(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function WebGLRenderList(){var renderItems=[],renderItemsIndex=0,opaque=[],transparent=[];function init(){renderItemsIndex=0,opaque.length=0,transparent.length=0}function getNextRenderItem(object,geometry,material,z,group){var renderItem=renderItems[renderItemsIndex];return void 0===renderItem?(renderItem={id:object.id,object:object,geometry:geometry,material:material,program:material.program,renderOrder:object.renderOrder,z:z,group:group},renderItems[renderItemsIndex]=renderItem):(renderItem.id=object.id,renderItem.object=object,renderItem.geometry=geometry,renderItem.material=material,renderItem.program=material.program,renderItem.renderOrder=object.renderOrder,renderItem.z=z,renderItem.group=group),renderItemsIndex++,renderItem}function push(object,geometry,material,z,group){var renderItem=getNextRenderItem(object,geometry,material,z,group);(!0===material.transparent?transparent:opaque).push(renderItem)}function unshift(object,geometry,material,z,group){var renderItem=getNextRenderItem(object,geometry,material,z,group);(!0===material.transparent?transparent:opaque).unshift(renderItem)}function sort(){opaque.length>1&&opaque.sort(painterSortStable),transparent.length>1&&transparent.sort(reversePainterSortStable)}return{opaque:opaque,transparent:transparent,init:init,push:push,unshift:unshift,sort:sort}}function WebGLRenderLists(){var lists={};function get(scene,camera){var cameras=lists[scene.id],list;return void 0===cameras?(list=new WebGLRenderList,lists[scene.id]={},lists[scene.id][camera.id]=list):void 0===(list=cameras[camera.id])&&(list=new WebGLRenderList,cameras[camera.id]=list),list}function dispose(){lists={}}return{get:get,dispose:dispose}}function UniformsCache(){var lights={};return{get:function(light){if(void 0!==lights[light.id])return lights[light.id];var uniforms;switch(light.type){case"DirectionalLight":uniforms={direction:new Vector3,color:new Color,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"SpotLight":uniforms={position:new Vector3,direction:new Vector3,color:new Color,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"PointLight":uniforms={position:new Vector3,color:new Color,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2,shadowCameraNear:1,shadowCameraFar:1e3};break;case"HemisphereLight":uniforms={direction:new Vector3,skyColor:new Color,groundColor:new Color};break;case"RectAreaLight":uniforms={color:new Color,position:new Vector3,halfWidth:new Vector3,halfHeight:new Vector3}}return lights[light.id]=uniforms,uniforms}}}var count=0;function WebGLLights(){var cache=new UniformsCache,state={id:count++,hash:{stateID:-1,directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,shadowsLength:-1},ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},vector3=new Vector3,matrix4=new Matrix4,matrix42=new Matrix4;function setup(lights,shadows,camera){for(var r=0,g=0,b=0,directionalLength=0,pointLength=0,spotLength=0,rectAreaLength=0,hemiLength=0,viewMatrix=camera.matrixWorldInverse,i=0,l=lights.length;i<l;i++){var light=lights[i],color=light.color,intensity=light.intensity,distance=light.distance,shadowMap=light.shadow&&light.shadow.map?light.shadow.map.texture:null;if(light.isAmbientLight)r+=color.r*intensity,g+=color.g*intensity,b+=color.b*intensity;else if(light.isDirectionalLight){var uniforms;if((uniforms=cache.get(light)).color.copy(light.color).multiplyScalar(light.intensity),uniforms.direction.setFromMatrixPosition(light.matrixWorld),vector3.setFromMatrixPosition(light.target.matrixWorld),uniforms.direction.sub(vector3),uniforms.direction.transformDirection(viewMatrix),uniforms.shadow=light.castShadow,light.castShadow){var shadow=light.shadow;uniforms.shadowBias=shadow.bias,uniforms.shadowRadius=shadow.radius,uniforms.shadowMapSize=shadow.mapSize}
1state.directionalShadowMap[directionalLength]=shadowMap,state.directionalShadowMatrix[directionalLength]=light.shadow.matrix,state.directional[directionalLength]=uniforms,directionalLength++}else if(light.isSpotLight){var uniforms;if((uniforms=cache.get(light)).position.setFromMatrixPosition(light.matrixWorld),uniforms.position.applyMatrix4(viewMatrix),uniforms.color.copy(color).multiplyScalar(intensity),uniforms.distance=distance,uniforms.direction.setFromMatrixPosition(light.matrixWorld),vector3.setFromMatrixPosition(light.target.matrixWorld),uniforms.direction.sub(vector3),uniforms.direction.transformDirection(viewMatrix),uniforms.coneCos=Math.cos(light.angle),uniforms.penumbraCos=Math.cos(light.angle*(1-light.penumbra)),uniforms.decay=light.decay,uniforms.shadow=light.castShadow,light.castShadow){var shadow=light.shadow;uniforms.shadowBias=shadow.bias,uniforms.shadowRadius=shadow.radius,uniforms.shadowMapSize=shadow.mapSize}state.spotShadowMap[spotLength]=shadowMap,state.spotShadowMatrix[spotLength]=light.shadow.matrix,state.spot[spotLength]=uniforms,spotLength++}else if(light.isRectAreaLight){var uniforms;(uniforms=cache.get(light)).color.copy(color).multiplyScalar(intensity),uniforms.position.setFromMatrixPosition(light.matrixWorld),uniforms.position.applyMatrix4(viewMatrix),matrix42.identity(),matrix4.copy(light.matrixWorld),matrix4.premultiply(viewMatrix),matrix42.extractRotation(matrix4),uniforms.halfWidth.set(.5*light.width,0,0),uniforms.halfHeight.set(0,.5*light.height,0),uniforms.halfWidth.applyMatrix4(matrix42),uniforms.halfHeight.applyMatrix4(matrix42),state.rectArea[rectAreaLength]=uniforms,rectAreaLength++}else if(light.isPointLight){var uniforms;if((uniforms=cache.get(light)).position.setFromMatrixPosition(light.matrixWorld),uniforms.position.applyMatrix4(viewMatrix),uniforms.color.copy(light.color).multiplyScalar(light.intensity),uniforms.distance=light.distance,uniforms.decay=light.decay,uniforms.shadow=light.castShadow,light.castShadow){var shadow=light.shadow;uniforms.shadowBias=shadow.bias,uniforms.shadowRadius=shadow.radius,uniforms.shadowMapSize=shadow.mapSize,uniforms.shadowCameraNear=shadow.camera.near,uniforms.shadowCameraFar=shadow.camera.far}state.pointShadowMap[pointLength]=shadowMap,state.pointShadowMatrix[pointLength]=light.shadow.matrix,state.point[pointLength]=uniforms,pointLength++}else if(light.isHemisphereLight){var uniforms;(uniforms=cache.get(light)).direction.setFromMatrixPosition(light.matrixWorld),uniforms.direction.transformDirection(viewMatrix),uniforms.direction.normalize(),uniforms.skyColor.copy(light.color).multiplyScalar(intensity),uniforms.groundColor.copy(light.groundColor).multiplyScalar(intensity),state.hemi[hemiLength]=uniforms,hemiLength++}}state.ambient[0]=r,state.ambient[1]=g,state.ambient[2]=b,state.directional.length=directionalLength,state.spot.length=spotLength,state.rectArea.length=rectAreaLength,state.point.length=pointLength,state.hemi.length=hemiLength,state.hash.stateID=state.id,state.hash.directionalLength=directionalLength,state.hash.pointLength=pointLength,state.hash.spotLength=spotLength,state.hash.rectAreaLength=rectAreaLength,state.hash.hemiLength=hemiLength,state.hash.shadowsLength=shadows.length}return{setup:setup,state:state}}function WebGLRenderState(){var lights=new WebGLLights,lightsArray=[],shadowsArray=[],state;function init(){lightsArray.length=0,shadowsArray.length=0}function pushLight(light){lightsArray.push(light)}function pushShadow(shadowLight){shadowsArray.push(shadowLight)}function setupLights(camera){lights.setup(lightsArray,shadowsArray,camera)}return{init:init,state:{lightsArray:lightsArray,shadowsArray:shadowsArray,lights:lights},setupLights:setupLights,pushLight:pushLight,pushShadow:pushShadow}}function WebGLRenderStates(){var renderStates={};function get(scene,camera){var renderState;return void 0===renderStates[scene.id]?(renderState=new WebGLRenderState,renderStates[scene.id]={},renderStates[scene.id][camera.id]=renderState):void 0===renderStates[scene.id][camera.id]?(renderState=new WebGLRenderState,renderStates[scene.id][camera.id]=renderState):renderState=renderStates[scene.id][camera.id],renderState}
vendor: 8,770 bytes, line 1
1function dispose(){renderStates={}}return{get:get,dispose:dispose}}function MeshDepthMaterial(parameters){Material.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.setValues(parameters)}function MeshDistanceMaterial(parameters){Material.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new Vector3,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.lights=!1,this.setValues(parameters)}function WebGLShadowMap(_renderer,_objects,maxTextureSize){for(var _frustum=new Frustum,_projScreenMatrix=new Matrix4,_shadowMapSize=new Vector2,_maxShadowMapSize=new Vector2(maxTextureSize,maxTextureSize),_lookTarget=new Vector3,_lightPositionWorld=new Vector3,_MorphingFlag=1,_SkinningFlag=2,_NumberOfMaterialVariants=4,_depthMaterials=new Array(4),_distanceMaterials=new Array(4),_materialCache={},shadowSide={0:1,1:0,2:2},cubeDirections=[new Vector3(1,0,0),new Vector3(-1,0,0),new Vector3(0,0,1),new Vector3(0,0,-1),new Vector3(0,1,0),new Vector3(0,-1,0)],cubeUps=[new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,0,1),new Vector3(0,0,-1)],cube2DViewPorts=[new Vector4,new Vector4,new Vector4,new Vector4,new Vector4,new Vector4],i=0;4!==i;++i){var useMorphing=0!=(1&i),useSkinning=0!=(2&i),depthMaterial=new MeshDepthMaterial({depthPacking:3201,morphTargets:useMorphing,skinning:useSkinning});_depthMaterials[i]=depthMaterial;var distanceMaterial=new MeshDistanceMaterial({morphTargets:useMorphing,skinning:useSkinning});_distanceMaterials[i]=distanceMaterial}var scope=this;function getDepthMaterial(object,material,isPointLight,lightPositionWorld,shadowCameraNear,shadowCameraFar){var geometry=object.geometry,result=null,materialVariants=_depthMaterials,customMaterial=object.customDepthMaterial;if(isPointLight&&(materialVariants=_distanceMaterials,customMaterial=object.customDistanceMaterial),customMaterial)result=customMaterial;else{var useMorphing=!1;material.morphTargets&&(geometry&&geometry.isBufferGeometry?useMorphing=geometry.morphAttributes&&geometry.morphAttributes.position&&geometry.morphAttributes.position.length>0:geometry&&geometry.isGeometry&&(useMorphing=geometry.morphTargets&&geometry.morphTargets.length>0)),object.isSkinnedMesh&&!1===material.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",object);var useSkinning,variantIndex=0;useMorphing&&(variantIndex|=1),object.isSkinnedMesh&&material.skinning&&(variantIndex|=2),result=materialVariants[variantIndex]}if(_renderer.localClippingEnabled&&!0===material.clipShadows&&0!==material.clippingPlanes.length){var keyA=result.uuid,keyB=material.uuid,materialsForVariant=_materialCache[keyA];void 0===materialsForVariant&&(materialsForVariant={},_materialCache[keyA]=materialsForVariant);var cachedMaterial=materialsForVariant[keyB];void 0===cachedMaterial&&(cachedMaterial=result.clone(),materialsForVariant[keyB]=cachedMaterial),result=cachedMaterial}return result.visible=material.visible,result.wireframe=material.wireframe,result.side=null!=material.shadowSide?material.shadowSide:shadowSide[material.side],result.clipShadows=material.clipShadows,result.clippingPlanes=material.clippingPlanes,result.clipIntersection=material.clipIntersection,result.wireframeLinewidth=material.wireframeLinewidth,result.linewidth=material.linewidth,isPointLight&&result.isMeshDistanceMaterial&&(result.referencePosition.copy(lightPositionWorld),result.nearDistance=shadowCameraNear,result.farDistance=shadowCameraFar),result}function renderObject(object,camera,shadowCamera,isPointLight){if(!1!==object.visible){var visible;if(object.layers.test(camera.layers)&&(object.isMesh||object.isLine||object.isPoints)&&object.castShadow&&(!object.frustumCulled||_frustum.intersectsObject(object))){object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse,object.matrixWorld);var geometry=_objects.update(object),material=object.material;if(Array.isArray(material))for(var groups=geometry.groups,k=0,kl=groups.length;k<kl;k++){var group=groups[k],groupMaterial=material[group.materialIndex];if(groupMaterial&&groupMaterial.visible){var depthMaterial=getDepthMaterial(object,groupMaterial,isPointLight,_lightPositionWorld,shadowCamera.near,shadowCamera.far);_renderer.renderBufferDirect(shadowCamera,null,geometry,depthMaterial,object,group)}}else if(material.visible){var depthMaterial=getDepthMaterial(object,material,isPointLight,_lightPositionWorld,shadowCamera.near,shadowCamera.far);_renderer.renderBufferDirect(shadowCamera,null,geometry,depthMaterial,object,null)}}for(var children=object.children,i=0,l=children.length;i<l;i++)renderObject(children[i],camera,shadowCamera,isPointLight)}}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(lights,scene,camera){if(!1!==scope.enabled&&(!1!==scope.autoUpdate||!1!==scope.needsUpdate)&&0!==lights.length){var _gl=_renderer.context,_state=_renderer.state,faceCount;_state.disable(3042),_state.buffers.color.setClear(1,1,1,1),_state.buffers.depth.setTest(!0),_state.setScissorTest(!1);for(var i=0,il=lights.length;i<il;i++){var light=lights[i],shadow=light.shadow,isPointLight=light&&light.isPointLight;if(void 0!==shadow){var shadowCamera=shadow.camera;if(_shadowMapSize.copy(shadow.mapSize),_shadowMapSize.min(_maxShadowMapSize),isPointLight){var vpWidth=_shadowMapSize.x,vpHeight=_shadowMapSize.y;cube2DViewPorts[0].set(2*vpWidth,vpHeight,vpWidth,vpHeight),cube2DViewPorts[1].set(0,vpHeight,vpWidth,vpHeight),cube2DViewPorts[2].set(3*vpWidth,vpHeight,vpWidth,vpHeight),cube2DViewPorts[3].set(vpWidth,vpHeight,vpWidth,vpHeight),cube2DViewPorts[4].set(3*vpWidth,0,vpWidth,vpHeight),cube2DViewPorts[5].set(vpWidth,0,vpWidth,vpHeight),_shadowMapSize.x*=4,_shadowMapSize.y*=2}if(null===shadow.map){var pars={minFilter:1003,magFilter:1003,format:1023};shadow.map=new WebGLRenderTarget(_shadowMapSize.x,_shadowMapSize.y,pars),shadow.map.texture.name=light.name+".shadowMap",shadowCamera.updateProjectionMatrix()}shadow.isSpotLightShadow&&shadow.update(light);var shadowMap=shadow.map,shadowMatrix=shadow.matrix;_lightPositionWorld.setFromMatrixPosition(light.matrixWorld),shadowCamera.position.copy(_lightPositionWorld),isPointLight?(faceCount=6,shadowMatrix.makeTranslation(-_lightPositionWorld.x,-_lightPositionWorld.y,-_lightPositionWorld.z)):(faceCount=1,_lookTarget.setFromMatrixPosition(light.target.matrixWorld),shadowCamera.lookAt(_lookTarget),shadowCamera.updateMatrixWorld(),shadowMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),shadowMatrix.multiply(shadowCamera.projectionMatrix),shadowMatrix.multiply(shadowCamera.matrixWorldInverse)),_renderer.setRenderTarget(shadowMap),_renderer.clear();for(var face=0;face<faceCount;face++){if(isPointLight){_lookTarget.copy(shadowCamera.position),_lookTarget.add(cubeDirections[face]),shadowCamera.up.copy(cubeUps[face]),shadowCamera.lookAt(_lookTarget),shadowCamera.updateMatrixWorld();var vpDimensions=cube2DViewPorts[face];_state.viewport(vpDimensions)}_projScreenMatrix.multiplyMatrices(shadowCamera.projectionMatrix,shadowCamera.matrixWorldInverse),_frustum.setFromMatrix(_projScreenMatrix),renderObject(scene,camera,shadowCamera,isPointLight)}}else console.warn("THREE.WebGLShadowMap:",light,"has no shadow.")}scope.needsUpdate=!1}}}function WebGLState(gl,extensions,utils,capabilities){function ColorBuffer(){var locked=!1,color=new Vector4,currentColorMask=null,currentColorClear=new Vector4(0,0,0,0);return{setMask:function(colorMask){currentColorMask===colorMask||locked||(gl.colorMask(colorMask,colorMask,colorMask,colorMask),currentColorMask=colorMask)},setLocked:function(lock){locked=lock},setClear:function(r,g,b,a,premultipliedAlpha){!0===premultipliedAlpha&&(r*=a,g*=a,b*=a),color.set(r,g,b,a),!1===currentColorClear.equals(color)&&(gl.clearColor(r,g,b,a),currentColorClear.copy(color))},reset:function(){locked=!1,currentColorMask=null,currentColorClear.set(-1,0,0,0)}}}function DepthBuffer(){var locked=!1,currentDepthMask=null,currentDepthFunc=null,currentDepthClear=null;return{setTest:function(depthTest){depthTest?enable(2929):disable(2929)},setMask:function(depthMask){currentDepthMask===depthMask||locked||(gl.depthMask(depthMask),currentDepthMask=depthMask)},setFunc:function(depthFunc){if(currentDepthFunc!==depthFunc){if(depthFunc)switch(depthFunc){case 0:gl.depthFunc(512);break;case 1:gl.depthFunc(519);break;case 2:gl.depthFunc(513);break;
1case 3:gl.depthFunc(515);break;case 4:gl.depthFunc(514);break;case 5:gl.depthFunc(518);break;case 6:gl.depthFunc(516);break;case 7:gl.depthFunc(517);break;default:gl.depthFunc(515)}else gl.depthFunc(515);currentDepthFunc=depthFunc}},setLocked:function(lock){locked=lock},setClear:function(depth){currentDepthClear!==depth&&(gl.clearDepth(depth),currentDepthClear=depth)},reset:function(){locked=!1,currentDepthMask=null,currentDepthFunc=null,currentDepthClear=null}}}function StencilBuffer(){var locked=!1,currentStencilMask=null,currentStencilFunc=null,currentStencilRef=null,currentStencilFuncMask=null,currentStencilFail=null,currentStencilZFail=null,currentStencilZPass=null,currentStencilClear=null;return{setTest:function(stencilTest){stencilTest?enable(2960):disable(2960)},setMask:function(stencilMask){currentStencilMask===stencilMask||locked||(gl.stencilMask(stencilMask),currentStencilMask=stencilMask)},setFunc:function(stencilFunc,stencilRef,stencilMask){currentStencilFunc===stencilFunc&¤tStencilRef===stencilRef&¤tStencilFuncMask===stencilMask||(gl.stencilFunc(stencilFunc,stencilRef,stencilMask),currentStencilFunc=stencilFunc,currentStencilRef=stencilRef,currentStencilFuncMask=stencilMask)},setOp:function(stencilFail,stencilZFail,stencilZPass){currentStencilFail===stencilFail&¤tStencilZFail===stencilZFail&¤tStencilZPass===stencilZPass||(gl.stencilOp(stencilFail,stencilZFail,stencilZPass),currentStencilFail=stencilFail,currentStencilZFail=stencilZFail,currentStencilZPass=stencilZPass)},setLocked:function(lock){locked=lock},setClear:function(stencil){currentStencilClear!==stencil&&(gl.clearStencil(stencil),currentStencilClear=stencil)},reset:function(){locked=!1,currentStencilMask=null,currentStencilFunc=null,currentStencilRef=null,currentStencilFuncMask=null,currentStencilFail=null,currentStencilZFail=null,currentStencilZPass=null,currentStencilClear=null}}}var colorBuffer=new ColorBuffer,depthBuffer=new DepthBuffer,stencilBuffer=new StencilBuffer,maxVertexAttributes=gl.getParameter(34921),newAttributes=new Uint8Array(maxVertexAttributes),enabledAttributes=new Uint8Array(maxVertexAttributes),attributeDivisors=new Uint8Array(maxVertexAttributes),enabledCapabilities={},compressedTextureFormats=null,currentProgram=null,currentBlendingEnabled=null,currentBlending=null,currentBlendEquation=null,currentBlendSrc=null,currentBlendDst=null,currentBlendEquationAlpha=null,currentBlendSrcAlpha=null,currentBlendDstAlpha=null,currentPremultipledAlpha=!1,currentFlipSided=null,currentCullFace=null,currentLineWidth=null,currentPolygonOffsetFactor=null,currentPolygonOffsetUnits=null,maxTextures=gl.getParameter(35661),lineWidthAvailable=!1,version=0,glVersion=gl.getParameter(7938);-1!==glVersion.indexOf("WebGL")?(version=parseFloat(/^WebGL\ ([0-9])/.exec(glVersion)[1]),lineWidthAvailable=version>=1):-1!==glVersion.indexOf("OpenGL ES")&&(version=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(glVersion)[1]),lineWidthAvailable=version>=2);var currentTextureSlot=null,currentBoundTextures={},currentScissor=new Vector4,currentViewport=new Vector4;function createTexture(type,target,count){var data=new Uint8Array(4),texture=gl.createTexture();gl.bindTexture(type,texture),gl.texParameteri(type,10241,9728),gl.texParameteri(type,10240,9728);for(var i=0;i<count;i++)gl.texImage2D(target+i,0,6408,1,1,0,6408,5121,data);return texture}var emptyTextures={};function initAttributes(){for(var i=0,l=newAttributes.length;i<l;i++)newAttributes[i]=0}function enableAttribute(attribute){enableAttributeAndDivisor(attribute,0)}function enableAttributeAndDivisor(attribute,meshPerAttribute){var extension;(newAttributes[attribute]=1,0===enabledAttributes[attribute]&&(gl.enableVertexAttribArray(attribute),enabledAttributes[attribute]=1),attributeDivisors[attribute]!==meshPerAttribute)&&((capabilities.isWebGL2?gl:extensions.get("ANGLE_instanced_arrays"))[capabilities.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](attribute,meshPerAttribute),attributeDivisors[attribute]=meshPerAttribute)}function disableUnusedAttributes(){for(var i=0,l=enabledAttributes.length;i!==l;++i)enabledAttributes[i]!==newAttributes[i]&&(gl.disableVertexAttribArray(i),enabledAttributes[i]=0)}function enable(id){!0!==enabledCapabilities[id]&&(gl.enable(id),enabledCapabilities[id]=!0)}function disable(id){!1!==enabledCapabilities[id]&&(gl.disable(id),enabledCapabilities[id]=!1)}function getCompressedTextureFormats(){if(null===compressedTextureFormats&&(compressedTextureFormats=[],extensions.get("WEBGL_compressed_texture_pvrtc")||extensions.get("WEBGL_compressed_texture_s3tc")||extensions.get("WEBGL_compressed_texture_etc1")||extensions.get("WEBGL_compressed_texture_astc")))for(var formats=gl.getParameter(34467),i=0;i<formats.length;i++)compressedTextureFormats.push(formats[i]);return compressedTextureFormats}function useProgram(program){return currentProgram!==program&&(gl.useProgram(program),currentProgram=program,!0)}function setBlending(blending,blendEquation,blendSrc,blendDst,blendEquationAlpha,blendSrcAlpha,blendDstAlpha,premultipliedAlpha){if(0!==blending){if(currentBlendingEnabled||(enable(3042),currentBlendingEnabled=!0),5===blending)blendEquationAlpha=blendEquationAlpha||blendEquation,blendSrcAlpha=blendSr
vendor: 5,625 bytes, line 1
1cAlpha||blendSrc,blendDstAlpha=blendDstAlpha||blendDst,blendEquation===currentBlendEquation&&blendEquationAlpha===currentBlendEquationAlpha||(gl.blendEquationSeparate(utils.convert(blendEquation),utils.convert(blendEquationAlpha)),currentBlendEquation=blendEquation,currentBlendEquationAlpha=blendEquationAlpha),blendSrc===currentBlendSrc&&blendDst===currentBlendDst&&blendSrcAlpha===currentBlendSrcAlpha&&blendDstAlpha===currentBlendDstAlpha||(gl.blendFuncSeparate(utils.convert(blendSrc),utils.convert(blendDst),utils.convert(blendSrcAlpha),utils.convert(blendDstAlpha)),currentBlendSrc=blendSrc,currentBlendDst=blendDst,currentBlendSrcAlpha=blendSrcAlpha,currentBlendDstAlpha=blendDstAlpha),currentBlending=blending,currentPremultipledAlpha=null;else if(blending!==currentBlending||premultipliedAlpha!==currentPremultipledAlpha){if(100===currentBlendEquation&&100===currentBlendEquationAlpha||(gl.blendEquation(32774),currentBlendEquation=100,currentBlendEquationAlpha=100),premultipliedAlpha)switch(blending){case 1:gl.blendFuncSeparate(1,771,1,771);break;case 2:gl.blendFunc(1,1);break;case 3:gl.blendFuncSeparate(0,0,769,771);break;case 4:gl.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",blending)}else switch(blending){case 1:gl.blendFuncSeparate(770,771,1,771);break;case 2:gl.blendFunc(770,1);break;case 3:gl.blendFunc(0,769);break;case 4:gl.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",blending)}currentBlendSrc=null,currentBlendDst=null,currentBlendSrcAlpha=null,currentBlendDstAlpha=null,currentBlending=blending,currentPremultipledAlpha=premultipliedAlpha}}else currentBlendingEnabled&&(disable(3042),currentBlendingEnabled=!1)}function setMaterial(material,frontFaceCW){2===material.side?disable(2884):enable(2884);var flipSided=1===material.side;frontFaceCW&&(flipSided=!flipSided),setFlipSided(flipSided),1===material.blending&&!1===material.transparent?setBlending(0):setBlending(material.blending,material.blendEquation,material.blendSrc,material.blendDst,material.blendEquationAlpha,material.blendSrcAlpha,material.blendDstAlpha,material.premultipliedAlpha),depthBuffer.setFunc(material.depthFunc),depthBuffer.setTest(material.depthTest),depthBuffer.setMask(material.depthWrite),colorBuffer.setMask(material.colorWrite),setPolygonOffset(material.polygonOffset,material.polygonOffsetFactor,material.polygonOffsetUnits)}function setFlipSided(flipSided){currentFlipSided!==flipSided&&(flipSided?gl.frontFace(2304):gl.frontFace(2305),currentFlipSided=flipSided)}function setCullFace(cullFace){0!==cullFace?(enable(2884),cullFace!==currentCullFace&&(1===cullFace?gl.cullFace(1029):2===cullFace?gl.cullFace(1028):gl.cullFace(1032))):disable(2884),currentCullFace=cullFace}function setLineWidth(width){width!==currentLineWidth&&(lineWidthAvailable&&gl.lineWidth(width),currentLineWidth=width)}function setPolygonOffset(polygonOffset,factor,units){polygonOffset?(enable(32823),currentPolygonOffsetFactor===factor&¤tPolygonOffsetUnits===units||(gl.polygonOffset(factor,units),currentPolygonOffsetFactor=factor,currentPolygonOffsetUnits=units)):disable(32823)}function setScissorTest(scissorTest){scissorTest?enable(3089):disable(3089)}function activeTexture(webglSlot){void 0===webglSlot&&(webglSlot=33984+maxTextures-1),currentTextureSlot!==webglSlot&&(gl.activeTexture(webglSlot),currentTextureSlot=webglSlot)}function bindTexture(webglType,webglTexture){null===currentTextureSlot&&activeTexture();var boundTexture=currentBoundTextures[currentTextureSlot];void 0===boundTexture&&(boundTexture={type:void 0,texture:void 0},currentBoundTextures[currentTextureSlot]=boundTexture),boundTexture.type===webglType&&boundTexture.texture===webglTexture||(gl.bindTexture(webglType,webglTexture||emptyTextures[webglType]),boundTexture.type=webglType,boundTexture.texture=webglTexture)}function compressedTexImage2D(){try{gl.compressedTexImage2D.apply(gl,arguments)}catch(error){console.error("THREE.WebGLState:",error)}}function texImage2D(){try{gl.texImage2D.apply(gl,arguments)}catch(error){console.error("THREE.WebGLState:",error)}}function texImage3D(){try{gl.texImage3D.apply(gl,arguments)}catch(error){console.error("THREE.WebGLState:",error)}}function scissor(scissor){!1===currentScissor.equals(scissor)&&(gl.scissor(scissor.x,scissor.y,scissor.z,scissor.w),currentScissor.copy(scissor))}function viewport(viewport){!1===currentViewport.equals(viewport)&&(gl.viewport(viewport.x,viewport.y,viewport.z,viewport.w),currentViewport.copy(viewport))}function reset(){for(var i=0;i<enabledAttributes.length;i++)1===enabledAttributes[i]&&(gl.disableVertexAttribArray(i),enabledAttributes[i]=0);enabledCapabilities={},compressedTextureFormats=null,currentTextureSlot=null,currentBoundTextures={},currentProgram=null,currentBlending=null,currentFlipSided=null,currentCullFace=null,colorBuffer.reset(),depthBuffer.reset(),stencilBuffer.reset()}return emptyTextures[3553]=createTexture(3553,3553,1),emptyTextures[34067]=createTexture(34067,34069,6),colorBuffer.setClear(0,0,0,1),depthBuffer.setClear(1),stencilBuffer.setClear(0),enable(2929),depthBuffer.setFunc(3),setFlipSided(!1),setCullFace(1),enable(2884),setBlending(0),{buffers:{color:colorBuffer,depth:depthBuffer,stencil:stencilBuffer},initAttributes:initAttributes,enableAttribute:enableAttribute,enableAttributeAndDivisor:enableAttributeAndDivisor,disableUnusedAttributes:disableUnusedAttributes,enable:enable,disable:disable,getCompressedTextureFormats:getCompressedTextureFormats,useProgram:useProgram,setBlending:setBlending,setMaterial:setMaterial,setFlipSided:setFl
1ipSided,setCullFace:setCullFace,setLineWidth:setLineWidth,setPolygonOffset:setPolygonOffset,setScissorTest:setScissorTest,activeTexture:activeTexture,bindTexture:bindTexture,compressedTexImage2D:compressedTexImage2D,texImage2D:texImage2D,texImage3D:texImage3D,scissor:scissor,viewport:viewport,reset:reset}}function WebGLTextures(_gl,extensions,state,properties,capabilities,utils,info){var _videoTextures={},_canvas;function clampToMaxSize(image,maxSize){if(image.width>maxSize||image.height>maxSize){if("data"in image)return void console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+image.width+"x"+image.height+").");var scale=maxSize/Math.max(image.width,image.height),canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),context;return canvas.width=Math.floor(image.width*scale),canvas.height=Math.floor(image.height*scale),canvas.getContext("2d").drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height),console.warn("THREE.WebGLRenderer: image is too big ("+image.width+"x"+image.height+"). Resized to "+canvas.width+"x"+canvas.height),canvas}return image}function isPowerOfTwo(image){return _Math.isPowerOfTwo(image.width)&&_Math.isPowerOfTwo(image.height)}function makePowerOfTwo(image){var context;return image instanceof HTMLImageElement||image instanceof HTMLCanvasElement||image instanceof ImageBitmap?(void 0===_canvas&&(_canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),_canvas.width=_Math.floorPowerOfTwo(image.width),_canvas.height=_Math.floorPowerOfTwo(image.height),_canvas.getContext("2d").drawImage(image,0,0,_canvas.width,_canvas.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+image.width+"x"+image.height+"). Resized to "+_canvas.width+"x"+_canvas.height),_canvas):image}function textureNeedsPowerOfTwo(texture){return!capabilities.isWebGL2&&(1001!==texture.wrapS||1001!==texture.wrapT||1003!==texture.minFilter&&1006!==texture.minFilter)}function textureNeedsGenerateMipmaps(texture,isPowerOfTwo){return texture.generateMipmaps&&isPowerOfTwo&&1003!==texture.minFilter&&1006!==texture.minFilter}function generateMipmap(target,texture,width,height){var textureProperties;_gl.generateMipmap(target),properties.get(texture).__maxMipLevel=Math.log(Math.max(width,height))*Math.LOG2E}function getInternalFormat(glFormat,glType){if(!capabilities.isWebGL2)return glFormat;if(6403===glFormat){if(5126===glType)return 33326;if(5131===glType)return 33325;if(5121===glType)return 33321}if(6407===glFormat){if(5126===glType)return 34837;if(5131===glType)return 34843;if(5121===glType)return 32849}if(6408===glFormat){if(5126===glType)return 34836;if(5131===glType)return 34842;if(5121===glType)return 32856}return glFormat}function filterFallback(f){return 1003===f||1004===f||1005===f?9728:9729}function onTextureDispose(event){var texture=event.target;texture.removeEventListener("dispose",onTextureDispose),deallocateTexture(texture),texture.isVideoTexture&&delete _videoTextures[texture.id],info.memory.textures--}function onRenderTargetDispose(event){var renderTarget=event.target;renderTarget.removeEventListener("dispose",onRenderTargetDispose),deallocateRenderTarget(renderTarget),info.memory.textures--}function deallocateTexture(texture){var textureProperties=properties.get(texture);if(texture.image&&textureProperties.__image__webglTextureCube)_gl.deleteTexture(textureProperties.__image__webglTextureCube);else{if(void 0===textureProperties.__webglInit)return;_gl.deleteTexture(textureProperties.__webglTexture)}properties.remove(texture)}function deallocateRenderTarget(renderTarget){var renderTargetProperties=properties.get(renderTarget),textureProperties=properties.get(renderTarget.texture);if(renderTarget){if(void 0!==textureProperties.__webglTexture&&_gl.deleteTexture(textureProperties.__webglTexture),renderTarget.depthTexture&&renderTarget.depthTexture.dispose(),renderTarget.isWebGLRenderTargetCube)for(var i=0;i<6;i++)_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]),renderTargetProperties.__webglDepthbuffer&&_gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i]);else _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer),renderTargetProperties.__webglDepthbuffer&&_gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer);properties.remove(renderTarget.texture),properties.remove(renderTarget)}}function setTexture2D(texture,slot){var textureProperties=properties.get(texture);if(texture.isVideoTexture&&updateVideoTexture(texture),texture.version>0&&textureProperties.__version!==texture.version){var image=texture.image;if(void 0===image)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==image.complete)return void uploadTexture(textureProperties,texture,slot);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}state.activeTexture(33984+slot),state.bindTexture(3553,textureProperties.__webglTexture)}function setTexture3D(texture,slot){var textureProperties=properties.get(texture);texture.version>0&&textureProperties.__version!==texture.version?uploadTexture(textureProperties,texture,slot):(state.activeTexture(33984+slot),state.bindTexture(32879,textureProperties.__webglTexture))}function setTextureCube(texture,slot){var textureProperties=properties.get(texture);if(6===texture.image.length)if(texture.version>0&&textureProperties.__version!==texture.version){textureProperties.__image__webglTextureCube||(texture.addEventListener("dispose",onTextureDispose),textureProperties.__image__webglTextureCube=_gl.createTexture(),info.memory.textures++),state.activeTexture(33984+slot),state.bindTexture(34067,textureProperties.__image__webglTextureCube),_gl.pixelStorei(37440,texture.flipY);for(var isCompressed=texture&&texture.isCompressedTexture,isDataTexture=texture.image[0]&&texture.image[0].isDataTexture,cubeImage=[],i=0;i<6;i++)cubeImage[i]=isCompressed||isDataTexture?isDataTexture?texture.image[i].image:texture.image[i]:clampToMaxSize(texture.image[i],capabilities.maxCubemapSize);var image=cubeImage[0],isPowerOfTwoImage=isPowerOfTwo(image),glFormat=utils.convert(texture.format),glType=utils.convert(texture.type),glInternalFormat=getInternalFormat(glFormat,glType);setTextureParameters(34067,texture,isPowerOfTwoImage);for(var i=0;i<6;i++)if(isCompressed)for(var mipmap,mipmaps=cubeImage[i].mipmaps,j=0,jl=mipmaps.length;j<jl;j++)mipmap=mipmaps[j],1023!==texture.format&&1022!==texture.format?state.getCompressedTextureFormats().indexOf(glFormat)>-1?state.compressedTexImage2D(34069+i,j,glInternalFormat,mipmap.width,mipmap.height,0,mipmap.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):state.texImage2D(34069+i,j,glInternalFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data);else isDataTexture?state.texImage2D(34069+i,0,glInternalFormat,cubeImage[i].width,cubeImage[i].height,0,glFormat,glType,cubeImage[i].data):state.texImage2D(34069+i,0,glInternalFormat,glFormat,glType,cubeImage[i]);textureProperties.__maxMipLevel=isCompressed?mipmaps.length-1:0,textureNeedsGenerateMipmaps(texture,isPowerOfTwoImage)&&generateMipmap(34067,texture,image.width,image.height),textureProperties.__version=texture.version,texture.onUpdate&&texture.onUpdate(texture)}else state.activeTexture(33984+slot),state.bindTexture(34067,textureProperties.__image__webglTextureCube)}function setTextureCubeDynamic(texture,slot){state.activeTexture(33984+slot),state.bindTexture(34067,properties.get(texture).__webglTexture)}function setTextureParameters(textureType,texture,isPowerOfTwoImage){var extension;if(isPowerOfTwoImage?(_gl.texParameteri(textureType,10242,utils.convert(texture.wrapS)),_gl.texParameteri(textureType,10243,utils.convert(texture.wrapT)),_gl.texParameteri(textureType,10240,utils.convert(texture.magFilter)),_gl.texParameteri(textureType,10241,utils.convert(texture.minFilter))):(_gl.texParameteri(textureType,10242,33071),_gl.texParameteri(textureType,10243,33071),1001===texture.wrapS&&1001===texture.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),_gl.texParameteri(textureType,10240,filterFallback(texture.magFilter)),_gl.texParameteri(textureType,10241,filterFallback(texture.minFilter)),1003!==texture.minFilter&&1006!==texture.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),extension=extensions.get("EXT_texture_filter_anisotropic")){if(1015===texture.type&&null===extensions.get("OES_texture_float_linear"))return;if(1016===texture.type&&null===(capabilities.isWebGL2||extensions.get("OES_texture_half_float_linear")))return;(texture.anisotropy>1||properties.get(texture).__currentAnisotropy)&&(_gl.texParameterf(textureType,extension.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(texture.anisotropy,capabilities.getMaxAnisotropy())),properties.get(texture).__currentAnisotropy=texture.anisotropy)}}function uploadTexture(textureProperties,texture,slot){var textureType;textureType=texture.isDataTexture3D?32879:3553,void 0===textureProperties.__webglInit&&(textureProperties.__webglInit=!0,texture.addEventListener("dispose",onTextureDispose),textureProperties.__webglTexture=_gl.createTexture(),info.memory.textures++),state.activeTexture(33984+slot),state.bindTexture(textureType,textureProperties.__webglTexture),_gl.pixelStorei(37440,texture.flipY),_gl.pixelStorei(37441,texture.premultiplyAlpha),_gl.pixelStorei(3317,texture.unpackAlignment);var image=clampToMaxSize(texture.image,capabilities.maxTextureSize);textureNeedsPowerOfTwo(texture)&&!1===isPowerOfTwo(image)&&(image=makePowerOfTwo(image));var isPowerOfTwoImage=isPowerOfTwo(image),glFormat=utils.convert(texture.format),glType=utils.convert(texture.type),glInternalFormat=getInternalFormat(glFormat,glType);setTextureParameters(textureType,texture,isPowerOfTwoImage);var mipmap,mipmaps=texture.mipmaps;if(texture.isDepthTexture){if(glInternalFormat=6402,1015===texture.type){if(!capabilities.isWebGL2)throw new Error("Float Depth Texture only supported in WebGL2.0");glInternalFormat=36012}else capabilities.isWebGL2&&(glInternalFormat=33189);1026===texture.format&&6402===glInternalFormat&&1012!==texture.type&&1014!==texture.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),texture.type=1012,glType=utils.convert(texture.type)),1027===texture.format&&(glInternalFormat=34041,1020!==texture.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),texture.type=1020,glType=utils.convert(texture.type))),state.texImage2D(3553,0,glInternalFormat,image.width,image.height,0,glFormat,glType,null)}else if(texture.isDataTexture)if(mipmaps.length>0&&isPowerOfTwoImage){for(var i=0,il=mipmaps.length;i<il;i++)mipmap=mipmaps[i],state.texImage2D(3553,i,glInternalFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data);texture.generateMipmaps=!1,textureProperties.__maxMipLevel=mipmaps.length-1}else state.texImage2D(3553,0,glInternalFormat,image.width,image.height,0,glFormat,glType,image.data),textureProperties.__maxMipLevel=0;else if(texture.isCompressedTexture){for(var i=0,il=mipmaps.length;i<il;i++)mipmap=mipmaps[i],1023!==texture.format&&1022!==texture.format?state.getCompressedTextureFormats().indexOf(glFormat)>-1?state.compressedTexImage2D(3553,i,glInternalFormat,mipmap.width,mipmap.height,0,mipmap.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):state.texImage2D(3553,i,glInternalFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data);textureProperties.__maxMipLevel=mipmaps.length-1}else if(texture.isDataTexture3D)state.texImage3D(32879,0,glInternalFormat,image.width,image.height,image.depth,0,glFormat,glType,image.data),textureProperties.__maxMipLevel=0;else if(mipmaps.length>0&&isPowerOfTwoImage){for(var i=0,il=mipmaps.length;i<il;i++)mipmap=mipmaps[i],state.texImage2D(3553,i,glInternalFormat,glFormat,glType,mipmap);texture.generateMipmaps=!1,textureProperties.__maxMipLevel=mipmaps.length-1}else state.texImage2D(3553,0,glInternalFormat,glFormat,glType,image),textureProperties.__maxMipLevel=0;textureNeedsGenerateMipmaps(texture,isPowerOfTwoImage)&&generateMipmap(3553,texture,image.width,image.height),textureProperties.__version=texture.version,texture.onUpdate&&texture.onUpdate(texture)}function setupFrameBufferTexture(framebuffer,renderTarget,attachment,textureTarget){var glFormat=utils.convert(renderTarget.texture.format),glType=utils.convert(renderTarget.texture.type),glInternalFormat=getInternalFormat(glFormat,glType);state.texImage2D(textureTarget,0,glInternalFormat,renderTarget.width,renderTarget.height,0,glFormat,glType,null),_gl.bindFramebuffer(36160,framebuffer),_gl.framebufferTexture2D(36160,attachment,textureTarget,properties.get(renderTarget.texture).__webglTexture,0),_gl.bindFramebuffer(36160,null)}function setupRenderBufferStorage(renderbuffer,renderTarget){_gl.bindRenderbuffer(36161,renderbuffer),renderTarget.depthBuffer&&!renderTarget.stencilBuffer?(_gl.renderbufferStorage(36161,33189,renderTarget.width,renderTarget.height),_gl.framebufferRenderbuffer(36160,36096,36161,renderbuffer)):renderTarget.depthBuffer&&renderTarget.stencilBuffer?(_gl.renderbufferStorage(36161,34041,renderTarget.width,renderTarget.height),_gl.framebufferRenderbuffer(36160,33306,36161,renderbuffer)):_gl.renderbufferStorage(36161,32854,renderTarget.width,renderTarget.height),_gl.bindRenderbuffer(36161,null)}function setupDepthTexture(framebuffer,renderTarget){var isCube;if(renderTarget&&renderTarget.isWebGLRenderTargetCube)throw new Error("Depth Texture with cube render targets is not supported");if(_gl.bindFramebuffer(36160,framebuffer),!renderTarget.depthTexture||!renderTarget.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");properties.get(renderTarget.depthTexture).__webglTexture&&renderTarget.depthTexture.image.width===renderTarget.width&&renderTarget.depthTexture.image.height===renderTarget.height||(renderTarget.depthTexture.image.width=renderTarget.width,renderTarget.depthTexture.image.height=renderTarget.height,renderTarget.depthTexture.needsUpdate=!0),setTexture2D(renderTarget.depthTexture,0);var webglDepthTexture=properties.get(renderTarget.depthTexture).__webglTexture;if(1026===renderTarget.depthTexture.format)_gl.framebufferTexture2D(36160,36096,3553,webglDepthTexture,0);else{if(1027!==renderTarget.depthTexture.format)throw new Error("Unknown depthTexture format");_gl.framebufferTexture2D(36160,33306,3553,webglDepthTexture,0)}}function setupDepthRenderbuffer(renderTarget){var renderTargetProperties=properties.get(renderTarget),isCube=!0===renderTarget.isWebGLRenderTargetCube;if(renderTarget.depthTexture){if(isCube)throw new Error("target.depthTexture not supported in Cube render targets");setupDepthTexture(renderTargetProperties.__webglFramebuffer,renderTarget)}else if(isCube){renderTargetProperties.__webglDepthbuffer=[];for(var i=0;i<6;i++)_gl.bindFramebuffer(36160,renderTargetProperties.__webglFramebuffer[i]),renderTargetProperties.__webglDepthbuffer[i]=_gl.createRenderbuffer(),setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i],renderTarget)}else _gl.bindFramebuffer(36160,renderTargetProperties.__webglFramebuffer),renderTargetProperties.__webglDepthbuffer=_gl.createRenderbuffer(),setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer,renderTarget);_gl.bindFramebuffer(36160,null)}function setupRenderTarget(renderTarget){var renderTargetProperties=properties.get(renderTarget),textureProperties=properties.get(renderTarget.texture);renderTarget.addEventListener("dispose",onRenderTargetDispose),textureProperties.__webglTexture=_gl.createTexture(),info.memory.textures++;var isCube=!0===renderTarget.isWebGLRenderTargetCube,isTargetPowerOfTwo=isPowerOfTwo(renderTarget);if(isCube){renderTargetProperties.__webglFramebuffer=[];for(var i=0;i<6;i++)renderTargetProperties.__webglFramebuffer[i]=_gl.createFramebuffer()}else renderTargetProperties.__webglFramebuffer=_gl.createFramebuffer();if(isCube){state.bindTexture(34067,textureProperties.__webgl
1Texture),setTextureParameters(34067,renderTarget.texture,isTargetPowerOfTwo);for(var i=0;i<6;i++)setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i],renderTarget,36064,34069+i);textureNeedsGenerateMipmaps(renderTarget.texture,isTargetPowerOfTwo)&&generateMipmap(34067,renderTarget.texture,renderTarget.width,renderTarget.height),state.bindTexture(34067,null)}else state.bindTexture(3553,textureProperties.__webglTexture),setTextureParameters(3553,renderTarget.texture,isTargetPowerOfTwo),setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer,renderTarget,36064,3553),textureNeedsGenerateMipmaps(renderTarget.texture,isTargetPowerOfTwo)&&generateMipmap(3553,renderTarget.texture,renderTarget.width,renderTarget.height),state.bindTexture(3553,null);renderTarget.depthBuffer&&setupDepthRenderbuffer(renderTarget)}function updateRenderTargetMipmap(renderTarget){var texture=renderTarget.texture,isTargetPowerOfTwo;if(textureNeedsGenerateMipmaps(texture,isPowerOfTwo(renderTarget))){var target=renderTarget.isWebGLRenderTargetCube?34067:3553,webglTexture=properties.get(texture).__webglTexture;state.bindTexture(target,webglTexture),generateMipmap(target,texture,renderTarget.width,renderTarget.height),state.bindTexture(target,null)}}function updateVideoTexture(texture){var id=texture.id,frame=info.render.frame;_videoTextures[id]!==frame&&(_videoTextures[id]=frame,texture.update())}this.setTexture2D=setTexture2D,this.setTexture3D=setTexture3D,this.setTextureCube=setTextureCube,this.setTextureCubeDynamic=setTextureCubeDynamic,this.setupRenderTarget=setupRenderTarget,this.updateRenderTargetMipmap=updateRenderTargetMipmap}function WebGLUtils(gl,extensions,capabilities){function convert(p){var extension;if(1e3===p)return 10497;if(1001===p)return 33071;if(1002===p)return 33648;if(1003===p)return 9728;if(1004===p)return 9984;if(1005===p)return 9986;if(1006===p)return 9729;if(1007===p)return 9985;if(1008===p)return 9987;if(1009===p)return 5121;if(1017===p)return 32819;if(1018===p)return 32820;if(1019===p)return 33635;if(1010===p)return 5120;if(1011===p)return 5122;if(1012===p)return 5123;if(1013===p)return 5124;if(1014===p)return 5125;if(1015===p)return 5126;if(1016===p){if(capabilities.isWebGL2)return 5131;if(null!==(extension=extensions.get("OES_texture_half_float")))return extension.HALF_FLOAT_OES}if(1021===p)return 6406;if(1022===p)return 6407;if(1023===p)return 6408;if(1024===p)return 6409;if(1025===p)return 6410;if(1026===p)return 6402;if(1027===p)return 34041;if(1028===p)return 6403;if(100===p)return 32774;if(101===p)return 32778;if(102===p)return 32779;if(200===p)return 0;if(201===p)return 1;if(202===p)return 768;if(203===p)return 769;if(204===p)return 770;if(205===p)return 771;if(206===p)return 772;if(207===p)return 773;if(208===p)return 774;if(209===p)return 775;if(210===p)return 776;if((33776===p||33777===p||33778===p||33779===p)&&null!==(extension=extensions.get("WEBGL_compressed_texture_s3tc"))){if(33776===p)return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===p)return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===p)return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===p)return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((35840===p||35841===p||35842===p||35843===p)&&null!==(extension=extensions.get("WEBGL_compressed_texture_pvrtc"))){if
vendor: 4,228 bytes, line 1
1(35840===p)return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===p)return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===p)return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===p)return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===p&&null!==(extension=extensions.get("WEBGL_compressed_texture_etc1")))return extension.COMPRESSED_RGB_ETC1_WEBGL;if((37808===p||37809===p||37810===p||37811===p||37812===p||37813===p||37814===p||37815===p||37816===p||37817===p||37818===p||37819===p||37820===p||37821===p)&&null!==(extension=extensions.get("WEBGL_compressed_texture_astc")))return p;if(103===p||104===p){if(capabilities.isWebGL2){if(103===p)return 32775;if(104===p)return 32776}if(null!==(extension=extensions.get("EXT_blend_minmax"))){if(103===p)return extension.MIN_EXT;if(104===p)return extension.MAX_EXT}}if(1020===p){if(capabilities.isWebGL2)return 34042;if(null!==(extension=extensions.get("WEBGL_depth_texture")))return extension.UNSIGNED_INT_24_8_WEBGL}return 0}return{convert:convert}}function Group(){Object3D.call(this),this.type="Group"}function Camera(){Object3D.call(this),this.type="Camera",this.matrixWorldInverse=new Matrix4,this.projectionMatrix=new Matrix4,this.projectionMatrixInverse=new Matrix4}function PerspectiveCamera(fov,aspect,near,far){Camera.call(this),this.type="PerspectiveCamera",this.fov=void 0!==fov?fov:50,this.zoom=1,this.near=void 0!==near?near:.1,this.far=void 0!==far?far:2e3,this.focus=10,this.aspect=void 0!==aspect?aspect:1,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}function ArrayCamera(array){PerspectiveCamera.call(this),this.cameras=array||[]}MeshDepthMaterial.prototype=Object.create(Material.prototype),MeshDepthMaterial.prototype.constructor=MeshDepthMaterial,MeshDepthMaterial.prototype.isMeshDepthMaterial=!0,MeshDepthMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.depthPacking=source.depthPacking,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.map=source.map,this.alphaMap=source.alphaMap,this.displacementMap=source.displacementMap,this.displacementScale=source.displacementScale,this.displacementBias=source.displacementBias,this.wireframe=source.wireframe,this.wireframeLinewidth=source.wireframeLinewidth,this},MeshDistanceMaterial.prototype=Object.create(Material.prototype),MeshDistanceMaterial.prototype.constructor=MeshDistanceMaterial,MeshDistanceMaterial.prototype.isMeshDistanceMaterial=!0,MeshDistanceMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.referencePosition.copy(source.referencePosition),this.nearDistance=source.nearDistance,this.farDistance=source.farDistance,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.map=source.map,this.alphaMap=source.alphaMap,this.displacementMap=source.displacementMap,this.displacementScale=source.displacementScale,this.displacementBias=source.displacementBias,this},Group.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Group,isGroup:!0}),Camera.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Camera,isCamera:!0,copy:function(source,recursive){return Object3D.prototype.copy.call(this,source,recursive),this.matrixWorldInverse.copy(source.matrixWorldInverse),this.projectionMatrix.copy(source.projectionMatrix),this.projectionMatrixInverse.copy(source.projectionMatrixInverse),this},getWorldDirection:function(target){void 0===target&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),target=new Vector3),this.updateMatrixWorld(!0);var e=this.matrixWorld.elements;return target.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(force){Object3D.prototype.updateMatrixWorld.call(this,force),this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}}),PerspectiveCamera.prototype=Object.assign(Object.create(Camera.prototype),{constructor:PerspectiveCamera,isPerspectiveCamera:!0,copy:function(source,recursive){return Camera.prototype.copy.call(this,source,recursive),this.fov=source.fov,this.zoom=source.zoom,this.near=source.near,this.far=source.far,this.focus=source.focu
vendor: 6,507 bytes, line 1
1s,this.aspect=source.aspect,this.view=null===source.view?null:Object.assign({},source.view),this.filmGauge=source.filmGauge,this.filmOffset=source.filmOffset,this},setFocalLength:function(focalLength){var vExtentSlope=.5*this.getFilmHeight()/focalLength;this.fov=2*_Math.RAD2DEG*Math.atan(vExtentSlope),this.updateProjectionMatrix()},getFocalLength:function(){var vExtentSlope=Math.tan(.5*_Math.DEG2RAD*this.fov);return.5*this.getFilmHeight()/vExtentSlope},getEffectiveFOV:function(){return 2*_Math.RAD2DEG*Math.atan(Math.tan(.5*_Math.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(fullWidth,fullHeight,x,y,width,height){this.aspect=fullWidth/fullHeight,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=fullWidth,this.view.fullHeight=fullHeight,this.view.offsetX=x,this.view.offsetY=y,this.view.width=width,this.view.height=height,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var near=this.near,top=near*Math.tan(.5*_Math.DEG2RAD*this.fov)/this.zoom,height=2*top,width=this.aspect*height,left=-.5*width,view=this.view;if(null!==this.view&&this.view.enabled){var fullWidth=view.fullWidth,fullHeight=view.fullHeight;left+=view.offsetX*width/fullWidth,top-=view.offsetY*height/fullHeight,width*=view.width/fullWidth,height*=view.height/fullHeight}var skew=this.filmOffset;0!==skew&&(left+=near*skew/this.getFilmWidth()),this.projectionMatrix.makePerspective(left,left+width,top,top-height,near,this.far),this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);return data.object.fov=this.fov,data.object.zoom=this.zoom,data.object.near=this.near,data.object.far=this.far,data.object.focus=this.focus,data.object.aspect=this.aspect,null!==this.view&&(data.object.view=Object.assign({},this.view)),data.object.filmGauge=this.filmGauge,data.object.filmOffset=this.filmOffset,data}}),ArrayCamera.prototype=Object.assign(Object.create(PerspectiveCamera.prototype),{constructor:ArrayCamera,isArrayCamera:!0});var cameraLPos=new Vector3,cameraRPos=new Vector3,geometry,matrixPosition,offsetMatrix,identityMatrix,start,end;function setProjectionFromUnion(camera,cameraL,cameraR){cameraLPos.setFromMatrixPosition(cameraL.matrixWorld),cameraRPos.setFromMatrixPosition(cameraR.matrixWorld);var ipd=cameraLPos.distanceTo(cameraRPos),projL=cameraL.projectionMatrix.elements,projR=cameraR.projectionMatrix.elements,near=projL[14]/(projL[10]-1),far=projL[14]/(projL[10]+1),topFov=(projL[9]+1)/projL[5],bottomFov=(projL[9]-1)/projL[5],leftFov=(projL[8]-1)/projL[0],rightFov=(projR[8]+1)/projR[0],left=near*leftFov,right=near*rightFov,zOffset=ipd/(-leftFov+rightFov),xOffset=zOffset*-leftFov;cameraL.matrixWorld.decompose(camera.position,camera.quaternion,camera.scale),camera.translateX(xOffset),camera.translateZ(zOffset),camera.matrixWorld.compose(camera.position,camera.quaternion,camera.scale),camera.matrixWorldInverse.getInverse(camera.matrixWorld);var near2=near+zOffset,far2=far+zOffset,left2=left-xOffset,right2=right+(ipd-xOffset),top2=topFov*far/far2*near2,bottom2=bottomFov*far/far2*near2;camera.projectionMatrix.makePerspective(left2,right2,top2,bottom2,near2,far2)}function WebVRManager(renderer){var scope=this,device=null,frameData=null,poseTarget=null,controllers=[],standingMatrix=new Matrix4,standingMatrixInverse=new Matrix4,framebufferScaleFactor=1,frameOfReferenceType="stage";"undefined"!=typeof window&&"VRFrameData"in window&&(frameData=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",onVRDisplayPresentChange,!1));var matrixWorldInverse=new Matrix4,tempQuaternion=new Quaternion,tempPosition=new Vector3,cameraL=new PerspectiveCamera;cameraL.bounds=new Vector4(0,0,.5,1),cameraL.layers.enable(1);var cameraR=new PerspectiveCamera;cameraR.bounds=new Vector4(.5,0,.5,1),cameraR.layers.enable(2);var cameraVR=new ArrayCamera([cameraL,cameraR]),currentSize,currentPixelRatio;function isPresenting(){return null!==device&&!0===device.isPresenting}function onVRDisplayPresentChange(){if(isPresenting()){var eyeParameters=device.getEyeParameters("left"),renderWidth=eyeParameters.renderWidth*framebufferScaleFactor,renderHeight=eyeParameters.renderHeight*framebufferScaleFactor;currentPixelRatio=renderer.getPixelRatio(),currentSize=renderer.getSize(),renderer.setDrawingBufferSize(2*renderWidth,renderHeight,1),animation.start()}else scope.enabled&&renderer.setDrawingBufferSize(currentSize.width,currentSize.height,currentPixelRatio),animation.stop()}cameraVR.layers.enable(1),cameraVR.layers.enable(2);var triggers=[];function findGamepad(id){for(var gamepads=navigator.getGamepads&&navigator.getGamepads(),i=0,j=0,l=gamepads.length;i<l;i++){var gamepad=gamepads[i];if(gamepad&&("Daydream Controller"===gamepad.id||"Gear VR Controller"===gamepad.id||"Oculus Go Controller"===gamepad.id||"OpenVR Gamepad"===gamepad.id||gamepad.id.startsWith("Oculus Touch")||gamepad.id.startsWith("Spatial Controller"))){if(j===id)return gamepad;j++}}}function updateControllers(){for(var i=0;i<controllers.length;i++){var controller=controllers[i],gamepad=findGamepad(i);if(void 0!==gamepad&&void 0!==gamepad.pose){if(null===gamepad.pose)return;var pose=gamepad.pose;!1===pose.hasPosition&&controller.position.set(.2,-.6,-.05),null!==pose.position&&controller.position.fromArray(pose.position),null!==pose.orientation&&controller.quaternion.fromArray(pose.orientation),controller.matrix.compose(controller.position,controller.quaternion,controller.scale),controller.matrix.premultiply(standingMatrix),controller.matrix.decompose(controller.position,controller.quaternion,controller.scale),controller.matrixWorldNeedsUpdate=!0,controller.visible=!0;var buttonId="Daydream Controller"===gamepad.id?0:1;triggers[i]!==gamepad.buttons[buttonId].pressed&&(triggers[i]=gamepad.buttons[buttonId].pressed,!0===triggers[i]?controller.dispatchEvent({type:"selectstart"}):(controller.dispatchEvent({type:"selectend"}),controller.dispatchEvent({type:"select"})))}else controller.visible=!1}}this.enabled=!1,this.getController=function(id){var controller=controllers[id];return void 0===controller&&((controller=new Group).matrixAutoUpdate=!1,controller.visible=!1,
1controllers[id]=controller),controller},this.getDevice=function(){return device},this.setDevice=function(value){void 0!==value&&(device=value),animation.setContext(value)},this.setFramebufferScaleFactor=function(value){framebufferScaleFactor=value},this.setFrameOfReferenceType=function(value){frameOfReferenceType=value},this.setPoseTarget=function(object){void 0!==object&&(poseTarget=object)},this.getCamera=function(camera){var userHeight="stage"===frameOfReferenceType?1.6:0;if(null===device)return camera.position.set(0,userHeight,0),camera;if(device.depthNear=camera.near,device.depthFar=camera.far,device.getFrameData(frameData),"stage"===frameOfReferenceType){var stageParameters=device.stageParameters;stageParameters?standingMatrix.fromArray(stageParameters.sittingToStandingTransform):standingMatrix.makeTranslation(0,userHeight,0)}var pose=frameData.pose,poseObject=null!==poseTarget?poseTarget:camera;if(poseObject.matrix.copy(standingMatrix),poseObject.matrix.decompose(poseObject.position,poseObject.quaternion,poseObject.scale),null!==pose.orientation&&(tempQuaternion.fromArray(pose.orientation),poseObject.quaternion.multiply(tempQuaternion)),null!==pose.position&&(tempQuaternion.setFromRotationMatrix(standingMatrix),tempPosition.fromArray(pose.position),tempPosition.applyQuaternion(tempQuaternion),poseObject.position.add(tempPosition)),poseObject.updateMatrixWorld(),!1===device.isPresenting)return camera;cameraL.near=camera.near,cameraR.near=camera.near,cameraL.far=camera.far,cameraR.far=camera.far,cameraL.matrixWorldInverse.fromArray(frameData.leftViewMatrix),cameraR.matrixWorldInverse.fromArray(frameData.rightViewMatrix),standingMatrixInverse.getInverse(standingMatrix),"stage"===frameOfReferenceType&&(cameraL.matrixWorldInverse.multiply(standingMatrixInverse),cameraR.matrixWorldInverse.multiply(standingMatrixInverse));var parent=poseObject.parent;null!==parent&&(matrixWorldInverse.getInverse(parent.matrixWorld),cameraL.matrixWorldInverse.multiply(matrixWorldInverse),cameraR.matrixWorldInverse.multiply(matrixWorldInverse)),cameraL.matrixWorld.getInverse(cameraL.matrixWorldInverse),cameraR.matrixWorld.getInverse(cameraR.matrixWorldInverse),cameraL.projectionMatrix.fromArray(frameData.leftProjectionMatrix),cameraR.projectionMatrix.fromArray(frameData.rightProjectionMatrix),setProjectionFromUnion(cameraVR,cameraL,cameraR);var layers=device.getLayers();if(layers.length){var layer=layers[0];null!==layer.leftBounds&&4===layer.leftBounds.length&&cameraL.bounds.fromArray(layer.leftBounds),null!==layer.rightBounds&&4===layer.rightBounds.length&&cameraR.bounds.fromArray(layer.rightBounds)}return updateControllers(),cameraVR}
1,this.getStandingMatrix=function(){return standingMatrix},this.isPresenting=isPresenting;var animation=new WebGLAnimation;this.setAnimationLoop=function(callback){animation.setAnimationLoop(callback)},this.submitFrame=function(){isPresenting()&&device.submitFrame()},this.dispose=function(){"undefined"!=typeof window&&window.removeEventListener("vrdisplaypresentchange",onVRDisplayPresentChange)}}function WebXRManager(renderer){var gl=renderer.context,device=null,session=null,framebufferScaleFactor=1,frameOfReference=null,frameOfReferenceType="stage",pose=null,controllers=[],inputSources=[];function isPresenting(){return null!==session&&null!==frameOfReference}var cameraL=new PerspectiveCamera;cameraL.layers.enable(1),cameraL.viewport=new Vector4;var cameraR=new PerspectiveCamera;cameraR.layers.enable(2),cameraR.viewport=new Vector4;var cameraVR=new ArrayCamera([cameraL,cameraR]);function onSessionEvent(event){var controller=controllers[inputSources.indexOf(event.inputSource)];controller&&controller.dispatchEvent({type:event.type})}function onSessionEnd(){renderer.setFramebuffer(null),animation.stop()}function updateCamera(camera,parent){null===parent?camera.matrixWorld.copy(camera.matrix):camera.matrixWorld.multiplyMatrices(parent.matrixWorld,camera.matrix),camera.matrixWorldInverse.getInverse(camera.matrixWorld)}cameraVR.layers.enable(1),cameraVR.layers.enable(2),this.enabled=!1,this.getController=function(id){var controller=controllers[id];return void 0===controller&&((controller=new Group).matrixAutoUpdate=!1,controller.visible=!1,controllers[id]=controller),controller},this.getDevice=function(){return device},this.setDevice=function(value){void 0!==value&&(device=value),value instanceof XRDevice&&gl.setCompatibleXRDevice(value)},this.setFramebufferScaleFactor=function(value){framebufferScaleFactor=value},this.setFrameOfReferenceType=function(value){frameOfReferenceType=value},this.setSession=function(value){null!==(session=value)&&(session.addEventListener("select",onSessionEvent),session.addEventListener("selectstart",onSessionEvent),session.addEventListener("selectend",onSessionEvent),session.addEventListener("end",onSessionEnd),session.baseLayer=new XRWebGLLayer(session,gl,{framebufferScaleFactor:framebufferScaleFactor}),session.requestFrameOfReference(frameOfReferenceType).then((function(value){frameOfReference=value,renderer.setFramebuffer(session.baseLayer.framebuffer),animation.setContext(session),animation.start()})),inputSources=session.getInputSources(),session.addEventListener("inputsourceschange",(function(){inputSources=session.getInputSources(),console.log(inputSources);for(var i=0;i<controllers.length;i++){var controller;controllers[i].userData.inputSource=inputSources[i]}})))},this.getCamera=function(camera){if(isPresenting()){var parent=camera.parent,cameras=cameraVR.cameras;updateCamera(cameraVR,parent);for(var i=0;i<cameras.length;i++)updateCamera(cameras[i],parent);camera.matrixWorld.copy(cameraVR.matrixWorld);for(var children=camera.children,i=0,l=children.length;i<l;i++)children[i].updateMatrixWorld(!0);return setProjectionFromUnion(cameraVR,cameraL,cameraR),cameraVR}return camera},this.isPresenting=isPresenting;var onAnimationFrameCallback=null;function onAnimationFrame(time,frame){if(null!==(pose=frame.getDevicePose(frameOfReference)))for(var layer=session.baseLayer,views=frame.views,i=0;i<views.length;i++){var view=views[i],viewport=layer.getViewport(view),viewMatrix=pose.getViewMatrix(view),camera=cameraVR.cameras[i];camera.matrix.fromArray(viewMatrix).getInverse(camera.matrix),camera.projectionMatrix.fromArray(view.projectionMatrix),camera.viewport.set(viewport.x,viewport.y,viewport.width,viewport.height),0===i&&cameraVR.matrix.copy(camera.matrix)}for(var i=0;i<controllers.length;i++){var controller=controllers[i],inputSource=inputSources[i];if(inputSource){var inputPose=frame.getInputPose(inputSource,frameOfReference);if(null!==inputPose){"targetRay"in inputPose?controller.matrix.elements=inputPose.targetRay.transformMatrix:"pointerMatrix"in inputPose&&(controller.matrix.elements=inputPose.pointerMatr
vendor: 4,708 bytes, line 1
1ix),controller.matrix.decompose(controller.position,controller.rotation,controller.scale),controller.visible=!0;continue}}controller.visible=!1}onAnimationFrameCallback&&onAnimationFrameCallback(time)}var animation=new WebGLAnimation;animation.setAnimationLoop(onAnimationFrame),this.setAnimationLoop=function(callback){onAnimationFrameCallback=callback},this.dispose=function(){},this.getStandingMatrix=function(){return console.warn("THREE.WebXRManager: getStandingMatrix() is no longer needed."),new THREE.Matrix4},this.submitFrame=function(){}}function WebGLRenderer(parameters){console.log("THREE.WebGLRenderer","100");var _canvas=void 0!==(parameters=parameters||{}).canvas?parameters.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),_context=void 0!==parameters.context?parameters.context:null,_alpha=void 0!==parameters.alpha&¶meters.alpha,_depth=void 0===parameters.depth||parameters.depth,_stencil=void 0===parameters.stencil||parameters.stencil,_antialias=void 0!==parameters.antialias&¶meters.antialias,_premultipliedAlpha=void 0===parameters.premultipliedAlpha||parameters.premultipliedAlpha,_preserveDrawingBuffer=void 0!==parameters.preserveDrawingBuffer&¶meters.preserveDrawingBuffer,_powerPreference=void 0!==parameters.powerPreference?parameters.powerPreference:"default",currentRenderList=null,currentRenderState=null;this.domElement=_canvas,this.context=null,this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.gammaInput=!1,this.gammaOutput=!1,this.physicallyCorrectLights=!1,this.toneMapping=1,this.toneMappingExposure=1,this.toneMappingWhitePoint=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var _this=this,_isContextLost=!1,_framebuffer=null,_currentRenderTarget=null,_currentFramebuffer=null,_currentMaterialId=-1,_currentGeometryProgram={geometry:null,program:null,wireframe:!1},_currentCamera=null,_currentArrayCamera=null,_currentViewport=new Vector4,_currentScissor=new Vector4,_currentScissorTest=null,_usedTextureUnits=0,_width=_canvas.width,_height=_canvas.height,_pixelRatio=1,_viewport=new Vector4(0,0,_width,_height),_scissor=new Vector4(0,0,_width,_height),_scissorTest=!1,_frustum=new Frustum,_clipping=new WebGLClipping,_clippingEnabled=!1,_localClippingEnabled=!1,_projScreenMatrix=new Matrix4,_vector3=new Vector3,_gl,extensions,capabilities,state,info,properties,textures,attributes,geometries,objects,programCache,renderLists,renderStates,background,morphtargets,bufferRenderer,indexedBufferRenderer,utils;function getTargetPixelRatio(){return null===_currentRenderTarget?_pixelRatio:1}try{var contextAttributes={alpha:_alpha,depth:_depth,stencil:_stencil,antialias:_antialias,premultipliedAlpha:_premultipliedAlpha,preserveDrawingBuffer:_preserveDrawingBuffer,powerPreference:_powerPreference};if(_canvas.addEventListener("webglcontextlost",onContextLost,!1),_canvas.addEventListener("webglcontextrestored",onContextRestore,!1),null===(_gl=_context||_canvas.getContext("webgl",contextAttributes)||_canvas.getContext("experimental-webgl",contextAttributes)))throw null!==_canvas.getContext("webgl")?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.");void 0===_gl.getShaderPrecisionFormat&&(_gl.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(error){console.error("THREE.WebGLRenderer: "+error.message)}function initGLContext(){extensions=new WebGLExtensions(_gl),(capabilities=new WebGLCapabilities(_gl,extensions,parameters)).isWebGL2||(extensions.get("WEBGL_depth_texture"),extensions.get("OES_texture_float"),extensions.get("OES_texture_half_float"),extensions.get("OES_texture_half_float_linear"),extensions.get("OES_standard_derivatives"),extensions.get("OES_element_index_uint"),extensions.get("ANGLE_instanced_arrays")),extensions.get("OES_texture_float_linear"),utils=new WebGLUtils(_gl,extensions,capabilities),(state=new WebGLState(_gl,extensions,utils,capabilities)).scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio)),state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio)),info=new WebGLInfo(_gl),properties=new WebGLProperties,textures=new WebGLTextures(_gl,extensions,state,properties,capabilities,utils,info),attributes=new WebGLAttributes(_gl),geometries=new WebGLGeometries(_gl,attributes,info),objects=new WebGLObjects(geometries,info),morphtargets=new WebGLMorphtargets(_gl),programCache=new WebGLPrograms(_this,extensions,capabilities),renderLists=new WebGLRenderLists,renderStates=new WebGLRenderStates,background=new WebGLBackgroun
vendor: 4,219 bytes, line 1
1d(_this,state,objects,_premultipliedAlpha),bufferRenderer=new WebGLBufferRenderer(_gl,extensions,info,capabilities),indexedBufferRenderer=new WebGLIndexedBufferRenderer(_gl,extensions,info,capabilities),info.programs=programCache.programs,_this.context=_gl,_this.capabilities=capabilities,_this.extensions=extensions,_this.properties=properties,_this.renderLists=renderLists,_this.state=state,_this.info=info}initGLContext();var vr=null;"undefined"!=typeof navigator&&(vr="xr"in navigator?new WebXRManager(_this):new WebVRManager(_this)),this.vr=vr;var shadowMap=new WebGLShadowMap(_this,objects,capabilities.maxTextureSize);function onContextLost(event){event.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),_isContextLost=!0}function onContextRestore(){console.log("THREE.WebGLRenderer: Context Restored."),_isContextLost=!1,initGLContext()}function onMaterialDispose(event){var material=event.target;material.removeEventListener("dispose",onMaterialDispose),deallocateMaterial(material)}function deallocateMaterial(material){releaseMaterialProgramReference(material),properties.remove(material)}function releaseMaterialProgramReference(material){var programInfo=properties.get(material).program;material.program=void 0,void 0!==programInfo&&programCache.releaseProgram(programInfo)}function renderObjectImmediate(object,program){object.render((function(object){_this.renderBufferImmediate(object,program)}))}function setupVertexAttributes(material,program,geometry){if(geometry&&geometry.isInstancedBufferGeometry&!capabilities.isWebGL2&&null===extensions.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{state.initAttributes();var geometryAttributes=geometry.attributes,programAttributes=program.getAttributes(),materialDefaultAttributeValues=material.defaultAttributeValues;for(var name in programAttributes){var programAttribute=programAttributes[name];if(programAttribute>=0){var geometryAttribute=geometryAttributes[name];if(void 0!==geometryAttribute){var normalized=geometryAttribute.normalized,size=geometryAttribute.itemSize,attribute=attributes.get(geometryAttribute);if(void 0===attribute)continue;var buffer=attribute.buffer,type=attribute.type,bytesPerElement=attribute.bytesPerElement;if(geometryAttribute.isInterleavedBufferAttribute){var data=geometryAttribute.data,stride=data.stride,offset=geometryAttribute.offset;data&&data.isInstancedInterleavedBuffer?(state.enableAttributeAndDivisor(programAttribute,data.meshPerAttribute),void 0===geometry.maxInstancedCount&&(geometry.maxInstancedCount=data.meshPerAttribute*data.count)):state.enableAttribute(programAttribute),_gl.bindBuffer(34962,buffer),_gl.vertexAttribPointer(programAttribute,size,type,normalized,stride*bytesPerElement,offset*bytesPerElement)}else geometryAttribute.isInstancedBufferAttribute?(state.enableAttributeAndDivisor(programAttribute,geometryAttribute.meshPerAttribute),void 0===geometry.maxInstancedCount&&(geometry.maxInstancedCount=geometryAttribute.meshPerAttribute*geometryAttribute.count)):state.enableAttribute(programAttribute),_gl.bindBuffer(34962,buffer),_gl.vertexAttribPointer(programAttribute,size,type,normalized,0,0)}else if(void 0!==materialDefaultAttributeValues){var value=materialDefaultAttributeValues[name];if(void 0!==value)switch(value.length){case 2:_gl.vertexAttrib2fv(programAttribute,value);break;case 3:_gl.vertexAttrib3fv(programAttribute,value);break;case 4:_gl.vertexAttrib4fv(programAttribute,value);break;default:_gl.vertexAttrib1fv(programAttribute,value)}}}}state.disableUnusedAttributes()}}this.shadowMap=shadowMap,this.getContext=function(){return _gl},this.getContextAttributes=function(){return _gl.getContextAttributes()},this.forceContextLoss=function(){var extension=extensions.get("WEBGL_lose_context");extension&&extension.loseContext()},this.forceContextRestore=function(){var extension=extensions.get("WEBGL_lose_context");extension&&extension.restoreContext()},this.getPixelRatio=function(){return _pixelRatio},this.setPixelRatio=function(value){void 0!==value&&(_pixelRatio=value,this.setSize(_width,_height,!1))}
vendor: 2,805 bytes, line 1
1,this.getSize=function(){return{width:_width,height:_height}},this.setSize=function(width,height,updateStyle){vr.isPresenting()?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(_width=width,_height=height,_canvas.width=width*_pixelRatio,_canvas.height=height*_pixelRatio,!1!==updateStyle&&(_canvas.style.width=width+"px",_canvas.style.height=height+"px"),this.setViewport(0,0,width,height))},this.getDrawingBufferSize=function(){return{width:_width*_pixelRatio,height:_height*_pixelRatio}},this.setDrawingBufferSize=function(width,height,pixelRatio){_width=width,_height=height,_pixelRatio=pixelRatio,_canvas.width=width*pixelRatio,_canvas.height=height*pixelRatio,this.setViewport(0,0,width,height)},this.getCurrentViewport=function(){return _currentViewport},this.setViewport=function(x,y,width,height){_viewport.set(x,_height-y-height,width,height),state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio))},this.setScissor=function(x,y,width,height){_scissor.set(x,_height-y-height,width,height),state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio))},this.setScissorTest=function(boolean){state.setScissorTest(_scissorTest=boolean)},this.getClearColor=function(){return background.getClearColor()},this.setClearColor=function(){background.setClearColor.apply(background,arguments)},this.getClearAlpha=function(){return background.getClearAlpha()},this.setClearAlpha=function(){background.setClearAlpha.apply(background,arguments)},this.clear=function(color,depth,stencil){var bits=0;(void 0===color||color)&&(bits|=16384),(void 0===depth||depth)&&(bits|=256),(void 0===stencil||stencil)&&(bits|=1024),_gl.clear(bits)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){_canvas.removeEventListener("webglcontextlost",onContextLost,!1),_canvas.removeEventListener("webglcontextrestored",onContextRestore,!1),renderLists.dispose(),renderStates.dispose(),properties.dispose(),objects.dispose(),vr.dispose(),animation.stop()},this.renderBufferImmediate=function(object,program){state.initAttributes();var buffers=properties.get(object);object.hasPositions&&!buffers.position&&(buffers.position=_gl.createBuffer()),object.hasNormals&&!buffers.normal&&(buffers.normal=_gl.createBuffer()),object.hasUvs&&!buffers.uv&&(buffers.uv=_gl.createBuffer()),object.hasColors&&!buffers.color&&(buffers.color=_gl.createBuffer());var programAttributes=program.getAttributes();object.hasPositions&&(_gl.bindBuffer(34962,buffers.position),_gl.bufferData(34962,object.positionArray,35048),state.enableAttribute(programAttributes.position),_gl.vertexAttribPointer(programAttributes.position,3,5126,!1,0,0)),object.hasNormals&&
vendor: 4,186 bytes, line 1
1(_gl.bindBuffer(34962,buffers.normal),_gl.bufferData(34962,object.normalArray,35048),state.enableAttribute(programAttributes.normal),_gl.vertexAttribPointer(programAttributes.normal,3,5126,!1,0,0)),object.hasUvs&&(_gl.bindBuffer(34962,buffers.uv),_gl.bufferData(34962,object.uvArray,35048),state.enableAttribute(programAttributes.uv),_gl.vertexAttribPointer(programAttributes.uv,2,5126,!1,0,0)),object.hasColors&&(_gl.bindBuffer(34962,buffers.color),_gl.bufferData(34962,object.colorArray,35048),state.enableAttribute(programAttributes.color),_gl.vertexAttribPointer(programAttributes.color,3,5126,!1,0,0)),state.disableUnusedAttributes(),_gl.drawArrays(4,0,object.count),object.count=0},this.renderBufferDirect=function(camera,fog,geometry,material,object,group){var frontFaceCW=object.isMesh&&object.normalMatrix.determinant()<0;state.setMaterial(material,frontFaceCW);var program=setProgram(camera,fog,material,object),updateBuffers=!1;_currentGeometryProgram.geometry===geometry.id&&_currentGeometryProgram.program===program.id&&_currentGeometryProgram.wireframe===(!0===material.wireframe)||(_currentGeometryProgram.geometry=geometry.id,_currentGeometryProgram.program=program.id,_currentGeometryProgram.wireframe=!0===material.wireframe,updateBuffers=!0),object.morphTargetInfluences&&(morphtargets.update(object,geometry,material,program),updateBuffers=!0);var index=geometry.index,position=geometry.attributes.position,rangeFactor=1,attribute;!0===material.wireframe&&(index=geometries.getWireframeAttribute(geometry),rangeFactor=2);var renderer=bufferRenderer;null!==index&&(attribute=attributes.get(index),(renderer=indexedBufferRenderer).setIndex(attribute)),updateBuffers&&(setupVertexAttributes(material,program,geometry),null!==index&&_gl.bindBuffer(34963,attribute.buffer));var dataCount=1/0;null!==index?dataCount=index.count:void 0!==position&&(dataCount=position.count);var rangeStart=geometry.drawRange.start*rangeFactor,rangeCount=geometry.drawRange.count*rangeFactor,groupStart=null!==group?group.start*rangeFactor:0,groupCount=null!==group?group.count*rangeFactor:1/0,drawStart=Math.max(rangeStart,groupStart),drawEnd=Math.min(dataCount,rangeStart+rangeCount,groupStart+groupCount)-1,drawCount=Math.max(0,drawEnd-drawStart+1);if(0!==drawCount){if(object.isMesh)if(!0===material.wireframe)state.setLineWidth(material.wireframeLinewidth*getTargetPixelRatio()),renderer.setMode(1);else switch(object.drawMode){case 0:renderer.setMode(4);break;case 1:renderer.setMode(5);break;case 2:renderer.setMode(6)}else if(object.isLine){var lineWidth=material.linewidth;void 0===lineWidth&&(lineWidth=1),state.setLineWidth(lineWidth*getTargetPixelRatio()),object.isLineSegments?renderer.setMode(1):object.isLineLoop?renderer.setMode(2):renderer.setMode(3)}else object.isPoints?renderer.setMode(0):object.isSprite&&renderer.setMode(4);geometry&&geometry.isInstancedBufferGeometry?geometry.maxInstancedCount>0&&renderer.renderInstances(geometry,drawStart,drawCount):renderer.render(drawStart,drawCount)}},this.compile=function(scene,camera){(currentRenderState=renderStates.get(scene,camera)).init(),scene.traverse((function(object){object.isLight&&(currentRenderState.pushLight(object),object.castShadow&¤tRenderState.pushShadow(object))})),currentRenderState.setupLights(camera),scene.traverse((function(object){if(object.material)if(Array.isArray(object.material))for(var i=0;i<object.material.length;i++)initMaterial(object.material[i],scene.fog,object);else initMaterial(object.material,scene.fog,object)}))};var onAnimationFrameCallback=null;function onAnimationFrame(time){vr.isPresenting()||onAnimationFrameCallback&&onAnimationFrameCallback(time)}var animation=new WebGLAnimation,warned;function projectObject(object,camera,sortObjects){if(!1!==object.visible){var visible;if(object.layers.test(camera.layers))if(object.isLight)currentRenderState.pushLight(object),object.castShadow&¤tRenderState.pushShadow(object);else if(object.isSprite){if(!object.frustumCulled||_frustum.intersectsSprite(object)){sortObjects&&_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);var geometry=objects.update(object),material=object.material;
1currentRenderList.push(object,geometry,material,_vector3.z,null)}}else if(object.isImmediateRenderObject)sortObjects&&_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix),currentRenderList.push(object,null,object.material,_vector3.z,null);else if((object.isMesh||object.isLine||object.isPoints)&&(object.isSkinnedMesh&&object.skeleton.update(),!object.frustumCulled||_frustum.intersectsObject(object))){sortObjects&&_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);var geometry=objects.update(object),material=object.material;if(Array.isArray(material))for(var groups=geometry.groups,i=0,l=groups.length;i<l;i++){var group=groups[i],groupMaterial=material[group.materialIndex];groupMaterial&&groupMaterial.visible&¤tRenderList.push(object,geometry,groupMaterial,_vector3.z,group)}else material.visible&¤tRenderList.push(object,geometry,material,_vector3.z,null)}for(var children=object.children,i=0,l=children.length;i<l;i++)projectObject(children[i],camera,sortObjects)}}function renderObjects(renderList,scene,camera,overrideMaterial){for(var i=0,l=renderList.length;i<l;i++){var renderItem=renderList[i],object=renderItem.object,geometry=renderItem.geometry,material=void 0===overrideMaterial?renderItem.material:overrideMaterial,group=renderItem.group;if(camera.isArrayCamera){_currentArrayCamera=camera;for(var cameras=camera.cameras,j=0,jl=cameras.length;j<jl;j++){var camera2=cameras[j];if(object.layers.test(camera2.layers)){if("viewport"in camera2)state.viewport(_currentViewport.copy(camera2.viewport));else{var bounds=camera2.bounds,x=bounds.x*_width,y=bounds.y*_height,width=bounds.z*_width,height=bounds.w*_height;state.viewport(_currentViewport.set(x,y,width,height).multiplyScalar(_pixelRatio))}currentRenderState.setupLights(camera2),renderObject(object,scene,camera2,geometry,material,group)}}}else _currentArrayCamera=null,renderObject(object,scene,camera,geometry,material,group)}}function renderObject(object,scene,camera,geometry,material,group){if(object.onBeforeRender(_this,scene,camera,geometry,material,group),currentRenderState=renderStates.get(scene,_currentArrayCamera||camera),object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,object.matrixWorld),object.normalMatrix.getNormalMatrix(object.modelViewMatrix),object.isImmediateRenderObject){state.setMaterial(material);var program=setProgram(camera,scene.fog,material,object);_currentGeometryProgram.geometry=null,_currentGeometryProgram.program=null,_currentGeometryProgram.wireframe=!1,renderObjectImmediate(object,program)}else _this.renderBufferDirect(camera,scene.fog,geometry,material,object,group);object.onAfterRender(_this,scene,camera,geometry,material,group),currentRenderState=renderStates.get(scene,_currentArrayCamera||camera)}function initMaterial(material,fog,object){var materialProperties=properties.get(material),lights=currentRenderState.state.lights,shadowsArray=currentRenderState.state.shadowsArray,lightsHash=materialProperties.lightsHash,lightsStateHash=lights.state.hash,parameters=programCache.getParameters(material,lights.state,shadowsArray,fog,_clipping.numPlanes,_clipping.numIntersection,object),code=programCache.getProgramCode(material,parameters),program=materialProperties.program,programChange=!0;if(void 0===program)material.addEventListener("dispose",onMaterialDispose);else if(program.code!==code)releaseMaterialProgramReference(material);else if(lightsHash.stateID!==lightsStateHash.stateID||lightsHash.directionalLength!==lightsStateHash.directionalLength||lightsHash.pointLength!==lightsStateHash.pointLength||lightsHash.spotLength!==lightsStateHash.spotLength||lightsHash.rectAreaLength!==lightsStateHash.rectAreaLength||lightsHash.hemiLength!==lightsStateHash.hemiLength||lightsHash.shadowsLength!==lightsStateHash.shadowsLength)lightsHash.stateID=lightsStateHash.stateID,lightsHash.directionalLength=lightsStateHash.directionalLength,lightsHash.pointLength=lightsStateHash.pointLength,lightsHash.spotLength=lightsStateHash.spotLength,lightsHash.rectAreaLength=lightsStateHash.rectAreaLength,lightsHash.hemiLength=lightsStateHash.hemiLength,lightsHash.shadowsLength=lightsStateHash.shadowsLength,programChange=!1;else{if(void 0!==parameters.shaderID)return;programChange=!1}if(programChange){if(parameters.shaderID){var shader=ShaderLib[parameters.shaderID];materialProperties.shader={name:material.type,uniforms:cloneUniforms(shader.uniforms),vertexShader:sh
vendor: 2,958 bytes, line 1
1ader.vertexShader,fragmentShader:shader.fragmentShader}}else materialProperties.shader={name:material.type,uniforms:material.uniforms,vertexShader:material.vertexShader,fragmentShader:material.fragmentShader};material.onBeforeCompile(materialProperties.shader,_this),code=programCache.getProgramCode(material,parameters),program=programCache.acquireProgram(material,materialProperties.shader,parameters,code),materialProperties.program=program,material.program=program}var programAttributes=program.getAttributes();if(material.morphTargets){material.numSupportedMorphTargets=0;for(var i=0;i<_this.maxMorphTargets;i++)programAttributes["morphTarget"+i]>=0&&material.numSupportedMorphTargets++}if(material.morphNormals){material.numSupportedMorphNormals=0;for(var i=0;i<_this.maxMorphNormals;i++)programAttributes["morphNormal"+i]>=0&&material.numSupportedMorphNormals++}var uniforms=materialProperties.shader.uniforms;(material.isShaderMaterial||material.isRawShaderMaterial)&&!0!==material.clipping||(materialProperties.numClippingPlanes=_clipping.numPlanes,materialProperties.numIntersection=_clipping.numIntersection,uniforms.clippingPlanes=_clipping.uniform),materialProperties.fog=fog,void 0===lightsHash&&(materialProperties.lightsHash=lightsHash={}),lightsHash.stateID=lightsStateHash.stateID,lightsHash.directionalLength=lightsStateHash.directionalLength,lightsHash.pointLength=lightsStateHash.pointLength,lightsHash.spotLength=lightsStateHash.spotLength,lightsHash.rectAreaLength=lightsStateHash.rectAreaLength,lightsHash.hemiLength=lightsStateHash.hemiLength,lightsHash.shadowsLength=lightsStateHash.shadowsLength,material.lights&&(uniforms.ambientLightColor.value=lights.state.ambient,uniforms.directionalLights.value=lights.state.directional,uniforms.spotLights.value=lights.state.spot,uniforms.rectAreaLights.value=lights.state.rectArea,uniforms.pointLights.value=lights.state.point,uniforms.hemisphereLights.value=lights.state.hemi,uniforms.directionalShadowMap.value=lights.state.directionalShadowMap,uniforms.directionalShadowMatrix.value=lights.state.directionalShadowMatrix,uniforms.spotShadowMap.value=lights.state.spotShadowMap,uniforms.spotShadowMatrix.value=lights.state.spotShadowMatrix,uniforms.pointShadowMap.value=lights.state.pointShadowMap,uniforms.pointShadowMatrix.value=lights.state.pointShadowMatrix);var progUniforms=materialProperties.program.getUniforms(),uniformsList=WebGLUniforms.seqWithValue(progUniforms.seq,uniforms);materialProperties.uniformsList=uniformsList}function setProgram(camera,fog,material,object){_usedTextureUnits=0;var materialProperties=properties.get(material),lights=currentRenderState.state.lights,lightsHash=materialProperties.lightsHash,lightsStateHash=lights.state.hash;if(_clippingEnabled&&(_localClippingEnabled||camera!==_currentCamera)){var useCache=camera===_currentCamera&&material.id===_currentMaterialId;_clipping.setState(material.clippingPlanes,material.clipIntersection,material.clipSh
vendor: 7,135 bytes, line 1
1adows,camera,materialProperties,useCache)}!1===material.needsUpdate&&(void 0===materialProperties.program?material.needsUpdate=!0:material.fog&&materialProperties.fog!==fog?material.needsUpdate=!0:(!material.lights||lightsHash.stateID===lightsStateHash.stateID&&lightsHash.directionalLength===lightsStateHash.directionalLength&&lightsHash.pointLength===lightsStateHash.pointLength&&lightsHash.spotLength===lightsStateHash.spotLength&&lightsHash.rectAreaLength===lightsStateHash.rectAreaLength&&lightsHash.hemiLength===lightsStateHash.hemiLength&&lightsHash.shadowsLength===lightsStateHash.shadowsLength)&&(void 0===materialProperties.numClippingPlanes||materialProperties.numClippingPlanes===_clipping.numPlanes&&materialProperties.numIntersection===_clipping.numIntersection)||(material.needsUpdate=!0)),material.needsUpdate&&(initMaterial(material,fog,object),material.needsUpdate=!1);var refreshProgram=!1,refreshMaterial=!1,refreshLights=!1,program=materialProperties.program,p_uniforms=program.getUniforms(),m_uniforms=materialProperties.shader.uniforms;if(state.useProgram(program.program)&&(refreshProgram=!0,refreshMaterial=!0,refreshLights=!0),material.id!==_currentMaterialId&&(_currentMaterialId=material.id,refreshMaterial=!0),refreshProgram||_currentCamera!==camera){if(p_uniforms.setValue(_gl,"projectionMatrix",camera.projectionMatrix),capabilities.logarithmicDepthBuffer&&p_uniforms.setValue(_gl,"logDepthBufFC",2/(Math.log(camera.far+1)/Math.LN2)),_currentCamera!==camera&&(_currentCamera=camera,refreshMaterial=!0,refreshLights=!0),material.isShaderMaterial||material.isMeshPhongMaterial||material.isMeshStandardMaterial||material.envMap){var uCamPos=p_uniforms.map.cameraPosition;void 0!==uCamPos&&uCamPos.setValue(_gl,_vector3.setFromMatrixPosition(camera.matrixWorld))}(material.isMeshPhongMaterial||material.isMeshLambertMaterial||material.isMeshBasicMaterial||material.isMeshStandardMaterial||material.isShaderMaterial||material.skinning)&&p_uniforms.setValue(_gl,"viewMatrix",camera.matrixWorldInverse)}if(material.skinning){p_uniforms.setOptional(_gl,object,"bindMatrix"),p_uniforms.setOptional(_gl,object,"bindMatrixInverse");var skeleton=object.skeleton;if(skeleton){var bones=skeleton.bones;if(capabilities.floatVertexTextures){if(void 0===skeleton.boneTexture){var size=Math.sqrt(4*bones.length);size=_Math.ceilPowerOfTwo(size),size=Math.max(size,4);var boneMatrices=new Float32Array(size*size*4);boneMatrices.set(skeleton.boneMatrices);var boneTexture=new DataTexture(boneMatrices,size,size,1023,1015);boneTexture.needsUpdate=!0,skeleton.boneMatrices=boneMatrices,skeleton.boneTexture=boneTexture,skeleton.boneTextureSize=size}p_uniforms.setValue(_gl,"boneTexture",skeleton.boneTexture),p_uniforms.setValue(_gl,"boneTextureSize",skeleton.boneTextureSize)}else p_uniforms.setOptional(_gl,skeleton,"boneMatrices")}}return refreshMaterial&&(p_uniforms.setValue(_gl,"toneMappingExposure",_this.toneMappingExposure),p_uniforms.setValue(_gl,"toneMappingWhitePoint",_this.toneMappingWhitePoint),material.lights&&markUniformsLightsNeedsUpdate(m_uniforms,refreshLights),fog&&material.fog&&refreshUniformsFog(m_uniforms,fog),material.isMeshBasicMaterial?refreshUniformsCommon(m_uniforms,material):material.isMeshLambertMaterial?(refreshUniformsCommon(m_uniforms,material),refreshUniformsLambert(m_uniforms,material)):material.isMeshPhongMaterial?(refreshUniformsCommon(m_uniforms,material),material.isMeshToonMaterial?refreshUniformsToon(m_uniforms,material):refreshUniformsPhong(m_uniforms,material)):material.isMeshStandardMaterial?(refreshUniformsCommon(m_uniforms,material),material.isMeshPhysicalMaterial?refreshUniformsPhysical(m_uniforms,material):refreshUniformsStandard(m_uniforms,material)):material.isMeshMatcapMaterial?(refreshUniformsCommon(m_uniforms,material),refreshUniformsMatcap(m_uniforms,material)):material.isMeshDepthMaterial?(refreshUniformsCommon(m_uniforms,material),refreshUniformsDepth(m_uniforms,material)):material.isMeshDistanceMaterial?(refreshUniformsCommon(m_uniforms,material),refreshUniformsDistance(m_uniforms,material)):material.isMeshNormalMaterial?(refreshUniformsCommon(m_uniforms,material),refreshUniformsNormal(m_uniforms,material)):material.isLineBasicMaterial?(refreshUniformsLine(m_uniforms,material),material.isLineDashedMaterial&&refreshUniformsDash(m_uniforms,material)):material.isPointsMaterial?refreshUniformsPoints(m_uniforms,material):material.isSpriteMaterial?refreshUniformsSprites(m_uniforms,material):material.isShadowMaterial&&(m_uniforms.color.value=material.color,m_uniforms.opacity.value=material.opacity),void 0!==m_uniforms.ltc_1&&(m_uniforms.ltc_1.value=UniformsLib.LTC_1),void 0!==m_uniforms.ltc_2&&(m_uniforms.ltc_2.value=UniformsLib.LTC_2),WebGLUniforms.upload(_gl,materialProperties.uniformsList,m_uniforms,_this)),material.isShaderMaterial&&!0===material.uniformsNeedUpdate&&(WebGLUniforms.upload(_gl,materialProperties.uniformsList,m_uniforms,_this),material.uniformsNeedUpdate=!1),material.isSpriteMaterial&&p_uniforms.setValue(_gl,"center",object.center),p_uniforms.setValue(_gl,"modelViewMatrix",object.modelViewMatrix),p_uniforms.setValue(_gl,"normalMatrix",object.normalMatrix),p_uniforms.setValue(_gl,"modelMatrix",object.matrixWorld),program}function refreshUniformsCommon(uniforms,material){var uvScaleMap;uniforms.opacity.value=material.opacity,material.color&&(uniforms.diffuse.value=material.color),material.emissive&&uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity),material.map&&(uniforms.map.value=material.map),material.alphaMap&&(uniforms.alphaMap.value=material.alphaMap),material.specularMap&&(uniforms.specularMap.value=material.specularMap),material.envMap&&(uniforms.envMap.value=material.envMap,uniforms.flipEnvMap.value=material.envMap.isCubeTexture?-1:1,uniforms.reflectivity.value=material.reflectivity,uniforms.refractionRatio.value=material.refractionRatio,uniforms.maxMipLevel.value=properties.get(material.envMap).__maxMipLevel),material.lightMap&&(uniforms.lightMap.value=material.lightMap,uniforms.lightMapIntensity.value=material.lightMapIntensity),material.aoMap&&(uniforms.aoMap.value=material.aoMap,uniforms.aoMapIntensity.value=material.aoMapIntensity),material.map?uvScaleMap=material.map:material.specularMap?uvScaleMap=material.specularMap:material.displacementMap?uvScaleMap=material.displacementMap:material.normalMap?uvScaleMap=material.normalMap:material.bumpMap?uvScaleMap=material.bumpMap:material.roughnessMap?uvScaleMap=material.roughnessMap:material.metalnessMap?uvScaleMap=material.metalnessMap:material.alphaMap?uvScaleMap=material.alphaMap:material.emissiveMap&&(uvScaleMap=material.emissiveMap),void 0!==uvScaleMap&&(uvScaleMap.isWebGLRenderTarget&&(uvScaleMap=uvScaleMap.texture),!0===uvScaleMap.matrixAutoUpdate&&uvScaleMap.updateMatrix(),uniforms.uvTransform.value.copy(uvScaleMap.matrix))}function refreshUniformsLine(uniforms,material){uniforms.diffuse.value=material.color,uniforms.opacity.value=material.opacity}function refreshUniformsDash(uniforms,material){uniforms.dashSize.value=material.dashSize,uniforms.totalSize.value=material.dashSize
vendor: 22,702 bytes, line 1
1+material.gapSize,uniforms.scale.value=material.scale}function refreshUniformsPoints(uniforms,material){uniforms.diffuse.value=material.color,uniforms.opacity.value=material.opacity,uniforms.size.value=material.size*_pixelRatio,uniforms.scale.value=.5*_height,uniforms.map.value=material.map,null!==material.map&&(!0===material.map.matrixAutoUpdate&&material.map.updateMatrix(),uniforms.uvTransform.value.copy(material.map.matrix))}function refreshUniformsSprites(uniforms,material){uniforms.diffuse.value=material.color,uniforms.opacity.value=material.opacity,uniforms.rotation.value=material.rotation,uniforms.map.value=material.map,null!==material.map&&(!0===material.map.matrixAutoUpdate&&material.map.updateMatrix(),uniforms.uvTransform.value.copy(material.map.matrix))}function refreshUniformsFog(uniforms,fog){uniforms.fogColor.value=fog.color,fog.isFog?(uniforms.fogNear.value=fog.near,uniforms.fogFar.value=fog.far):fog.isFogExp2&&(uniforms.fogDensity.value=fog.density)}function refreshUniformsLambert(uniforms,material){material.emissiveMap&&(uniforms.emissiveMap.value=material.emissiveMap)}function refreshUniformsPhong(uniforms,material){uniforms.specular.value=material.specular,uniforms.shininess.value=Math.max(material.shininess,1e-4),material.emissiveMap&&(uniforms.emissiveMap.value=material.emissiveMap),material.bumpMap&&(uniforms.bumpMap.value=material.bumpMap,uniforms.bumpScale.value=material.bumpScale,1===material.side&&(uniforms.bumpScale.value*=-1)),material.normalMap&&(uniforms.normalMap.value=material.normalMap,uniforms.normalScale.value.copy(material.normalScale),1===material.side&&uniforms.normalScale.value.negate()),material.displacementMap&&(uniforms.displacementMap.value=material.displacementMap,uniforms.displacementScale.value=material.displacementScale,uniforms.displacementBias.value=material.displacementBias)}function refreshUniformsToon(uniforms,material){refreshUniformsPhong(uniforms,material),material.gradientMap&&(uniforms.gradientMap.value=material.gradientMap)}function refreshUniformsStandard(uniforms,material){uniforms.roughness.value=material.roughness,uniforms.metalness.value=material.metalness,material.roughnessMap&&(uniforms.roughnessMap.value=material.roughnessMap),material.metalnessMap&&(uniforms.metalnessMap.value=material.metalnessMap),material.emissiveMap&&(uniforms.emissiveMap.value=material.emissiveMap),material.bumpMap&&(uniforms.bumpMap.value=material.bumpMap,uniforms.bumpScale.value=material.bumpScale,1===material.side&&(uniforms.bumpScale.value*=-1)),material.normalMap&&(uniforms.normalMap.value=material.normalMap,uniforms.normalScale.value.copy(material.normalScale),1===material.side&&uniforms.normalScale.value.negate()),material.displacementMap&&(uniforms.displacementMap.value=material.displacementMap,uniforms.displacementScale.value=material.displacementScale,uniforms.displacementBias.value=material.displacementBias),material.envMap&&(uniforms.envMapIntensity.value=material.envMapIntensity)}function refreshUniformsPhysical(uniforms,material){refreshUniformsStandard(uniforms,material),uniforms.reflectivity.value=material.reflectivity,uniforms.clearCoat.value=material.clearCoat,uniforms.clearCoatRoughness.value=material.clearCoatRoughness}function refreshUniformsMatcap(uniforms,material){material.matcap&&(uniforms.matcap.value=material.matcap),material.bumpMap&&(uniforms.bumpMap.value=material.bumpMap,uniforms.bumpScale.value=material.bumpScale,1===material.side&&(uniforms.bumpScale.value*=-1)),material.normalMap&&(uniforms.normalMap.value=material.normalMap,uniforms.normalScale.value.copy(material.normalScale),1===material.side&&uniforms.normalScale.value.negate()),material.displacementMap&&(uniforms.displacementMap.value=material.displacementMap,uniforms.displacementScale.value=material.displacementScale,uniforms.displacementBias.value=material.displacementBias)}function refreshUniformsDepth(uniforms,material){material.displacementMap&&(uniforms.displacementMap.value=material.displacementMap,uniforms.displacementScale.value=material.displacementScale,uniforms.displacementBias.value=material.displacementBias)}function refreshUniformsDistance(uniforms,material){material.displacementMap&&(uniforms.displacementMap.value=material.displacementMap,uniforms.displacementScale.value=material.displacementScale,uniforms.displacementBias.value=material.displacementBias),uniforms.referencePosition.value.copy(material.referencePosition),uniforms.nearDistance.value=material.nearDistance,uniforms.farDistance.value=material.farDistance}function refreshUniformsNormal(uniforms,material){material.bumpMap&&(uniforms.bumpMap.value=material.bumpMap,uniforms.bumpScale.value=material.bumpScale,1===material.side&&(uniforms.bumpScale.value*=-1)),material.normalMap&&(uniforms.normalMap.value=material.normalMap,uniforms.normalScale.value.copy(material.normalScale),1===material.side&&uniforms.normalScale.value.negate()),material.displacementMap&&(uniforms.displacementMap.value=material.displacementMap,uniforms.displacementScale.value=material.displacementScale,uniforms.displacementBias.value=material.displacementBias)}function markUniformsLightsNeedsUpdate(uniforms,value){uniforms.ambientLightColor.needsUpdate=value,uniforms.directionalLights.needsUpdate=value,uniforms.pointLights.needsUpdate=value,uniforms.spotLights.needsUpdate=value,uniforms.rectAreaLights.needsUpdate=value,uniforms.hemisphereLights.needsUpdate=value}function allocTextureUnit(){var textureUnit=_usedTextureUnits;return textureUnit>=capabilities.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+textureUnit+" texture units while this GPU supports only "+capabilities.maxTextures),_usedTextureUnits+=1,textureUnit}animation.setAnimationLoop(onAnimationFrame),"undefined"!=typeof window&&animation.setContext(window),this.setAnimationLoop=function(callback){onAnimationFrameCallback=callback,vr.setAnimationLoop(callback),animation.start()},this.render=function(scene,camera,renderTarget,forceClear){if(camera&&camera.isCamera){if(!_isContextLost){_currentGeometryProgram.geometry=null,_currentGeometryProgram.program=null,_currentGeometryProgram.wireframe=!1,_currentMaterialId=-1,_currentCamera=null,!0===scene.autoUpdate&&scene.updateMatrixWorld(),null===camera.parent&&camera.updateMatrixWorld(),vr.enabled&&(camera=vr.getCamera(camera)),(currentRenderState=renderStates.get(scene,camera)).init(),scene.onBeforeRender(_this,scene,camera,renderTarget),_projScreenMatrix.multiplyMatrices(camera.projectionMatrix,camera.matrixWorldInverse),_frustum.setFromMatrix(_projScreenMatrix),_localClippingEnabled=this.localClippingEnabled,_clippingEnabled=_clipping.init(this.clippingPlanes,_localClippingEnabled,camera),(currentRenderList=renderLists.get(scene,camera)).init(),projectObject(scene,camera,_this.sortObjects),!0===_this.sortObjects&¤tRenderList.sort(),_clippingEnabled&&_clipping.beginShadows();var shadowsArray=currentRenderState.state.shadowsArray;shadowMap.render(shadowsArray,scene,camera),currentRenderState.setupLights(camera),_clippingEnabled&&_clipping.endShadows(),this.info.autoReset&&this.info.reset(),void 0===renderTarget&&(renderTarget=null),this.setRenderTarget(renderTarget),background.render(currentRenderList,scene,camera,forceClear);var opaqueObjects=currentRenderList.opaque,transparentObjects=currentRenderList.transparent;if(scene.overrideMaterial){var overrideMaterial=scene.overrideMaterial;opaqueObjects.length&&renderObjects(opaqueObjects,scene,camera,overrideMaterial),transparentObjects.length&&renderObjects(transparentObjects,scene,camera,overrideMaterial)}else opaqueObjects.length&&renderObjects(opaqueObjects,scene,camera),transparentObjects.length&&renderObjects(transparentObjects,scene,camera);renderTarget&&textures.updateRenderTargetMipmap(renderTarget),state.buffers.depth.setTest(!0),state.buffers.depth.setMask(!0),state.buffers.color.setMask(!0),state.setPolygonOffset(!1),scene.onAfterRender(_this,scene,camera),vr.enabled&&vr.submitFrame(),currentRenderList=null,currentRenderState=null}}else console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.")},this.allocTextureUnit=allocTextureUnit,this.setTexture2D=(warned=!1,function setTexture2D(texture,slot){texture&&texture.isWebGLRenderTarget&&(warned||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),warned=!0),texture=texture.texture),textures.setTexture2D(texture,slot)}),this.setTexture3D=function setTexture3D(texture,slot){textures.setTexture3D(texture,slot)},this.setTexture=function(){var warned=!1;return function setTexture(texture,slot){warned||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),warned=!0),textures.setTexture2D(texture,slot)}}(),this.setTextureCube=function(){var warned=!1;return function setTextureCube(texture,slot){texture&&texture.isWebGLRenderTargetCube&&(warned||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),warned=!0),texture=texture.texture),texture&&texture.isCubeTexture||Array.isArray(texture.image)&&6===texture.image.length?textures.setTextureCube(texture,slot):textures.setTextureCubeDynamic(texture,slot)}}(),this.setFramebuffer=function(value){_framebuffer=value},this.getRenderTarget=function(){return _currentRenderTarget},this.setRenderTarget=function(renderTarget){_currentRenderTarget=renderTarget,renderTarget&&void 0===properties.get(renderTarget).__webglFramebuffer&&textures.setupRenderTarget(renderTarget);var framebuffer=_framebuffer,isCube=!1;if(renderTarget){var __webglFramebuffer=properties.get(renderTarget).__webglFramebuffer;renderTarget.isWebGLRenderTargetCube?(framebuffer=__webglFramebuffer[renderTarget.activeCubeFace],isCube=!0):framebuffer=__webglFramebuffer,_currentViewport.copy(renderTarget.viewport),_currentScissor.copy(renderTarget.scissor),_currentScissorTest=renderTarget.scissorTest}else _currentViewport.copy(_viewport).multiplyScalar(_pixelRatio),_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio),_currentScissorTest=_scissorTest;if(_currentFramebuffer!==framebuffer&&(_gl.bindFramebuffer(36160,framebuffer),_currentFramebuffer=framebuffer),state.viewport(_currentViewport),state.scissor(_currentScissor),state.setScissorTest(_currentScissorTest),isCube){var textureProperties=properties.get(renderTarget.texture);_gl.framebufferTexture2D(36160,36064,34069+renderTarget.activeCubeFace,textureProperties.__webglTexture,renderTarget.activeMipMapLevel)}},this.readRenderTargetPixels=function(renderTarget,x,y,width,height,buffer){if(renderTarget&&renderTarget.isWebGLRenderTarget){var framebuffer=properties.get(renderTarget).__webglFramebuffer;if(framebuffer){var restore=!1;framebuffer!==_currentFramebuffer&&(_gl.bindFramebuffer(36160,framebuffer),restore=!0);try{var texture=renderTarget.texture,textureFormat=texture.format,textureType=texture.type;if(1023!==textureFormat&&utils.convert(textureFormat)!==_gl.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(1009===textureType||utils.convert(textureType)===_gl.getParameter(35738)||1015===textureType&&(capabilities.isWebGL2||extensions.get("OES_texture_float")||extensions.get("WEBGL_color_buffer_float"))||1016===textureType&&(capabilities.isWebGL2?extensions.get("EXT_color_buffer_float"):extensions.get("EXT_color_buffer_half_float"))))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===_gl.checkFramebufferStatus(36160)?x>=0&&x<=renderTarget.width-width&&y>=0&&y<=renderTarget.height-height&&_gl.readPixels(x,y,width,height,utils.convert(textureFormat),utils.convert(textureType),buffer):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{restore&&_gl.bindFramebuffer(36160,_currentFramebuffer)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")},this.copyFramebufferToTexture=function(position,texture,level){var width=texture.image.width,height=texture.image.height,glFormat=utils.convert(texture.format);this.setTexture2D(texture,0),_gl.copyTexImage2D(3553,level||0,glFormat,position.x,position.y,width,height,0)},this.copyTextureToTexture=function(position,srcTexture,dstTexture,level){var width=srcTexture.image.width,height=srcTexture.image.height,glFormat=utils.convert(dstTexture.format),glType=utils.convert(dstTexture.type);this.setTexture2D(dstTexture,0),srcTexture.isDataTexture?_gl.texSubImage2D(3553,level||0,position.x,position.y,width,height,glFormat,glType,srcTexture.image.data):_gl.texSubImage2D(3553,level||0,position.x,position.y,glFormat,glType,srcTexture.image)}}function FogExp2(color,density){this.name="",this.color=new Color(color),this.density=void 0!==density?density:25e-5}function Fog(color,near,far){this.name="",this.color=new Color(color),this.near=void 0!==near?near:1,this.far=void 0!==far?far:1e3}function Scene(){Object3D.call(this),this.type="Scene",this.background=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0}function InterleavedBuffer(array,stride){this.array=array,this.stride=stride,this.count=void 0!==array?array.length/stride:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.version=0}function InterleavedBufferAttribute(interleavedBuffer,itemSize,offset,normalized){this.data=interleavedBuffer,this.itemSize=itemSize,this.offset=offset,this.normalized=!0===normalized}function SpriteMaterial(parameters){Material.call(this),this.type="SpriteMaterial",this.color=new Color(16777215),this.map=null,this.rotation=0,this.sizeAttenuation=!0,this.lights=!1,this.transparent=!0,this.setValues(parameters)}function Sprite(material){if(Object3D.call(this),this.type="Sprite",void 0===geometry){geometry=new BufferGeometry;var float32Array,interleavedBuffer=new InterleavedBuffer(new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),5);geometry.setIndex([0,1,2,0,2,3]),geometry.addAttribute("position",new InterleavedBufferAttribute(interleavedBuffer,3,0,!1)),geometry.addAttribute("uv",new InterleavedBufferAttribute(interleavedBuffer,2,3,!1))}this.geometry=geometry,this.material=void 0!==material?material:new SpriteMaterial,this.center=new Vector2(.5,.5)}function LOD(){Object3D.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function SkinnedMesh(geometry,material){geometry&&geometry.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),Mesh.call(this,geometry,material),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Matrix4,this.bindMatrixInverse=new Matrix4}function Skeleton(bones,boneInverses){if(bones=bones||[],this.bones=bones.slice(0),this.boneMatrices=new Float32Array(16*this.bones.length),void 0===boneInverses)this.calculateInverses();else if(this.bones.length===boneInverses.length)this.boneInverses=boneInverses.slice(0);else{console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[];for(var i=0,il=this.bones.length;i<il;i++)this.boneInverses.push(new Matrix4)}}function Bone(){Object3D.call(this),this.type="Bone"}function LineBasicMaterial(parameters){Material.call(this),this.type="LineBasicMaterial",this.color=new Color(16777215),this.linewidth=1,this.linecap="round",this.linejoin="round",this.lights=!1,this.setValues(parameters)}function Line(geometry,material,mode){1===mode&&console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead."),Object3D.call(this),this.type="Line",this.geometry=void 0!==geometry?geometry:new BufferGeometry,this.material=void 0!==material?material:new LineBasicMaterial({color:16777215*Math.random()})}function LineSegments(geometry,material){Line.call(this,geometry,material),this.type="LineSegments"}function LineLoop(geometry,material){Line.call(this,geometry,material),this.type="LineLoop"}function PointsMaterial(parameters){Material.call(this),this.type="PointsMaterial",this.color=new Color(16777215),this.map=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.lights=!1,this.setValues(parameters)}function Points(geometry,material){Object3D.call(this),this.type="Points",this.geometry=void 0!==geometry?geometry:new BufferGeometry,this.material=void 0!==material?material:new PointsMaterial({color:16777215*Math.random()})}function VideoTexture(video,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){Texture.call(this,video,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy),this.format=void 0!==format?format:1022,this.minFilter=void 0!==minFilter?minFilter:1006,this.magFilter=void 0!==magFilter?magFilter:1006,this.generateMipmaps=!1}function CompressedTexture(mipmaps,width,height,format,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,encoding){Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding),this.image={width:width,height:height},this.mipmaps=mipmaps,this.flipY=!1,this.generateMipmaps=!1}function CanvasTexture(canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){Texture.call(this,canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy),this.needsUpdate=!0}function DepthTexture(width,height,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,format){if(1026!==(format=void 0!==format?format:1026)&&1027!==format)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===type&&1026===format&&(type=1012),void 0===type&&1027===format&&(type=1020),Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy),this.image={width:width,height:height},this.magFilter=void 0!==magFilter?magFilter:1003,this.minFilter=void 0!==minFilter?minFilter:1003,this.flipY=!1,this.generateMipmaps=!1}function WireframeGeometry(geometry){BufferGeometry.call(this),this.type="WireframeGeometry";var vertices=[],i,j,l,o,ol,edge=[0,0],edges={},e,edge1,edge2,key,keys=["a","b","c"],vertex;if(geometry&&geometry.isGeometry){var faces=geometry.faces;for(i=0,l=faces.length;i<l;i++){var face=faces[i];for(j=0;j<3;j++)edge1=face[keys[j]],edge2=face[keys[(j+1)%3]],edge[0]=Math.min(edge1,edge2),edge[1]=Math.max(edge1,edge2),void 0===edges[key=edge[0]+","+edge[1]]&&(edges[key]={index1:edge[0],index2:edge[1]})}for(key in edges)e=edges[key],vertex=geometry.vertices[e.index1],vertices.push(vertex.x,vertex.y,vertex.z),vertex=geometry.vertices[e.index2],vertices.push(vertex.x,vertex.y,vertex.z)}else if(geometry&&geometry.isBufferGeometry){var position,indices,groups,group,start,count,index1,index2;if(vertex=new Vector3,null!==geometry.index){for(position=geometry.attributes.position,indices=geometry.index,0===(groups=geometry.groups).length&&(groups=[{start:0,count:indices.count,materialIndex:0}]),o=0,ol=groups.length;o<ol;++o)for(i=start=(group=groups[o]).start,l=start+(count=group.count);i<l;i+=3)for(j=0;j<3;j++)edge1=indices.getX(i+j),edge2=indices.getX(i+(j+1)%3),edge[0]=Math.min(edge1,edge2),edge[1]=Math.max(edge1,edge2),void 0===edges[key=edge[0]+","+edge[1]]&&(edges[key]={index1:edge[0],index2:edge[1]});for(key in edges)e=edges[key],vertex.fromBufferAttribute(position,e.index1),vertices.push(vertex.x,vertex.y,vertex.z),vertex.fromBufferAttribute(position,e.index2),vertices.push(vertex.x,vertex.y,vertex.z)}else for(i=0,l=(position=geometry.attributes.position).count/3;i<l;i++)for(j=0;j<3;j++)index1=3*i+j,vertex.fromBufferAttribute(position,index1),vertices.push(vertex.x,vertex.y,vertex.z),index2=3*i+(j+1)%3,vertex.fromBufferAttribute(position,index2),vertices.push(vertex.x,vertex.y,vertex.z)}this.addAttribute("position",new Float32BufferAttribute(vertices,3))}function ParametricGeometry(func,slices,stacks){Geometry.call(this),this.type="ParametricGeometry",this.parameters={func:func,slices:slices,stacks:stacks},this.fromBufferGeometry(new ParametricBufferGeometry(func,slices,stacks)),this.mergeVertices()}function ParametricBufferGeometry(func,slices,stacks){BufferGeometry.call(this),this.type="ParametricBufferGeometry",this.parameters={func:func,slices:slices,stacks:stacks};var indices=[],vertices=[],normals=[],uvs=[],EPS=1e-5,normal=new Vector3,p0=new Vector3,p1=new Vector3,pu=new Vector3,pv=new Vector3,i,j;func.length<3&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");var sliceCount=slices+1;for(i=0;i<=stacks;i++){var v=i/stacks;for(j=0;j<=slices;j++){var u=j/slices;func(u,v,p0),vertices.push(p0.x,p0.y,p0.z),u-EPS>=0?(func(u-EPS,v,p1),pu.subVectors(p0,p1)):(func(u+EPS,v,p1),pu.subVectors(p1,p0)),v-EPS>=0?(func(u,v-EPS,p1),pv.subVectors(p0,p1)):(func(u,v+EPS,p1),pv.subVectors(p1,p0)),normal.crossVectors(pu,pv).normalize(),normals.push(normal.x,normal.y,normal.z),uvs.push(u,v)}}for(i=0;i<stacks;i++)for(j=0;j<slices;j++){var a=i*sliceCount+j,b=i*sliceCount+j+1,c=(i+1)*sliceCount+j+1,d=(i+1)*sliceCount+j;indices.push(a,b,d),indices.push(b,c,d)}this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function PolyhedronGeometry(vertices,indices,radius,detail){Geometry.call(this),this.type="PolyhedronGeometry",this.parameters={vertices:vertices,indices:indices,radius:radius,detail:detail},this.fromBufferGeometry(new PolyhedronBufferGeometry(vertices,indices,radius,detail)),this.mergeVertices()}function PolyhedronBufferGeometry(vertices,indices,radius,detail){BufferGeometry.call(this),this.type="PolyhedronBufferGeometry",this.parameters={vertices:vertices,indices:indices,radius:radius,detail:detail},radius=radius||1;var vertexBuffer=[],uvBuffer=[];function subdivide(detail){for(var a=new Vector3,b=new Vector3,c=new Vector3,i=0;i<indices.length;i+=3)getVertexByIndex(indices[i+0],a),getVertexByIndex(indices[i+1],b),getVertexByIndex(indices[i+2],c),subdivideFace(a,b,c,detail)}function subdivideFace(a,b,c,detail){var cols=Math.pow(2,detail),v=[],i,j;for(i=0;i<=cols;i++){v[i]=[];var aj=a.clone().lerp(c,i/cols),bj=b.clone().lerp(c,i/cols),rows=cols-i;for(j=0;j<=rows;j++)v[i][j]=0===j&&i===cols?aj:aj.clone().lerp(bj,j/rows)}for(i=0;i<cols;i++)for(j=0;j<2*(cols-i)-1;j++){var k=Math.floor(j/2);j%2==0?(pushVertex(v[i][k+1]),pushVertex(v[i+1][k]),pushVertex(v[i][k])):(pushVertex(v[i][k+1]),pushVertex(v[i+1][k+1]),pushVertex(v[i+1][k]))}}
vendor: 8,426 bytes, line 1
1function appplyRadius(radius){for(var vertex=new Vector3,i=0;i<vertexBuffer.length;i+=3)vertex.x=vertexBuffer[i+0],vertex.y=vertexBuffer[i+1],vertex.z=vertexBuffer[i+2],vertex.normalize().multiplyScalar(radius),vertexBuffer[i+0]=vertex.x,vertexBuffer[i+1]=vertex.y,vertexBuffer[i+2]=vertex.z}function generateUVs(){for(var vertex=new Vector3,i=0;i<vertexBuffer.length;i+=3){vertex.x=vertexBuffer[i+0],vertex.y=vertexBuffer[i+1],vertex.z=vertexBuffer[i+2];var u=azimuth(vertex)/2/Math.PI+.5,v=inclination(vertex)/Math.PI+.5;uvBuffer.push(u,1-v)}correctUVs(),correctSeam()}function correctSeam(){for(var i=0;i<uvBuffer.length;i+=6){var x0=uvBuffer[i+0],x1=uvBuffer[i+2],x2=uvBuffer[i+4],max=Math.max(x0,x1,x2),min=Math.min(x0,x1,x2);max>.9&&min<.1&&(x0<.2&&(uvBuffer[i+0]+=1),x1<.2&&(uvBuffer[i+2]+=1),x2<.2&&(uvBuffer[i+4]+=1))}}function pushVertex(vertex){vertexBuffer.push(vertex.x,vertex.y,vertex.z)}function getVertexByIndex(index,vertex){var stride=3*index;vertex.x=vertices[stride+0],vertex.y=vertices[stride+1],vertex.z=vertices[stride+2]}function correctUVs(){for(var a=new Vector3,b=new Vector3,c=new Vector3,centroid=new Vector3,uvA=new Vector2,uvB=new Vector2,uvC=new Vector2,i=0,j=0;i<vertexBuffer.length;i+=9,j+=6){a.set(vertexBuffer[i+0],vertexBuffer[i+1],vertexBuffer[i+2]),b.set(vertexBuffer[i+3],vertexBuffer[i+4],vertexBuffer[i+5]),c.set(vertexBuffer[i+6],vertexBuffer[i+7],vertexBuffer[i+8]),uvA.set(uvBuffer[j+0],uvBuffer[j+1]),uvB.set(uvBuffer[j+2],uvBuffer[j+3]),uvC.set(uvBuffer[j+4],uvBuffer[j+5]),centroid.copy(a).add(b).add(c).divideScalar(3);var azi=azimuth(centroid);correctUV(uvA,j+0,a,azi),correctUV(uvB,j+2,b,azi),correctUV(uvC,j+4,c,azi)}}function correctUV(uv,stride,vector,azimuth){azimuth<0&&1===uv.x&&(uvBuffer[stride]=uv.x-1),0===vector.x&&0===vector.z&&(uvBuffer[stride]=azimuth/2/Math.PI+.5)}function azimuth(vector){return Math.atan2(vector.z,-vector.x)}function inclination(vector){return Math.atan2(-vector.y,Math.sqrt(vector.x*vector.x+vector.z*vector.z))}subdivide(detail=detail||0),appplyRadius(radius),generateUVs(),this.addAttribute("position",new Float32BufferAttribute(vertexBuffer,3)),this.addAttribute("normal",new Float32BufferAttribute(vertexBuffer.slice(),3)),this.addAttribute("uv",new Float32BufferAttribute(uvBuffer,2)),0===detail?this.computeVertexNormals():this.normalizeNormals()}function TetrahedronGeometry(radius,detail){Geometry.call(this),this.type="TetrahedronGeometry",this.parameters={radius:radius,detail:detail},this.fromBufferGeometry(new TetrahedronBufferGeometry(radius,detail)),this.mergeVertices()}function TetrahedronBufferGeometry(radius,detail){var vertices=[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],indices=[2,1,0,0,3,2,1,3,0,2,3,1];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail),this.type="TetrahedronBufferGeometry",this.parameters={radius:radius,detail:detail}}function OctahedronGeometry(radius,detail){Geometry.call(this),this.type="OctahedronGeometry",this.parameters={radius:radius,detail:detail},this.fromBufferGeometry(new OctahedronBufferGeometry(radius,detail)),this.mergeVertices()}function OctahedronBufferGeometry(radius,detail){var vertices=[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],indices=[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail),this.type="OctahedronBufferGeometry",this.parameters={radius:radius,detail:detail}}function IcosahedronGeometry(radius,detail){Geometry.call(this),this.type="IcosahedronGeometry",this.parameters={radius:radius,detail:detail},this.fromBufferGeometry(new IcosahedronBufferGeometry(radius,detail)),this.mergeVertices()}function IcosahedronBufferGeometry(radius,detail){var t=(1+Math.sqrt(5))/2,vertices=[-1,t,0,1,t,0,-1,-t,0,1,-t,0,0,-1,t,0,1,t,0,-1,-t,0,1,-t,t,0,-1,t,0,1,-t,0,-1,-t,0,1],indices=[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail),this.type="IcosahedronBufferGeometry",this.parameters={radius:radius,detail:detail}}function DodecahedronGeometry(radius,detail){Geometry.call(this),this.type="DodecahedronGeometry",this.parameters={radius:radius,detail:detail},this.fromBufferGeometry(new DodecahedronBufferGeometry(radius,detail)),this.mergeVertices()}function DodecahedronBufferGeometry(radius,detail){var t=(1+Math.sqrt(5))/2,r=1/t,vertices=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-t,0,-r,t,0,r,-t,0,r,t,-r,-t,0,-r,t,0,r,-t,0,r,t,0,-t,0,-r,t,0,-r,-t,0,r,t,0,r],indices=[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail),this.type="DodecahedronBufferGeometry",this.parameters={radius:radius,detail:detail}}function TubeGeometry(path,tubularSegments,radius,radialSegments,closed,taper){Geometry.call(this),this.type="TubeGeometry",this.parameters={path:path,tubularSegments:tubularSegments,radius:radius,radialSegments:radialSegments,closed:closed},void 0!==taper&&console.warn("THREE.TubeGeometry: taper has been removed.");var bufferGeometry=new TubeBufferGeometry(path,tubularSegments,radius,radialSegments,closed);this.tangents=bufferGeometry.tangents,this.normals=bufferGeometry.normals,this.binormals=bufferGeometry.binormals,this.fromBufferGeometry(bufferGeometry),this.mergeVertices()}function TubeBufferGeometry(path,tubularSegments,radius,radialSegments,closed){BufferGeometry.call(this),this.type="TubeBufferGeometry",this.parameters={path:path,tubularSegments:tubularSegments,radius:radius,radialSegments:radialSegments,closed:closed},tubularSegments=tubularSegments||64,radius=radius||1,radialSegments=radialSegments||8,closed=closed||!1;var frames=path.computeFrenetFrames(tubularSegments,closed);this.tangents=frames.tangents,this.normals=frames.normals,this.binormals=frames.binormals;var vertex=new Vector3,normal=new Vector3,uv=new Vector2,P=new Vector3,i,j,vertices=[],normals=[],uvs=[],indices=[];function generateBufferData(){for(i=0;i<tubularSegments;i++)generateSegment(i);generateSegment(!1===closed?tubularSegments:0),generateUVs(),generateIndices()}function generateSegment(i){P=path.getPointAt(i/tubularSegments,P);var N=frames.normals[i],B=frames.binormals[i];for(j=0;j<=radialSegments;j++){var v=j/radialSegments*Math.PI*2,sin=Math.sin(v),cos=-Math.cos(v);normal.x=cos*N.x+sin*B.x,normal.y=cos*N.y+sin*B.y,normal.z=cos*N.z+sin*B.z,normal.normalize(),normals.push(normal.x,normal.y,normal.z),vertex.x=P.x+radius*normal.x,vertex.y=P.y+radius*normal.y,vertex.z=P.z+radius*normal.z,vertices.push(vertex.x,vertex.y,vertex.z)}}function generateIndices(){for(j=1;j<=tubularSegments;j++)for(i=1;i<=radialSegments;i++){var a=(radialSegments+1)*(j-1)+(i-1),b=(radialSegments+1)*j+(i-1),c=(radialSegments+1)*j+i,d=(radialSegments+1)*(j-1)+i;indices.push(a,b,d),indices.push(b,c,d)}}function generateUVs(){for(i=0;i<=tubularSegments;i++)for(j=0;j<=radialSegments;j++)uv.x=i/tubularSegments,uv.y=j/radialSegments,uvs.push(uv.x,uv.y)}generateBufferData(),this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function TorusKnotGeometry(radius,tube,tubularSegments,radialSegments,p,q,heightScale){Geometry.call(this),this.type="TorusKnotGeometry",this.parameters={radius:radius,tube:tube,tubularSegments:tubularSegments,radialSegments:radialSegments,p:p,q:q},void 0!==heightScale&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."),this.fromBufferGeometry(new TorusKnotBufferGeometry(radius,tube,tubularSegments,radialSegments,p,q)),this.mergeVertices()}function TorusKnotBufferGeometry(radius,tube,tubularSegments,radialSegments,p,q){BufferGeometry.call(this),this.type="TorusKnotBufferGeometry",this.parameters={radius:radius,tube:tube,tubularSegments:tubularSegments,radialSegments:radialSegments,p:p,q:q},radius=radius||1,tube=tube||.4,tubularSegments=Math.floor(tubularSegments)||64,radialSegments=Math.floor(radialSegments)||8,p=p||2,q=q||3;var indices=[],vertices=[],normals=[],uvs=[],i,j,vertex=new Vector3,
vendor: 8,339 bytes, line 1
1normal=new Vector3,P1=new Vector3,P2=new Vector3,B=new Vector3,T=new Vector3,N=new Vector3;for(i=0;i<=tubularSegments;++i){var u=i/tubularSegments*p*Math.PI*2;for(calculatePositionOnCurve(u,p,q,radius,P1),calculatePositionOnCurve(u+.01,p,q,radius,P2),T.subVectors(P2,P1),N.addVectors(P2,P1),B.crossVectors(T,N),N.crossVectors(B,T),B.normalize(),N.normalize(),j=0;j<=radialSegments;++j){var v=j/radialSegments*Math.PI*2,cx=-tube*Math.cos(v),cy=tube*Math.sin(v);vertex.x=P1.x+(cx*N.x+cy*B.x),vertex.y=P1.y+(cx*N.y+cy*B.y),vertex.z=P1.z+(cx*N.z+cy*B.z),vertices.push(vertex.x,vertex.y,vertex.z),normal.subVectors(vertex,P1).normalize(),normals.push(normal.x,normal.y,normal.z),uvs.push(i/tubularSegments),uvs.push(j/radialSegments)}}for(j=1;j<=tubularSegments;j++)for(i=1;i<=radialSegments;i++){var a=(radialSegments+1)*(j-1)+(i-1),b=(radialSegments+1)*j+(i-1),c=(radialSegments+1)*j+i,d=(radialSegments+1)*(j-1)+i;indices.push(a,b,d),indices.push(b,c,d)}function calculatePositionOnCurve(u,p,q,radius,position){var cu=Math.cos(u),su=Math.sin(u),quOverP=q/p*u,cs=Math.cos(quOverP);position.x=radius*(2+cs)*.5*cu,position.y=radius*(2+cs)*su*.5,position.z=radius*Math.sin(quOverP)*.5}this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function TorusGeometry(radius,tube,radialSegments,tubularSegments,arc){Geometry.call(this),this.type="TorusGeometry",this.parameters={radius:radius,tube:tube,radialSegments:radialSegments,tubularSegments:tubularSegments,arc:arc},this.fromBufferGeometry(new TorusBufferGeometry(radius,tube,radialSegments,tubularSegments,arc)),this.mergeVertices()}function TorusBufferGeometry(radius,tube,radialSegments,tubularSegments,arc){BufferGeometry.call(this),this.type="TorusBufferGeometry",this.parameters={radius:radius,tube:tube,radialSegments:radialSegments,tubularSegments:tubularSegments,arc:arc},radius=radius||1,tube=tube||.4,radialSegments=Math.floor(radialSegments)||8,tubularSegments=Math.floor(tubularSegments)||6,arc=arc||2*Math.PI;var indices=[],vertices=[],normals=[],uvs=[],center=new Vector3,vertex=new Vector3,normal=new Vector3,j,i;for(j=0;j<=radialSegments;j++)for(i=0;i<=tubularSegments;i++){var u=i/tubularSegments*arc,v=j/radialSegments*Math.PI*2;vertex.x=(radius+tube*Math.cos(v))*Math.cos(u),vertex.y=(radius+tube*Math.cos(v))*Math.sin(u),vertex.z=tube*Math.sin(v),vertices.push(vertex.x,vertex.y,vertex.z),center.x=radius*Math.cos(u),center.y=radius*Math.sin(u),normal.subVectors(vertex,center).normalize(),normals.push(normal.x,normal.y,normal.z),uvs.push(i/tubularSegments),uvs.push(j/radialSegments)}for(j=1;j<=radialSegments;j++)for(i=1;i<=tubularSegments;i++){var a=(tubularSegments+1)*j+i-1,b=(tubularSegments+1)*(j-1)+i-1,c=(tubularSegments+1)*(j-1)+i,d=(tubularSegments+1)*j+i;indices.push(a,b,d),indices.push(b,c,d)}this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}FogExp2.prototype.isFogExp2=!0,FogExp2.prototype.clone=function(){return new FogExp2(this.color,this.density)},FogExp2.prototype.toJSON=function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}},Fog.prototype.isFog=!0,Fog.prototype.clone=function(){return new Fog(this.color,this.near,this.far)},Fog.prototype.toJSON=function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}},Scene.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Scene,copy:function(source,recursive){return Object3D.prototype.copy.call(this,source,recursive),null!==source.background&&(this.background=source.background.clone()),null!==source.fog&&(this.fog=source.fog.clone()),null!==source.overrideMaterial&&(this.overrideMaterial=source.overrideMaterial.clone()),this.autoUpdate=source.autoUpdate,this.matrixAutoUpdate=source.matrixAutoUpdate,this},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);return null!==this.background&&(data.object.background=this.background.toJSON(meta)),null!==this.fog&&(data.object.fog=this.fog.toJSON()),data}}),Object.defineProperty(InterleavedBuffer.prototype,"needsUpdate",{set:function(value){!0===value&&this.version++}}),Object.assign(InterleavedBuffer.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setArray:function(array){if(Array.isArray(array))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");return this.count=void 0!==array?array.length/this.stride:0,this.array=array,this},setDynamic:function(value){return this.dynamic=value,this},copy:function(source){return this.array=new source.array.constructor(source.array),this.count=source.count,this.stride=source.stride,this.dynamic=source.dynamic,this},copyAt:function(index1,attribute,index2){index1*=this.stride,index2*=attribute.stride;for(var i=0,l=this.stride;i<l;i++)this.array[index1+i]=attribute.array[index2+i];return this},set:function(value,offset){return void 0===offset&&(offset=0),this.array.set(value,offset),this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(callback){return this.onUploadCallback=callback,this}}),Object.defineProperties(InterleavedBufferAttribute.prototype,{count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}}}),Object.assign(InterleavedBufferAttribute.prototype,{isInterleavedBufferAttribute:!0,setX:function(index,x){return this.data.array[index*this.data.stride+this.offset]=x,this},setY:function(index,y){return this.data.array[index*this.data.stride+this.offset+1]=y,this},setZ:function(index,z){return this.data.array[index*this.data.stride+this.offset+2]=z,this},setW:function(index,w){return this.data.array[index*this.data.stride+this.offset+3]=w,this},getX:function(index){return this.data.array[index*this.data.stride+this.offset]},getY:function(index){return this.data.array[index*this.data.stride+this.offset+1]},getZ:function(index){return this.data.array[index*this.data.stride+this.offset+2]},getW:function(index){return this.data.array[index*this.data.stride+this.offset+3]},setXY:function(index,x,y){return index=index*this.data.stride+this.offset,this.data.array[index+0]=x,this.data.array[index+1]=y,this},setXYZ:function(index,x,y,z){return index=index*this.data.stride+this.offset,this.data.array[index+0]=x,this.data.array[index+1]=y,this.data.array[index+2]=z,this},setXYZW:function(index,x,y,z,w){return index=index*this.data.stride+this.offset,this.data.array[index+0]=x,this.data.array[index+1]=y,this.data.array[index+2]=z,this.data.array[index+3]=w,this}}),SpriteMaterial.prototype=Object.create(Material.prototype),SpriteMaterial.prototype.constructor=SpriteMaterial,SpriteMaterial.prototype.isSpriteMaterial=!0,SpriteMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.color.copy(source.color),this.map=source.map,this.rotation=source.rotation,this.sizeAttenuation=source.sizeAttenuation,this},Sprite.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Sprite,isSprite:!0,raycast:function(){var intersectPoint=new Vector3,worldScale=new Vector3,mvPosition=new Vector3,alignedPosition=new Vector2,rotatedPosition=new Vector2,viewWorldMatrix=new Matrix4,vA=new Vector3,vB=new Vector3,vC=new Vector3,uvA=new Vector2,uvB=new Vector2,uvC=new Vector2;function transformVertex(vertexPosition,mvPosition,center,scale,sin,cos){alignedPosition.subVectors(vertexPosition,center).addScalar(.5).multiply(scale),void 0!==sin?(rotatedPosition.x=cos*alignedPosition.x-sin*alignedPosition.y,rotatedPosition.y=sin*alignedPosition.x+cos*alignedPosition.y):rotatedPosition.copy(alignedPosition),vertexPosition.copy(mvPosition),vertexPosition.x+=rotatedPosition.x,vertexPosition.y+=rotatedPosition.y,vertexPosition.applyMatrix4(viewWorldMatrix)}return function raycast(raycaster,intersects){worldScale.setFromMatrixScale(this.matrixWorld),viewWorldMatrix.getInverse(this.modelViewMatrix).premultiply(this.matrixWorld),mvPosition.setFromMatrixPosition(this.modelViewMatrix);var rotation=this.material.rotation,sin,cos;0!==rotation&&(cos=Math.cos(rotation),sin=Math.sin(rotation));var center=this.center;
vendor: 4,522 bytes, line 1
1transformVertex(vA.set(-.5,-.5,0),mvPosition,center,worldScale,sin,cos),transformVertex(vB.set(.5,-.5,0),mvPosition,center,worldScale,sin,cos),transformVertex(vC.set(.5,.5,0),mvPosition,center,worldScale,sin,cos),uvA.set(0,0),uvB.set(1,0),uvC.set(1,1);var intersect=raycaster.ray.intersectTriangle(vA,vB,vC,!1,intersectPoint);if(null!==intersect||(transformVertex(vB.set(-.5,.5,0),mvPosition,center,worldScale,sin,cos),uvB.set(0,1),null!==(intersect=raycaster.ray.intersectTriangle(vA,vC,vB,!1,intersectPoint)))){var distance=raycaster.ray.origin.distanceTo(intersectPoint);distance<raycaster.near||distance>raycaster.far||intersects.push({distance:distance,point:intersectPoint.clone(),uv:Triangle.getUV(intersectPoint,vA,vB,vC,uvA,uvB,uvC,new Vector2),face:null,object:this})}}}(),clone:function(){return new this.constructor(this.material).copy(this)},copy:function(source){return Object3D.prototype.copy.call(this,source),void 0!==source.center&&this.center.copy(source.center),this}}),LOD.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:LOD,copy:function(source){Object3D.prototype.copy.call(this,source,!1);for(var levels=source.levels,i=0,l=levels.length;i<l;i++){var level=levels[i];this.addLevel(level.object.clone(),level.distance)}return this},addLevel:function(object,distance){void 0===distance&&(distance=0),distance=Math.abs(distance);for(var levels=this.levels,l=0;l<levels.length&&!(distance<levels[l].distance);l++);levels.splice(l,0,{distance:distance,object:object}),this.add(object)},getObjectForDistance:function(distance){for(var levels=this.levels,i=1,l=levels.length;i<l&&!(distance<levels[i].distance);i++);return levels[i-1].object},raycast:(matrixPosition=new Vector3,function raycast(raycaster,intersects){matrixPosition.setFromMatrixPosition(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(matrixPosition);this.getObjectForDistance(distance).raycast(raycaster,intersects)}),update:function(){var v1=new Vector3,v2=new Vector3;return function update(camera){var levels=this.levels;if(levels.length>1){v1.setFromMatrixPosition(camera.matrixWorld),v2.setFromMatrixPosition(this.matrixWorld);var distance=v1.distanceTo(v2);levels[0].object.visible=!0;for(var i=1,l=levels.length;i<l&&distance>=levels[i].distance;i++)levels[i-1].object.visible=!1,levels[i].object.visible=!0;for(;i<l;i++)levels[i].object.visible=!1}}}(),toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);data.object.levels=[];for(var levels=this.levels,i=0,l=levels.length;i<l;i++){var level=levels[i];data.object.levels.push({object:level.object.uuid,distance:level.distance})}return data}}),SkinnedMesh.prototype=Object.assign(Object.create(Mesh.prototype),{constructor:SkinnedMesh,isSkinnedMesh:!0,bind:function(skeleton,bindMatrix){this.skeleton=skeleton,void 0===bindMatrix&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),bindMatrix=this.matrixWorld),this.bindMatrix.copy(bindMatrix),this.bindMatrixInverse.getInverse(bindMatrix)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){for(var vector=new Vector4,skinWeight=this.geometry.attributes.skinWeight,i=0,l=skinWeight.count;i<l;i++){vector.x=skinWeight.getX(i),vector.y=skinWeight.getY(i),vector.z=skinWeight.getZ(i),vector.w=skinWeight.getW(i);var scale=1/vector.manhattanLength();scale!==1/0?vector.multiplyScalar(scale):vector.set(1,0,0,0),skinWeight.setXYZW(i,vector.x,vector.y,vector.z,vector.w)}},updateMatrixWorld:function(force){Mesh.prototype.updateMatrixWorld.call(this,force),"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Object.assign(Skeleton.prototype,{calculateInverses:function(){this.boneInverses=[];for(var i=0,il=this.bones.length;i<il;i++){var inverse=new Matrix4;this.bones[i]&&inverse.getInverse(this.bones[i].matrixWorld),this.boneInverses.push(inverse)}},pose:function(){var bone,i,il;for(i=0,il=this.bones.length;i<il;i++)(bone=this.bones[i])&&bone.matrixWorld.getInverse(this.boneInverses[i]);for(i=0,il=this.bones.length;i<il;i++)(bone=this.bones[i])&&(bone.parent&&bone.parent.isBone?(bone.matrix.getInverse(bone.parent.matrixWorld),bone.matrix.multiply(bone.matrixWorld)):bone.matrix.copy(bone.matrixWorld),bone.matrix.decompose(bone.position,bone.quaternion,bone.scale))}
1,update:(offsetMatrix=new Matrix4,identityMatrix=new Matrix4,function update(){for(var bones=this.bones,boneInverses=this.boneInverses,boneMatrices=this.boneMatrices,boneTexture=this.boneTexture,i=0,il=bones.length;i<il;i++){var matrix=bones[i]?bones[i].matrixWorld:identityMatrix;offsetMatrix.multiplyMatrices(matrix,boneInverses[i]),offsetMatrix.toArray(boneMatrices,16*i)}void 0!==boneTexture&&(boneTexture.needsUpdate=!0)}),clone:function(){return new Skeleton(this.bones,this.boneInverses)},getBoneByName:function(name){for(var i=0,il=this.bones.length;i<il;i++){var bone=this.bones[i];if(bone.name===name)return bone}}}),Bone.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Bone,isBone:!0}),LineBasicMaterial.prototype=Object.create(Material.prototype),LineBasicMaterial.prototype.constructor=LineBasicMaterial,LineBasicMaterial.prototype.isLineBasicMaterial=!0,LineBasicMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.color.copy(source.color),this.linewidth=source.linewidth,this.linecap=source.linecap,this.linejoin=source.linejoin,this},Line.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Line,isLine:!0,computeLineDistances:(start=new Vector3,end=new Vector3,function computeLineDistances(){var geometry=this.geometry;if(geometry.isBufferGeometry)if(null===geometry.index){for(var positionAttribute=geometry.attributes.position,lineDistances=[0],i=1,l=positionAttribute.count;i<l;i++)start.fromBufferAttribute(positionAttribute,i-1),end.fromBufferAttribute(positionAttribute,i),lineDistances[i]=lineDistances[i-1],lineDistances[i]+=start.distanceTo(end);geometry.addAttribute("lineDistance",new Float32BufferAttribute(lineDistances,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(geometry.isGeometry){var vertices=geometry.vertices,lineDistances;(lineDistances=geometry.lineDistances)[0]=0;for(var i=1,l=vertices.length;i<l;i++)lineDistances[i]=lineDistances[i-1],lineDistances[i]+=vertices[i-1].distanceTo(vertices[i])}return this}),raycast:function(){var inverseMatrix=new Matrix4,ray=new Ray,sphere=new Sphere;return function raycast(raycaster,intersects){var precision=raycaster.linePrecision,geometry=this.geometry,matrixWorld=this.matrixWorld;if(null===geometry.boundingSphere&&geometry.computeBoundingSphere(),sphere.copy(geometry.boundingSphere),sphere.applyMatrix4(matrixWorld),sphere.radius+=precision,!1!==raycaster.ray.intersectsSphere(sphere)){inverseMatrix.getInverse(matrixWorld),ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);var localPrecision=precision/((this.scale.x+this.scale.y+this.scale.z)/3),localPrecisionSq=localPrecision*localPrecision,vStart=new Vector3,vEnd=new Vector3,interSegment=new Vector3,interRay=new Vector3,step=this&&this.isLineSegments?2:1;if(geometry.isBufferGeometry){var index=geometry.index,attributes,positions=geometry.attributes.position.array;if(null!==index)for(var indices=index.array,i=0,l=indices.length-1;i<l;i+=step){var a=indices[i],b=indices[i+1],distSq,distance;if(vStart.fromArray(positions,3*a),vEnd.fromArray(positions,3*b),!((distSq=ray.distanceSqToSegment(vStart,vEnd,interRay,interSegment))>localPrecisionSq))interRay.applyMatrix4(this.matrixWorld),(distance=raycaster.ray.origin.distanceTo(interRay))<raycaster.near||distance>raycaster.far||intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}else for(var i=0,l=positions.length/3-1;i<l;i+=step){var distSq,distance;if(vStart.fromArray(positions,3*i),vEnd.fromArray(positions,3*i+3),!((distSq=ray.distanceSqToSegment(vStart,vEnd,interRay,interSegment))>localPrecisionSq))interRay.applyMatrix4(this.matrixWorld),(distance=raycaster.ray.origin.distanceTo(interRay))<raycaster.near||distance>raycaster.far||intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else if(geometry.isGeometry)for(var vertices=geometry.vertices,nbVertices=vertices.length,i=0;i<nbVertices-1;i+=step){var distSq,distance;if(!((distSq=ray.distanceSqToSegment(vertices[i],vertices[i+1],interRay,interSegment))>localPrecisionSq))interRay.applyMatrix4(this.matrixWorld),(distance=raycaster.ray.origin.distanceTo(interRay))<raycaster.near||distance>raycaster.far||intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}}(),copy:function(source){return Object3D.prototype.copy.call(this,source),this.geometry.copy(source.geometry),this.material.copy(source.material),this},clone:function(){return(new this.constructor).copy(this)}}),LineSegments.prototype=Object.assign(Object.create(Line.prototype),{constructor:LineSegments,isLineSegments:!0,computeLineDistances:function(){var start=new Vector3,end=new Vector3;return function computeLineDistances(){var geometry=this.geometry;if(geometry.isBufferGeometry)if(null===geometry.index){for(var positionAttribute=geometry.attributes.position,lineDistances=[],i=0,l=positionAttribute.count;i<l;i+=2)start.fromBufferAttribute(positionAttribute,i),end.fromBufferAttribute(positionAttribute,i+1),lineDistances[i]=0===i?0:lineDistances[i-1],lineDistances[i+1]=lineDistances[i]+start.distanceTo(end);geometry.addAttribute("lineDistance",new Float32BufferAttribute(lineDistances,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(geometry.isGeometry)for(var vertices=geometry.vertices,lineDistances=geometry.lineDistances,i=0,l=vertices.length;i<l;i+=2)start.copy(vertices[i]),end.copy(vertices[i+1]),lineDistances[i]=0===i?0:lineDistances[i-1],lineDistances[i+1]=lineDistances[i]+start.distanceTo(end);return this}}()}),LineLoop.prototype=Object.assign(Object.create(Line.prototype),{constructor:LineLoop,isLine
vendor: 15,397 bytes, line 1
1Loop:!0}),PointsMaterial.prototype=Object.create(Material.prototype),PointsMaterial.prototype.constructor=PointsMaterial,PointsMaterial.prototype.isPointsMaterial=!0,PointsMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.color.copy(source.color),this.map=source.map,this.size=source.size,this.sizeAttenuation=source.sizeAttenuation,this.morphTargets=source.morphTargets,this},Points.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Points,isPoints:!0,raycast:function(){var inverseMatrix=new Matrix4,ray=new Ray,sphere=new Sphere;return function raycast(raycaster,intersects){var object=this,geometry=this.geometry,matrixWorld=this.matrixWorld,threshold=raycaster.params.Points.threshold;if(null===geometry.boundingSphere&&geometry.computeBoundingSphere(),sphere.copy(geometry.boundingSphere),sphere.applyMatrix4(matrixWorld),sphere.radius+=threshold,!1!==raycaster.ray.intersectsSphere(sphere)){inverseMatrix.getInverse(matrixWorld),ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);var localThreshold=threshold/((this.scale.x+this.scale.y+this.scale.z)/3),localThresholdSq=localThreshold*localThreshold,position=new Vector3,intersectPoint=new Vector3;if(geometry.isBufferGeometry){var index=geometry.index,attributes,positions=geometry.attributes.position.array;if(null!==index)for(var indices=index.array,i=0,il=indices.length;i<il;i++){var a=indices[i];position.fromArray(positions,3*a),testPoint(position,a)}else for(var i=0,l=positions.length/3;i<l;i++)position.fromArray(positions,3*i),testPoint(position,i)}else for(var vertices=geometry.vertices,i=0,l=vertices.length;i<l;i++)testPoint(vertices[i],i)}function testPoint(point,index){var rayPointDistanceSq=ray.distanceSqToPoint(point);if(rayPointDistanceSq<localThresholdSq){ray.closestPointToPoint(point,intersectPoint),intersectPoint.applyMatrix4(matrixWorld);var distance=raycaster.ray.origin.distanceTo(intersectPoint);if(distance<raycaster.near||distance>raycaster.far)return;intersects.push({distance:distance,distanceToRay:Math.sqrt(rayPointDistanceSq),point:intersectPoint.clone(),index:index,face:null,object:object})}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),VideoTexture.prototype=Object.assign(Object.create(Texture.prototype),{constructor:VideoTexture,isVideoTexture:!0,update:function(){var video=this.image;video.readyState>=video.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),CompressedTexture.prototype=Object.create(Texture.prototype),CompressedTexture.prototype.constructor=CompressedTexture,CompressedTexture.prototype.isCompressedTexture=!0,CanvasTexture.prototype=Object.create(Texture.prototype),CanvasTexture.prototype.constructor=CanvasTexture,CanvasTexture.prototype.isCanvasTexture=!0,DepthTexture.prototype=Object.create(Texture.prototype),DepthTexture.prototype.constructor=DepthTexture,DepthTexture.prototype.isDepthTexture=!0,WireframeGeometry.prototype=Object.create(BufferGeometry.prototype),WireframeGeometry.prototype.constructor=WireframeGeometry,ParametricGeometry.prototype=Object.create(Geometry.prototype),ParametricGeometry.prototype.constructor=ParametricGeometry,ParametricBufferGeometry.prototype=Object.create(BufferGeometry.prototype),ParametricBufferGeometry.prototype.constructor=ParametricBufferGeometry,PolyhedronGeometry.prototype=Object.create(Geometry.prototype),PolyhedronGeometry.prototype.constructor=PolyhedronGeometry,PolyhedronBufferGeometry.prototype=Object.create(BufferGeometry.prototype),PolyhedronBufferGeometry.prototype.constructor=PolyhedronBufferGeometry,TetrahedronGeometry.prototype=Object.create(Geometry.prototype),TetrahedronGeometry.prototype.constructor=TetrahedronGeometry,TetrahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype),TetrahedronBufferGeometry.prototype.constructor=TetrahedronBufferGeometry,OctahedronGeometry.prototype=Object.create(Geometry.prototype),OctahedronGeometry.prototype.constructor=OctahedronGeometry,OctahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype),OctahedronBufferGeometry.prototype.constructor=OctahedronBufferGeometry,IcosahedronGeometry.prototype=Object.create(Geometry.prototype),IcosahedronGeometry.prototype.constructor=IcosahedronGeometry,IcosahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype),IcosahedronBufferGeometry.prototype.constructor=IcosahedronBufferGeometry,DodecahedronGeometry.prototype=Object.create(Geometry.prototype),DodecahedronGeometry.prototype.constructor=DodecahedronGeometry,DodecahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype),DodecahedronBufferGeometry.prototype.constructor=DodecahedronBufferGeometry,TubeGeometry.prototype=Object.create(Geometry.prototype),TubeGeometry.prototype.constructor=TubeGeometry,TubeBufferGeometry.prototype=Object.create(BufferGeometry.prototype),TubeBufferGeometry.prototype.constructor=TubeBufferGeometry,TorusKnotGeometry.prototype=Object.create(Geometry.prototype),TorusKnotGeometry.prototype.constructor=TorusKnotGeometry,TorusKnotBufferGeometry.prototype=Object.create(BufferGeometry.prototype),TorusKnotBufferGeometry.prototype.constructor=TorusKnotBufferGeometry,TorusGeometry.prototype=Object.create(Geometry.prototype),TorusGeometry.prototype.constructor=TorusGeometry,TorusBufferGeometry.prototype=Object.create(BufferGeometry.prototype),TorusBufferGeometry.prototype.constructor=TorusBufferGeometry;var Earcut_triangulate=function(data,holeIndices,dim){dim=dim||2;var hasHoles=holeIndices&&holeIndices.length,outerLen=hasHoles?holeIndices[0]*dim:data.length,outerNode=linkedList(data,0,outerLen,dim,!0),triangles=[],minX,minY,maxX,maxY,x,y,invSize;if(!outerNode)return triangles;if(hasHoles&&(outerNode=eliminateHoles(data,holeIndices,outerNode,dim)),data.length>80*dim){minX=maxX=data[0],minY=maxY=data[1];for(var i=dim;i<outerLen;i+=dim)(x=data[i])<minX&&(minX=x),(y=data[i+1])<minY&&(minY=y),x>maxX&&(maxX=x),y>maxY&&(maxY=y);invSize=0!==(invSize=Math.max(maxX-minX,maxY-minY))?1/invSize:0}return earcutLinked(outerNode,triangles,dim,minX,minY,invSize),triangles};function linkedList(data,start,end,dim,clockwise){var i,last;if(clockwise===signedArea(data,start,end,dim)>0)for(i=start;i<end;i+=dim)last=insertNode(i,data[i],data[i+1],last);else for(i=end-dim;i>=start;i-=dim)last=insertNode(i,data[i],data[i+1],last);return last&&equals(last,last.next)&&(removeNode(last),last=last.next),last}function filterPoints(start,end){if(!start)return start;end||(end=start);var p=start,again;do{if(again=!1,p.steiner||!equals(p,p.next)&&0!==area(p.prev,p,p.next))p=p.next;else{if(removeNode(p),(p=end=p.prev)===p.next)break;again=!0}}while(again||p!==end);return end}function earcutLinked(ear,triangles,dim,minX,minY,invSize,pass){if(ear){!pass&&invSize&&indexCurve(ear,minX,minY,invSize);for(var stop=ear,prev,next;ear.prev!==ear.next;)if(prev=ear.prev,next=ear.next,invSize?isEarHashed(ear,minX,minY,invSize):isEar(ear))triangles.push(prev.i/dim),triangles.push(ear.i/dim),triangles.push(next.i/dim),removeNode(ear),ear=next.next,stop=next.next;else if((ear=next)===stop){pass?1===pass?earcutLinked(ear=cureLocalIntersections(ear,triangles,dim),triangles,dim,minX,minY,invSize,2):2===pass&&splitEarcut(ear,triangles,dim,minX,minY,invSize):earcutLinked(filterPoints(ear),triangles,dim,minX,minY,invSize,1);break}}}function isEar(ear){var a=ear.prev,b=ear,c=ear.next;if(area(a,b,c)>=0)return!1;for(var p=ear.next.next;p!==ear.prev;){if(pointInTriangle(a.x,a.y,b.x,b.y,c.x,c.y,p.x,p.y)&&area(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function isEarHashed(ear,minX,minY,invSize){var a=ear.prev,b=ear,c=ear.next;if(area(a,b,c)>=0)return!1;for(var minTX=a.x<b.x?a.x<c.x?a.x:c.x:b.x<c.x?b.x:c.x,minTY=a.y<b.y?a.y<c.y?a.y:c.y:b.y<c.y?b.y:c.y,maxTX=a.x>b.x?a.x>c.x?a.x:c.x:b.x>c.x?b.x:c.x,maxTY=a.y>b.y?a.y>c.y?a.y:c.y:b.y>c.y?b.y:c.y,minZ=zOrder(minTX,minTY,minX,minY,invSize),maxZ=zOrder(maxTX,maxTY,minX,minY,invSize),p=ear.nextZ;p&&p.z<=maxZ;){if(p!==ear.prev&&p!==ear.next&&pointInTriangle(a.x,a.y,b.x,b.y,c.x,c.y,p.x,p.y)&&area(p.prev,p,p.next)>=0)return!1;p=p.nextZ}for(p=ear.prevZ;p&&p.z>=minZ;){if(p!==ear.prev&&p!==ear.next&&pointInTriangle(a.x,a.y,b.x,b.y,c.x,c.y,p.x,p.y)&&area(p.prev,p,p.next)>=0)return!1;p=p.prevZ}return!0}function cureLocalIntersections(start,triangles,dim){var p=start;do{var a=p.prev,b=p.next.next;!equals(a,b)&&intersects(a,p,p.next,b)&&locallyInside(a,b)&&locallyInside(b,a)&&(triangles.push(a.i/dim),triangles.push(p.i/dim),triangles.push(b.i/dim),removeNode(p),removeNode(p.next),p=start=b),p=p.next}while(p!==start);return p}function splitEarcut(start,triangles,dim,minX,minY,invSize){var a=start;do{for(var b=a.next.next;b!==a.prev;){if(a.i!==b.i&&isValidDiagonal(a,b)){var c=splitPolygon(a,b);return a=filterPoints(a,a.next),c=filterPoints(c,c.next),earcutLinked(a,triangles,dim,minX,minY,invSize),void earcutLinked(c,triangles,dim,minX,minY,invSize)}b=b.next}a=a.next}while(a!==start)}function eliminateHoles(data,holeIndices,outerNode,dim){var queue=[],i,len,start,end,list;for(i=0,len=holeIndices.length;i<len;i++)(list=linkedList(data,start=holeIndices[i]*dim,end=i<len-1?holeIndices[i+1]*dim:data.length,dim,!1))===list.next&&(list.steiner=!0),queue.push(getLeftmost(list));for(queue.sort(compareX),i=0;i<queue.length;i++)eliminateHole(queue[i],outerNode),outerNode=filterPoints(outerNode,outerNode.next);return outerNode}function compareX(a,b){return a.x-b.x}function eliminateHole(hole,outerNode){if(outerNode=findHoleBridge(hole,outerNode)){var b=splitPolygon(outerNode,hole);filterPoints(b,b.next)}}function findHoleBridge(hole,outerNode){var p=outerNode,hx=hole.x,hy=hole.y,qx=-1/0,m;do{if(hy<=p.y&&hy>=p.next.y&&p.next.y!==p.y){var x=p.x+(hy-p.y)*(p.next.x-p.x)/(p.next.y-p.y);if(x<=hx&&x>qx){if(qx=x,x===hx){if(hy===p.y)return p;if(hy===p.next.y)return p.next}m=p.x<p.next.x?p:p.next}}p=p.next}while(p!==outerNode);if(!m)return null;if(hx===qx)return m.prev;var stop=m,mx=m.x,my=m.y,tanMin=1/0,tan;for(p=m.next;p!==stop;)hx>=p.x&&p.x>=mx&&hx!==p.x&&pointInTriangle(hy<my?hx:qx,hy,mx,my,hy<my?qx:hx,hy,p.x,p.y)&&((tan=Math.abs(hy-p.y)/(hx-p.x))<tanMin||tan===tanMin&&p.x>m.x)&&locallyInside(p,hole)&&(m=p,tanMin=tan),p=p.next;return m}function indexCurve(start,minX,minY,invSize){var p=start;do{null===p.z&&(p.z=zOrder(p.x,p.y,minX,minY,invSize)),p.prevZ=p.prev,p.nextZ=p.next,p=p.next}while(p!==start);p.prevZ.nextZ=null,p.prevZ=null,sortLinked(p)}function sortLinked(list){var i,p,q,e,tail,numMerges,pSize,qSize,inSize=1;do{for(p=list,list=null,tail=null,numMerges=0;p;){for(numMerges++,q=p,pSize=0,i=0;i<inSize&&(pSize++,q=q.nextZ);i++);for(qSize=inSize;pSize>0||qSize>0&&q;)0!==pSize&&(0===qSize||!q||p.z<=q.z)?(e=p,p=p.nextZ,pSize--):(e=q,q=q.nextZ,qSize--),tail?tail.nextZ=e:list=e,e.prevZ=tail,tail=e;p=q}tail.nextZ=null,inSize*=2}while(numMerges>1);return list}function zOrder(x,y,minX,minY,invSize){return(x=1431655765&((x=858993459&((x=252645135&((x=16711935&((x=32767*(x-minX)*invSize)|x<<8))|x<<4))|x<<2))|x<<1))|(y=1431655765&((y=858993459&((y=252645135&((y=16711935&((y=32767*(y-minY)*invSize)|y<<8))|y<<4))|y<<2))|y<<1))<<1}function getLeftmost(start){var p=start,leftmost=start;do{p.x<leftmost.x&&(leftmost=p),p=p.next}while(p!==start);return leftmost}function pointInTriangle(ax,ay,bx,by,cx,cy,px,py){return(cx-px)*(ay-py)-(ax-px)*(cy-py)>=0&&(ax-px)*(by-py)-(bx-px)*(ay-py)>=0&&(bx-px)*(cy-py)-(cx-px)*(by-py)>=0}function isValidDiagonal(a,b){return a.next.i!==b.i&&a.prev.i!==b.i&&!intersectsPolygon(a,b)&&locallyInside(a,b)&&locallyInside(b,a)&&middleInside(a,b)}function area(p,q,r){return(q.y-p.y)*(r.x-q.x)-(q.x-p.x)*(r.y-q.y)}function equals(p1,p2){return p1.x===p2.x&&p1.y===p2.y}function intersects(p1,q1,p2,q2){return!!(equals(p1,q1)&&equals(p2,q2)||equals(p1,q2)&&equals(p2,q1))||area(p1,q1,p2)>0!=area(p1,q1,q2)>0&&area(p2,q2,p1)>0!=area(p2,q2,q1)>0}function intersectsPolygon(a,b){var p=a;do{if(p.i!==a.i&&p.next.i!==a.i&&p.i!==b.i&&p.next.i!==b.i&&intersects(p,p.next,a,b))return!0;p=p.next}while(p!==a);return!1}function locallyInside(a,b){return area(a.prev,a,a.next)<0?area(a,b,a.next)>=0&&area(a,a.prev,b)>=0:area(a,b,a.prev)<0||area(a,a.next,b)<0}function middleInside(a,b){var p=a,inside=!1,px=(a.x+b.x)/2,py=(a.y+b.y)/2;do{p.y>py!=p.next.y>py&&p.next.y!==p.y&&px<(p.next.x-p.x)*(py-p.y)/(p.next.y-p.y)+p.x&&(inside=!inside),p=p.next}while(p!==a);return inside}function splitPolygon(a,b){var a2=new Node(a.i,a.x,a.y),b2=new Node(b.i,b.x,b.y),an=a.next,bp=b.prev;return a.next=b,b.prev=a,a2.next=an,an.prev=a2,b2.next=a2,a2.prev=b2,bp.next=b2,b2.prev=bp,b2}function insertNode(i,x,y,last){var p=new Node(i,x,y);return last?(p.next=last.next,p.prev=last,last.next.prev=p,last.next=p):(p.prev=p,p.next=p),p}function removeNode(p){p.next.prev=p.prev,p.prev.next=p.next,p.prevZ&&(p.prevZ.nextZ=p.nextZ),p.nextZ&&(p.nextZ.prevZ=p.prevZ)}function Node(i,x,y){this.i=i,this.x=x,this.y=y,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function signedArea(data,start,end,dim){for(var sum=0,i=start,j=end-dim;i<end;i+=dim)sum+=(data[j]-data[i])*(data[i+1]+data[j+1]),j=i;return sum}var ShapeUtils={area:function(contour){for(var n=contour.length,a=0,p=n-1,q=0;q<n;p=q++)a+=contour[p].x*contour[q].y-contour[q].x*contour[p].y;return.5*a},isClockWise:function(pts){return ShapeUtils.area(pts)<0},triangulateShape:function(contour,holes){var vertices=[],holeIndices=[],faces=[];removeDupEndPts(contour),addContour(vertices,contour);var holeIndex=contour.length;holes.forEach(removeDupEndPts);for(var i=0;i<holes.length;i++)holeIndices.push(holeIndex),holeIndex+=holes[i].length,addContour(vertices,holes[i]);for(var triangles=Earcut_triangulate(vertices,holeIndices),i=0;i<triangles.length;i+=3)faces.push(triangles.slice(i,i+3));return faces}};function removeDupEndPts(points){var l=points.length;l>2&&points[l-1].equals(points[0])&&points.pop()}function addContour(vertices,contour){for(var i=0;i<contour.length;i++)vertices.push(contour[i].x),vertices.push(contour[i].y)}function ExtrudeGeometry(shapes,options){Geometry.call(this),this.type="ExtrudeGeometry",this.parameters={shapes:shapes,options:options},this.fromBufferGeometry(new ExtrudeBufferGeometry(shapes,options)),this.mergeVertices()}function ExtrudeBufferGeometry(shapes,options){BufferGeometry.call(this),this.type="ExtrudeBufferGeometry",this.parameters={shapes:shapes,options:options},shapes=Array.isArray(shapes)?shapes:[shapes];for(var scope=this,verticesArray=[],uvArray=[],i=0,l=shapes.length;i<l;i++){var shape;addShape(shapes[i])}function addShape(shape){var placeholder=[],curveSegments=void 0!==options.curveSegments?options.curveSegments:12,steps=void 0!==options.steps?options.steps:1,depth=void 0!==options.depth?options.depth:100,bevelEnabled=void 0===options.bevelEnabled||options.bevelEnabled,bevelThickness=void 0!==options.bevelThickness?options.bevelThickness:6,bevelSize=void 0!==options.bevelSize?options.bevelSize:bevelThickness-2,bevelSegments=void 0!==options.bevelSegments?options.bevelSegments:3,extrudePath=options.extrudePath,uvgen=void 0!==options.UVGenerator?options.UVGenerator:WorldUVGenerator;void 0!==options.amount&&(console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."),depth=options.amount);var extrudePts,extrudeByPath=!1,splineTube,binormal,normal,position2,ahole,h,hl;
vendor: 7,303 bytes, line 1
1extrudePath&&(extrudePts=extrudePath.getSpacedPoints(steps),extrudeByPath=!0,bevelEnabled=!1,splineTube=extrudePath.computeFrenetFrames(steps,!1),binormal=new Vector3,normal=new Vector3,position2=new Vector3),bevelEnabled||(bevelSegments=0,bevelThickness=0,bevelSize=0);var shapePoints=shape.extractPoints(curveSegments),vertices=shapePoints.shape,holes=shapePoints.holes,reverse;if(!ShapeUtils.isClockWise(vertices))for(vertices=vertices.reverse(),h=0,hl=holes.length;h<hl;h++)ahole=holes[h],ShapeUtils.isClockWise(ahole)&&(holes[h]=ahole.reverse());var faces=ShapeUtils.triangulateShape(vertices,holes),contour=vertices;for(h=0,hl=holes.length;h<hl;h++)ahole=holes[h],vertices=vertices.concat(ahole);function scalePt2(pt,vec,size){return vec||console.error("THREE.ExtrudeGeometry: vec does not exist"),vec.clone().multiplyScalar(size).add(pt)}var b,bs,t,z,vert,vlen=vertices.length,face,flen=faces.length;function getBevelVec(inPt,inPrev,inNext){var v_trans_x,v_trans_y,shrink_by,v_prev_x=inPt.x-inPrev.x,v_prev_y=inPt.y-inPrev.y,v_next_x=inNext.x-inPt.x,v_next_y=inNext.y-inPt.y,v_prev_lensq=v_prev_x*v_prev_x+v_prev_y*v_prev_y,collinear0=v_prev_x*v_next_y-v_prev_y*v_next_x;if(Math.abs(collinear0)>Number.EPSILON){var v_prev_len=Math.sqrt(v_prev_lensq),v_next_len=Math.sqrt(v_next_x*v_next_x+v_next_y*v_next_y),ptPrevShift_x=inPrev.x-v_prev_y/v_prev_len,ptPrevShift_y=inPrev.y+v_prev_x/v_prev_len,ptNextShift_x,ptNextShift_y,sf=((inNext.x-v_next_y/v_next_len-ptPrevShift_x)*v_next_y-(inNext.y+v_next_x/v_next_len-ptPrevShift_y)*v_next_x)/(v_prev_x*v_next_y-v_prev_y*v_next_x),v_trans_lensq=(v_trans_x=ptPrevShift_x+v_prev_x*sf-inPt.x)*v_trans_x+(v_trans_y=ptPrevShift_y+v_prev_y*sf-inPt.y)*v_trans_y;if(v_trans_lensq<=2)return new Vector2(v_trans_x,v_trans_y);shrink_by=Math.sqrt(v_trans_lensq/2)}else{var direction_eq=!1;v_prev_x>Number.EPSILON?v_next_x>Number.EPSILON&&(direction_eq=!0):v_prev_x<-Number.EPSILON?v_next_x<-Number.EPSILON&&(direction_eq=!0):Math.sign(v_prev_y)===Math.sign(v_next_y)&&(direction_eq=!0),direction_eq?(v_trans_x=-v_prev_y,v_trans_y=v_prev_x,shrink_by=Math.sqrt(v_prev_lensq)):(v_trans_x=v_prev_x,v_trans_y=v_prev_y,shrink_by=Math.sqrt(v_prev_lensq/2))}return new Vector2(v_trans_x/shrink_by,v_trans_y/shrink_by)}for(var contourMovements=[],i=0,il=contour.length,j=il-1,k=i+1;i<il;i++,j++,k++)j===il&&(j=0),k===il&&(k=0),contourMovements[i]=getBevelVec(contour[i],contour[j],contour[k]);var holesMovements=[],oneHoleMovements,verticesMovements=contourMovements.concat(),s;for(h=0,hl=holes.length;h<hl;h++){for(ahole=holes[h],oneHoleMovements=[],i=0,j=(il=ahole.length)-1,k=i+1;i<il;i++,j++,k++)j===il&&(j=0),k===il&&(k=0),oneHoleMovements[i]=getBevelVec(ahole[i],ahole[j],ahole[k]);holesMovements.push(oneHoleMovements),verticesMovements=verticesMovements.concat(oneHoleMovements)}for(b=0;b<bevelSegments;b++){for(t=b/bevelSegments,z=bevelThickness*Math.cos(t*Math.PI/2),bs=bevelSize*Math.sin(t*Math.PI/2),i=0,il=contour.length;i<il;i++)v((vert=scalePt2(contour[i],contourMovements[i],bs)).x,vert.y,-z);for(h=0,hl=holes.length;h<hl;h++)for(ahole=holes[h],oneHoleMovements=holesMovements[h],i=0,il=ahole.length;i<il;i++)v((vert=scalePt2(ahole[i],oneHoleMovements[i],bs)).x,vert.y,-z)}for(bs=bevelSize,i=0;i<vlen;i++)vert=bevelEnabled?scalePt2(vertices[i],verticesMovements[i],bs):vertices[i],extrudeByPath?(normal.copy(splineTube.normals[0]).multiplyScalar(vert.x),binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y),position2.copy(extrudePts[0]).add(normal).add(binormal),v(position2.x,position2.y,position2.z)):v(vert.x,vert.y,0);for(s=1;s<=steps;s++)for(i=0;i<vlen;i++)vert=bevelEnabled?scalePt2(vertices[i],verticesMovements[i],bs):vertices[i],extrudeByPath?(normal.copy(splineTube.normals[s]).multiplyScalar(vert.x),binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y),position2.copy(extrudePts[s]).add(normal).add(binormal),v(position2.x,position2.y,position2.z)):v(vert.x,vert.y,depth/steps*s);for(b=bevelSegments-1;b>=0;b--){for(t=b/bevelSegments,z=bevelThickness*Math.cos(t*Math.PI/2),bs=bevelSize*Math.sin(t*Math.PI/2),i=0,il=contour.length;i<il;i++)v((vert=scalePt2(contour[i],contourMovements[i],bs)).x,vert.y,depth+z);for(h=0,hl=holes.length;h<hl;h++)for(ahole=holes[h],oneHoleMovements=holesMovements[h],i=0,il=ahole.length;i<il;i++)vert=scalePt2(ahole[i],oneHoleMovements[i],bs),extrudeByPath?v(vert.x,vert.y+extrudePts[steps-1].y,extrudePts[steps-1].x+z):v(vert.x,vert.y,depth+z)}function buildLidFaces(){var start=verticesArray.length/3;if(bevelEnabled){var layer=0,offset=vlen*layer;for(i=0;i<flen;i++)f3((face=faces[i])[2]+offset,face[1]+offset,face[0]+offset);for(offset=vlen*(layer=steps+2*bevelSegments),i=0;i<flen;i++)f3((face=faces[i])[0]+offset,face[1]+offset,face[2]+offset)}else{for(i=0;i<flen;i++)f3((face=faces[i])[2],face[1],face[0]);for(i=0;i<flen;i++)f3((face=faces[i])[0]+vlen*steps,face[1]+vlen*steps,face[2]+vlen*steps)}scope.addGroup(start,verticesArray.length/3-start,0)}function buildSideFaces(){var start=verticesArray.length/3,layeroffset=0;for(sidewalls(contour,layeroffset),layeroffset+=contour.length,h=0,hl=holes.length;h<hl;h++)sidewalls(ahole=holes[h],layeroffset),layeroffset+=ahole.length;scope.addGroup(start,verticesArray.length/3-start,1)}function sidewalls(contour,layeroffset){var j,k;for(i=contour.length;--i>=0;){j=i,(k=i-1)<0&&(k=contour.length-1);var s=0,sl=steps+2*bevelSegments;for(s=0;s<sl;s++){var slen1=vlen*s,slen2=vlen*(s+1),a,b,c,d;f4(layeroffset+j+slen1,layeroffset+k+slen1,layeroffset+k+slen2,layeroffset+j+slen2)}}}function v(x,y,z){placeholder.push(x),placeholder.push(y),placeholder.push(z)}function f3(a,b,c){addVertex(a),addVertex(b),addVertex(c);var nextIndex=verticesArray.length/3,uvs=uvgen.generateTopUV(scope,verticesArray,nextIndex-3,nextIndex-2,nextIndex-1);addUV(uvs[0]),addUV(uvs[1]),addUV(uvs[2])}function f4(a,b,c,d){addVertex(a),addVertex(b),addVertex(d),addVertex(b),addVertex(c),addVertex(d);var nextIndex=verticesArray.length/3,uvs=uvgen.generateSideWallUV(scope,verticesArray,nextIndex-6,nextIndex-3,nextIndex-2,nextIndex-1);addUV(uvs[0]),addUV(uvs[1]),addUV(uvs[3]),addUV(uvs[1]),addUV(uvs[2]),addUV(uvs[3])}function addVertex(index){verticesArray.push(placeholder[3*index+0]),verticesArray.push(placeholder[3*index+1]),verticesArray.push(placeholder[3*index+2])}function addUV(vector2){uvArray.push(vector2.x),uvArray.push(vector2.y)}buildLidFaces(),buildSideFaces()}this.addAttribute("position",new Float32BufferAttribute(verticesArray,3)),this.addAttribute("uv",new Float32BufferAttribute(uvArray,2)),this.computeVertexNormals()}ExtrudeGeometry.prototype=Object.create(Geometry.prototype),ExtrudeGeometry.prototype.constructor=ExtrudeGeometry,ExtrudeGeometry.prototype.toJSON=function(){var data=Geometry.prototype.toJSON.call(this),shapes,options;return toJSON(this.parameters.shapes,this.parameters.options,data)},ExtrudeBufferGeometry.prototype=Object.create(BufferGeometry.prototype),ExtrudeBufferGeometry.prototype.constructor=ExtrudeBufferGeometry,ExtrudeBufferGeometry.prototype.toJSON=function(){var data=BufferGeometry.prototype.toJSON.call(this),shapes,options;return toJSON(this.parameters.shapes,this.parameters.options,data)};var WorldUVGenerator={generateTopUV:function(geometry,vertices,indexA,indexB,indexC){var a_x=vertices[3*indexA],a_y=vert
vendor: 15,004 bytes, line 1
1ices[3*indexA+1],b_x=vertices[3*indexB],b_y=vertices[3*indexB+1],c_x=vertices[3*indexC],c_y=vertices[3*indexC+1];return[new Vector2(a_x,a_y),new Vector2(b_x,b_y),new Vector2(c_x,c_y)]},generateSideWallUV:function(geometry,vertices,indexA,indexB,indexC,indexD){var a_x=vertices[3*indexA],a_y=vertices[3*indexA+1],a_z=vertices[3*indexA+2],b_x=vertices[3*indexB],b_y=vertices[3*indexB+1],b_z=vertices[3*indexB+2],c_x=vertices[3*indexC],c_y=vertices[3*indexC+1],c_z=vertices[3*indexC+2],d_x=vertices[3*indexD],d_y=vertices[3*indexD+1],d_z=vertices[3*indexD+2];return Math.abs(a_y-b_y)<.01?[new Vector2(a_x,1-a_z),new Vector2(b_x,1-b_z),new Vector2(c_x,1-c_z),new Vector2(d_x,1-d_z)]:[new Vector2(a_y,1-a_z),new Vector2(b_y,1-b_z),new Vector2(c_y,1-c_z),new Vector2(d_y,1-d_z)]}};function toJSON(shapes,options,data){if(data.shapes=[],Array.isArray(shapes))for(var i=0,l=shapes.length;i<l;i++){var shape=shapes[i];data.shapes.push(shape.uuid)}else data.shapes.push(shapes.uuid);return void 0!==options.extrudePath&&(data.options.extrudePath=options.extrudePath.toJSON()),data}function TextGeometry(text,parameters){Geometry.call(this),this.type="TextGeometry",this.parameters={text:text,parameters:parameters},this.fromBufferGeometry(new TextBufferGeometry(text,parameters)),this.mergeVertices()}function TextBufferGeometry(text,parameters){var font=(parameters=parameters||{}).font;if(!font||!font.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new Geometry;var shapes=font.generateShapes(text,parameters.size);parameters.depth=void 0!==parameters.height?parameters.height:50,void 0===parameters.bevelThickness&&(parameters.bevelThickness=10),void 0===parameters.bevelSize&&(parameters.bevelSize=8),void 0===parameters.bevelEnabled&&(parameters.bevelEnabled=!1),ExtrudeBufferGeometry.call(this,shapes,parameters),this.type="TextBufferGeometry"}function SphereGeometry(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength){Geometry.call(this),this.type="SphereGeometry",this.parameters={radius:radius,widthSegments:widthSegments,heightSegments:heightSegments,phiStart:phiStart,phiLength:phiLength,thetaStart:thetaStart,thetaLength:thetaLength},this.fromBufferGeometry(new SphereBufferGeometry(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength)),this.mergeVertices()}function SphereBufferGeometry(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength){BufferGeometry.call(this),this.type="SphereBufferGeometry",this.parameters={radius:radius,widthSegments:widthSegments,heightSegments:heightSegments,phiStart:phiStart,phiLength:phiLength,thetaStart:thetaStart,thetaLength:thetaLength},radius=radius||1,widthSegments=Math.max(3,Math.floor(widthSegments)||8),heightSegments=Math.max(2,Math.floor(heightSegments)||6),phiStart=void 0!==phiStart?phiStart:0,phiLength=void 0!==phiLength?phiLength:2*Math.PI;var thetaEnd=(thetaStart=void 0!==thetaStart?thetaStart:0)+(thetaLength=void 0!==thetaLength?thetaLength:Math.PI),ix,iy,index=0,grid=[],vertex=new Vector3,normal=new Vector3,indices=[],vertices=[],normals=[],uvs=[];for(iy=0;iy<=heightSegments;iy++){var verticesRow=[],v=iy/heightSegments;for(ix=0;ix<=widthSegments;ix++){var u=ix/widthSegments;vertex.x=-radius*Math.cos(phiStart+u*phiLength)*Math.sin(thetaStart+v*thetaLength),vertex.y=radius*Math.cos(thetaStart+v*thetaLength),vertex.z=radius*Math.sin(phiStart+u*phiLength)*Math.sin(thetaStart+v*thetaLength),vertices.push(vertex.x,vertex.y,vertex.z),normal.set(vertex.x,vertex.y,vertex.z).normalize(),normals.push(normal.x,normal.y,normal.z),uvs.push(u,1-v),verticesRow.push(index++)}grid.push(verticesRow)}for(iy=0;iy<heightSegments;iy++)for(ix=0;ix<widthSegments;ix++){var a=grid[iy][ix+1],b=grid[iy][ix],c=grid[iy+1][ix],d=grid[iy+1][ix+1];(0!==iy||thetaStart>0)&&indices.push(a,b,d),(iy!==heightSegments-1||thetaEnd<Math.PI)&&indices.push(b,c,d)}this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function RingGeometry(innerRadius,outerRadius,thetaSegments,phiSegments,thetaStart,thetaLength){Geometry.call(this),this.type="RingGeometry",this.parameters={innerRadius:innerRadius,outerRadius:outerRadius,thetaSegments:thetaSegments,phiSegments:phiSegments,thetaStart:thetaStart,thetaLength:thetaLength},this.fromBufferGeometry(new RingBufferGeometry(innerRadius,outerRadius,thetaSegments,phiSegments,thetaStart,thetaLength)),this.mergeVertices()}function RingBufferGeometry(innerRadius,outerRadius,thetaSegments,phiSegments,thetaStart,thetaLength){BufferGeometry.call(this),this.type="RingBufferGeometry",this.parameters={innerRadius:innerRadius,outerRadius:outerRadius,thetaSegments:thetaSegments,phiSegments:phiSegments,thetaStart:thetaStart,thetaLength:thetaLength},innerRadius=innerRadius||.5,outerRadius=outerRadius||1,thetaStart=void 0!==thetaStart?thetaStart:0,thetaLength=void 0!==thetaLength?thetaLength:2*Math.PI,thetaSegments=void 0!==thetaSegments?Math.max(3,thetaSegments):8;var indices=[],vertices=[],normals=[],uvs=[],segment,radius=innerRadius,radiusStep=(outerRadius-innerRadius)/(phiSegments=void 0!==phiSegments?Math.max(1,phiSegments):1),vertex=new Vector3,uv=new Vector2,j,i;for(j=0;j<=phiSegments;j++){for(i=0;i<=thetaSegments;i++)segment=thetaStart+i/thetaSegments*thetaLength,vertex.x=radius*Math.cos(segment),vertex.y=radius*Math.sin(segment),vertices.push(vertex.x,vertex.y,vertex.z),normals.push(0,0,1),uv.x=(vertex.x/outerRadius+1)/2,uv.y=(vertex.y/outerRadius+1)/2,uvs.push(uv.x,uv.y);radius+=radiusStep}for(j=0;j<phiSegments;j++){var thetaSegmentLevel=j*(thetaSegments+1);for(i=0;i<thetaSegments;i++){var a=segment=i+thetaSegmentLevel,b=segment+thetaSegments+1,c=segment+thetaSegments+2,d=segment+1;indices.push(a,b,d),indices.push(b,c,d)}}this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function LatheGeometry(points,segments,phiStart,phiLength){Geometry.call(this),this.type="LatheGeometry",this.parameters={points:points,segments:segments,phiStart:phiStart,phiLength:phiLength},this.fromBufferGeometry(new LatheBufferGeometry(points,segments,phiStart,phiLength)),this.mergeVertices()}function LatheBufferGeometry(points,segments,phiStart,phiLength){BufferGeometry.call(this),this.type="LatheBufferGeometry",this.parameters={points:points,segments:segments,phiStart:phiStart,phiLength:phiLength},segments=Math.floor(segments)||12,phiStart=phiStart||0,phiLength=phiLength||2*Math.PI,phiLength=_Math.clamp(phiLength,0,2*Math.PI);var indices=[],vertices=[],uvs=[],base,inverseSegments=1/segments,vertex=new Vector3,uv=new Vector2,i,j;for(i=0;i<=segments;i++){var phi=phiStart+i*inverseSegments*phiLength,sin=Math.sin(phi),cos=Math.cos(phi);for(j=0;j<=points.length-1;j++)vertex.x=points[j].x*sin,vertex.y=points[j].y,vertex.z=points[j].x*cos,vertices.push(vertex.x,vertex.y,vertex.z),uv.x=i/segments,uv.y=j/(points.length-1),uvs.push(uv.x,uv.y)}for(i=0;i<segments;i++)for(j=0;j<points.length-1;j++){var a=base=j+i*points.length,b=base+points.length,c=base+points.length+1,d=base+1;indices.push(a,b,d),indices.push(b,c,d)}if(this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2)),this.computeVertexNormals(),phiLength===2*Math.PI){var normals=this.attributes.normal.array,n1=new Vector3,n2=new Vector3,n=new Vector3;for(base=segments*points.length*3,i=0,j=0;i<points.length;i++,j+=3)n1.x=normals[j+0],n1.y=normals[j+1],n1.z=normals[j+2],n2.x=normals[base+j+0],n2.y=normals[base+j+1],n2.z=normals[base+j+2],n.addVectors(n1,n2).normalize(),normals[j+0]=normals[base+j+0]=n.x,normals[j+1]=normals[base+j+1]=n.y,normals[j+2]=normals[base+j+2]=n.z}}function ShapeGeometry(shapes,curveSegments){Geometry.call(this),this.type="ShapeGeometry","object"==typeof curveSegments&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),curveSegments=curveSegments.curveSegments),this.parameters={shapes:shapes,curveSegments:curveSegments},this.fromBufferGeometry(new ShapeBufferGeometry(shapes,curveSegments)),this.mergeVertices()}function ShapeBufferGeometry(shapes,curveSegments){BufferGeometry.call(this),this.type="ShapeBufferGeometry",this.parameters={shapes:shapes,curveSegments:curveSegments},curveSegments=curveSegments||12;var indices=[],vertices=[],normals=[],uvs=[],groupStart=0,groupCount=0;if(!1===Array.isArray(shapes))addShape(shapes);else for(var i=0;i<shapes.length;i++)addShape(shapes[i]),this.addGroup(groupStart,groupCount,i),groupStart+=groupCount,groupCount=0;function addShape(shape){var i,l,shapeHole,indexOffset=vertices.length/3,points=shape.extractPoints(curveSegments),shapeVertices=points.shape,shapeHoles=points.holes;for(!1===ShapeUtils.isClockWise(shapeVertices)&&(shapeVertices=shapeVertices.reverse()),i=0,l=shapeHoles.length;i<l;i++)shapeHole=shapeHoles[i],!0===ShapeUtils.isClockWise(shapeHole)&&(shapeHoles[i]=shapeHole.reverse());var faces=ShapeUtils.triangulateShape(shapeVertices,shapeHoles);for(i=0,l=shapeHoles.length;i<l;i++)shapeHole=shapeHoles[i],shapeVertices=shapeVertices.concat(shapeHole);for(i=0,l=shapeVertices.length;i<l;i++){var vertex=shapeVertices[i];vertices.push(vertex.x,vertex.y,0),normals.push(0,0,1),uvs.push(vertex.x,vertex.y)}for(i=0,l=faces.length;i<l;i++){var face=faces[i],a=face[0]+indexOffset,b=face[1]+indexOffset,c=face[2]+indexOffset;indices.push(a,b,c),groupCount+=3}}this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function toJSON$1(shapes,data){if(data.shapes=[],Array.isArray(shapes))for(var i=0,l=shapes.length;i<l;i++){var shape=shapes[i];data.shapes.push(shape.uuid)}else data.shapes.push(shapes.uuid);return data}function EdgesGeometry(geometry,thresholdAngle){BufferGeometry.call(this),this.type="EdgesGeometry",this.parameters={thresholdAngle:thresholdAngle},thresholdAngle=void 0!==thresholdAngle?thresholdAngle:1;var vertices=[],thresholdDot=Math.cos(_Math.DEG2RAD*thresholdAngle),edge=[0,0],edges={},edge1,edge2,key,keys=["a","b","c"],geometry2;geometry.isBufferGeometry?(geometry2=new Geometry).fromBufferGeometry(geometry):geometry2=geometry.clone(),geometry2.mergeVertices(),geometry2.computeFaceNormals();for(var sourceVertices=geometry2.vertices,faces=geometry2.faces,i=0,l=faces.length;i<l;i++)for(var face=faces[i],j=0;j<3;j++)edge1=face[keys[j]],edge2=face[keys[(j+1)%3]],edge[0]=Math.min(edge1,edge2),edge[1]=Math.max(edge1,edge2),void 0===edges[key=edge[0]+","+edge[1]]?edges[key]={index1:edge[0],index2:edge[1],face1:i,face2:void 0}:edges[key].face2=i;for(key in edges){var e=edges[key];if(void 0===e.face2||faces[e.face1].normal.dot(faces[e.face2].normal)<=thresholdDot){var vertex=sourceVertices[e.index1];vertices.push(vertex.x,vertex.y,vertex.z),vertex=sourceVertices[e.index2],vertices.push(vertex.x,vertex.y,vertex.z)}}this.addAttribute("position",new Float32BufferAttribute(vertices,3))}function CylinderGeometry(radiusTop,radiusBottom,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){Geometry.call(this),this.type="CylinderGeometry",this.parameters={radiusTop:radiusTop,radiusBottom:radiusBottom,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength},this.fromBufferGeometry(new CylinderBufferGeometry(radiusTop,radiusBottom,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength)),this.mergeVertices()}function CylinderBufferGeometry(radiusTop,radiusBottom,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){BufferGeometry.call(this),this.type="CylinderBufferGeometry",this.parameters={radiusTop:radiusTop,radiusBottom:radiusBottom,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength};var scope=this;radiusTop=void 0!==radiusTop?radiusTop:1,radiusBottom=void 0!==radiusBottom?radiusBottom:1,height=height||1,radialSegments=Math.floor(radialSegments)||8,heightSegments=Math.floor(heightSegments)||1,openEnded=void 0!==openEnded&&openEnded,thetaStart=void 0!==thetaStart?thetaStart:0,thetaLength=void 0!==thetaLength?thetaLength:2*Math.PI;var indices=[],vertices=[],normals=[],uvs=[],index=0,indexArray=[],halfHeight=height/2,groupStart=0;function generateTorso(){var x,y,normal=new Vector3,vertex=new Vector3,groupCount=0,slope=(radiusBottom-radiusTop)/height;for(y=0;y<=heightSegments;y++){var indexRow=[],v=y/heightSegments,radius=v*(radiusBottom-radiusTop)+radiusTop;for(x=0;x<=radialSegments;x++){var u=x/radialSegments,theta=u*thetaLength+thetaStart,sinTheta=Math.sin(theta),cosTheta=Math.cos(theta);vertex.x=radius*sinTheta,vertex.y=-v*height+halfHeight,vertex.z=radius*cosTheta,vertices.push(vertex.x,vertex.y,vertex.z),normal.set(sinTheta,slope,cosTheta).normalize(),normals.push(normal.x,normal.y,normal.z),uvs.push(u,1-v),indexRow.push(index++)}indexArray.push(indexRow)}for(x=0;x<radialSegments;x++)for(y=0;y<heightSegments;y++){var a=indexArray[y][x],b=indexArray[y+1][x],c=indexArray[y+1][x+1],d=indexArray[y][x+1];indices.push(a,b,d),indices.push(b,c,d),groupCount+=6}scope.addGroup(groupStart,groupCount,0),groupStart+=groupCount}function generateCap(top){var x,centerIndexStart,centerIndexEnd,uv=new Vector2,vertex=new Vector3,groupCount=0,radius=!0===top?radiusTop:radiusBottom,sign=!0===top?1:-1;for(centerIndexStart=index,x=1;x<=radialSegments;x++)vertices.push(0,halfHeight*sign,0),normals.push(0,sign,0),uvs.push(.5,.5),index++;for(centerIndexEnd=index,x=0;x<=radialSegments;x++){var u,theta=x/radialSegments*thetaLength+thetaStart,cosTheta=Math.cos(theta),sinTheta=Math.sin(theta);vertex.x=radius*sinTheta,vertex.y=halfHeight*sign,vertex.z=radius*cosTheta,vertices.push(vertex.x,vertex.y,vertex.z),normals.push(0,sign,0),uv.x=.5*cosTheta+.5,uv.y=.5*sinTheta*sign+.5,uvs.push(uv.x,uv.y),index++}for(x=0;x<radialSegments;x++){var c=centerIndexStart+x,i=centerIndexEnd+x;!0===top?indices.push(i,i+1,c):indices.push(i+1,i,c),groupCount+=3}scope.addGroup(groupStart,groupCount,!0===top?1:2),groupStart+=groupCount}generateTorso(),!1===openEnded&&(radiusTop>0&&generateCap(!0),radiusBottom>0&&generateCap(!1)),this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}function ConeGeometry(radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){CylinderGeometry.call(this,0,radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength),this.type="C
1oneGeometry",this.parameters={radius:radius,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength}}function ConeBufferGeometry(radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){CylinderBufferGeometry.call(this,0,radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength),this.type="ConeBufferGeometry",this.parameters={radius:radius,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength}}function CircleGeometry(radius,segments,thetaStart,thetaLength){Geometry.call(this),this.type="CircleGeometry",this.parameters={radius:radius,segments:segments,thetaStart:thetaStart,thetaLength:thetaLength},this.fromBufferGeometry(new CircleBufferGeometry(radius,segments,thetaStart,thetaLength)),this.mergeVertices()}function CircleBufferGeometry(radius,segments,thetaStart,thetaLength){BufferGeometry.call(this),this.type="CircleBufferGeometry",this.parameters={radius:radius,segments:segments,thetaStart:thetaStart,thetaLength:thetaLength},radius=radius||1,segments=void 0!==segments?Math.max(3,segments):8,thetaStart=void 0!==thetaStart?thetaStart:0,thetaLength=void 0!==thetaLength?thetaLength:2*Math.PI;var indices=[],vertices=[],normals=[],uvs=[],i,s,vertex=new Vector3,uv=new Vector2;for(vertices.push(0,0,0),normals.push(0,0,1),uvs.push(.5,.5),s=0,i=3;s<=segments;s++,i+=3){var segment=thetaStart+s/segments*thetaLength;vertex.x=radius*Math.cos(segment),vertex.y=radius*Math.sin(segment),vertices.push(vertex.x,vertex.y,vertex.z),normals.push(0,0,1),uv.x=(vertices[i]/radius+1)/2,uv.y=(vertices[i+1]/radius+1)/2,uvs.push(uv.x,uv.y)}for(i=1;i<=segments;i++)indices.push(i,i+1,0);this.setIndex(indices),this.addAttribute("position",new Float32BufferAttribute(vertices,3)),this.addAttribute("normal",new Float32BufferAttribute(normals,3)),this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}TextGeometry.prototype=Object.create(Geometry.prototype),TextGeometry.prototype.constructor=TextGeometry,TextBufferGeometry.prototype=Object.create(ExtrudeBufferGeometry.prototype),TextBufferGeometry.prototype.constructor=TextBufferGeometry,SphereGeometry.prototype=Object.create(Geometry.prototype),SphereGeometry.prototype.constructor=SphereGeometry,SphereBufferGeometry.prototype=Object.create(BufferGeometry.prototype),SphereBufferGeometry.prototype.constructor=SphereBufferGeometry,RingGeometry.prototype=Object.create(Geometry.prototype),RingGeometry.prototype.constructor=RingGeometry,RingBufferGeometry.prototype=Object.create(BufferGeometry.prototype),RingBufferGeometry.prototype.constructor=RingBufferGeometry,LatheGeometry.prototype=Object.create(Geometry.prototype),LatheGeometry.prototype.constructor=LatheGeometry,LatheBufferGeometry.prototype=Object.create(BufferGeometry.prototype),LatheBufferGeometry.prototype.constructor=LatheBufferGeometry,ShapeGeometry.prototype=Object.create(Geometry.prototype),ShapeGeometry.prototype.constructor=ShapeGeometry,ShapeGeometry.prototype.toJSON=function(){var data=Geometry.prototype.toJSON.call(this),shapes;return toJSON$1(this.parameters.shapes,data)},ShapeBufferGeometry.prototype=Object.create(BufferGeometry.prototype),ShapeBufferGeometry.prototype.constructor=ShapeBufferGeometry,ShapeBufferGeometry.prototype.toJSON=function(){var data=BufferGeometry.prototype.toJSON.call(this),shapes;return toJSON$1(this.parameters.shapes,data)},EdgesGeometry.prototype=Object.create(BufferGeometry.prototype),EdgesGeometry.prototype.constructor=EdgesGeometry,CylinderGeometry.prototype=Object.create(Geometry.prototype),CylinderGeometry.prototype.constructor=CylinderGeometry,CylinderBufferGeometry.prototype=Object.create(BufferGeometry.prototype),CylinderBufferGeometry.prototype.constructor=CylinderBufferGeometry,ConeGeometry.prototype=Object.create(CylinderGeometry.prototype),ConeGeometry.prototype.constructor=ConeGeometry,ConeBufferGeometry.prototype=Object.create(CylinderBufferGeometry.prototype),ConeBufferGeometry.prototype.constructor=ConeBufferGeometry,CircleGeometry.prototype=Object.create(Geometry.prototype),CircleGeometry.prototype.constructor=CircleGeometry,CircleBufferGeometry.prototype=Object.create(BufferGeometry.prototype),CircleBufferGeometry.prototype.constructor=CircleBufferGeometry;var Geometries=Object.freeze({WireframeGeometry:WireframeGeometry,ParametricGeometry:ParametricGeometry,ParametricBufferGeometry:ParametricBufferGeometry,TetrahedronGeometry:TetrahedronGeometry,TetrahedronBufferGeometry:TetrahedronBufferGeometry,OctahedronGeometry:OctahedronGeometry,OctahedronBufferGeometry:OctahedronBufferGeometry,IcosahedronGeometry:IcosahedronGeometry,IcosahedronBufferGeometry:IcosahedronBufferGeometry,DodecahedronGeometry:DodecahedronGeometry,DodecahedronBufferGeometry:DodecahedronBufferGeometry,PolyhedronGeometry:PolyhedronGeometry,PolyhedronBufferGeometry:PolyhedronBufferGeometry,TubeGeometry:TubeGeometry,TubeBufferGeometry:TubeBufferGeometry,TorusKnotGeometry:TorusKnotGeometry,TorusKnotBufferGeometry:TorusKnotBufferGeometry,TorusGeometry:TorusGeometry,TorusBufferGeometry:TorusBufferGeometry,TextGeometry:TextGeometry,TextBufferGeometry:TextBufferGeometry,SphereGeometry:SphereGeometry,SphereBufferGeometry:SphereBufferGeometry,RingGeometry:RingGeometry,RingBufferGeometry:RingBufferGeometry,PlaneGeometry:PlaneGeometry,PlaneBufferGeometry:PlaneBufferGeometry,LatheGeometry:LatheGeometry,LatheBufferGeometry:LatheBufferGeometry,ShapeGeometry:ShapeGeometry,ShapeBufferGeometry:ShapeBufferGeometry,ExtrudeGeometry:ExtrudeGeometry,ExtrudeBufferGeometry:ExtrudeBufferGeometry,EdgesGeometry:EdgesGeometry,ConeGeometry:ConeGeometry,ConeBufferGeometry:ConeBufferGeometry,CylinderGeometry:CylinderGeometry,CylinderBufferGeometry:CylinderBufferGeometry,CircleGeometry:CircleGeometry,CircleBufferGeometry:CircleBufferGeometry,BoxGeometry:BoxGeometry,BoxBufferGeometry:BoxBufferGeometry});function ShadowMaterial(parameters){Material.call(this),this.type="ShadowMaterial",this.color=new Color(0),this.transparent=!0,this.setValues(parameters)}function RawShaderMaterial(parameters){ShaderMaterial.call(this,parameters),this.type="RawShaderMaterial"}function MeshStandardMaterial(parameters){Material.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new Color(16777215),this.roughness=.5,this.metalness=.5,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(parameters)}function MeshPhysicalMaterial(parameters){MeshStandardMaterial.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoat=0,this.clearCoatRoughness=0,this.setValues(parameters)}function MeshPhongMaterial(parameters){Material.call(this),this.type="MeshPhongMaterial",this.color=new Color(16777215),this.specular=new Color(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(parameters)}function MeshToonMaterial(parameters){MeshPhongMaterial.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(parameters)}function MeshNormalMaterial(parameters){Material.call(this),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(parameters)}function MeshLambertMaterial(parameters){Material.call(this),this.type="MeshLambertMaterial",this.color=new Color(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(parameters)}function MeshMatcapMaterial(parameters){Material.call(this),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Color(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.lights=!1,this.setValues(parameters)}function LineDashedMaterial(parameters){LineBasicMaterial.call(this),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(parameters)}ShadowMaterial.prototype=Object.create(Material.prototype),ShadowMaterial.prototype.constructor=ShadowMaterial,ShadowMaterial.prototype.isShadowMaterial=!0,ShadowMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.color.copy(source.color),this},RawShaderMaterial.prototype=Object.create(ShaderMaterial.prototype),RawShaderMaterial.prototype.constructor=RawShaderMaterial,RawShaderMaterial.prototype.isRawShaderMaterial=!0,MeshStandardMaterial.prototype=Object.create(Material.prototype),MeshStandardMaterial.prototype.constructor=MeshStandardMaterial,MeshStandardMaterial.prototype.isMeshStandardMaterial=!0,MeshStandardMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.defines={STANDARD:""},this.color.copy(source.color),this.roughness=source.roughness,this.metalness=source.metalness,this.map=source.map,this.lightMap=source.lightMap,this.lightMapIntensity=source.lightMapIntensity,this.aoMap=source.aoMap,this.aoMapIntensity=source.aoMapIntensity,this.emissive.copy(source.emissive),this.emissiveMap=source.emissiveMap,this.emissiveIntensity=source.emissiveIntensity,this.bumpMap=source.bumpMap,this.bumpScale=source.bumpScale,this.normalMap=source.normalMap,this.normalMapType=source.normalMapType,this.normalScale.copy(source.normalScale),this.displacementMap=source.displacementMap,this.displacementScale=source.displacementScale,this.displacementBias=source.displacementBias,this.roughnessMap=source.roughnessMap,this.metalnessMap=source.metalnessMap,this.alphaMap=source.alphaMap,this.envMap=source.envMap,this.envMapIntensity=source.envMapIntensity,this.refractionRatio=source.refractionRatio,this.wireframe=source.wireframe,this.wireframeLinewidth=source.wireframeLinewidth,this.wireframeLinecap=source.wireframeLinecap,this.wireframeLinejoin=source.wireframeLinejoin,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.morphNormals=source.morphNormals,this},MeshPhysicalMaterial.prototype=Object.create(MeshStandardMaterial.prototype),MeshPhysicalMaterial.prototype.constructor=MeshPhysicalMaterial,MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial=!0,MeshPhysicalMaterial.prototype.copy=function(source){return MeshStandardMaterial.prototype.copy.call(this,source),this.defines={PHYSICAL:""},this.reflectivity=source.reflectivity,this.clearCoat=source.clearCoat,this.clearCoatRoughness=source.clearCoatRoughness,this},MeshPhongMaterial.prototype=Object.create(Material.prototype),MeshPhongMaterial.prototype.constructor=MeshPhongMaterial,MeshPhongMaterial.prototype.isMeshPhongMaterial=!0,MeshPhongMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.color.copy(source.color),this.specular.copy(source.specular),this.shininess=source.shininess,this.map=source.map,this.lightMap=source.lightMap,this.lightMapIntensity=source.lightMapIntensity,this.aoMap=source.aoMap,this.aoMapIntensity=source.aoMapIntensity,this.emissive.copy(source.emissive),this.emissiveMap=source.emissiveMap,this.emissiveIntensity=source.emissiveIntensity,this.bumpMap=source.bumpMap,this.bumpScale=source.bumpScale,this.normalMap=source.normalMap,this.normalMapType=source.normalMapType,this.normalScale.copy(source.normalScale),this.displacementMap=source.displacementMap,this.displacementScale=source.displacementScale,this.displacementBias=source.displacementBias,this.specularMap=source.specularMap,this.alphaMap=source.alphaMap,this.envMap=source.envMap,this.combine=source.combine,this.reflectivity=source.reflectivity,this.refractionRatio=source.refractionRatio,this.wireframe=source.wireframe,this.wireframeLinewidth=source.wireframeLinewidth,this.wireframeLinecap=source.wireframeLinecap,this.wireframeLinejoin=source.wireframeLinejoin,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.morphNormals=source.morphNormals,this},MeshToonMaterial.prototype=Object.create(MeshPhongMaterial.prototype),MeshToonMaterial.prototype.constructor=MeshToonMaterial,MeshToonMaterial.prototype.isMeshToonMaterial=!0,MeshToonMaterial.prototype.copy=function(source){return MeshPhongMaterial.prototype.copy.call(this,source),this.gradientMap=source.gradientMap,this},MeshNormalMaterial.prototype=Object.create(Material.prototype),MeshNormalMaterial.prototype.constructor=MeshNormalMaterial,MeshNormalMaterial.prototype.isMeshNormalMaterial=!0,MeshNormalMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.bumpMap=source.bumpMap,this.bumpScale=source.bumpScale,this.normalMap=source.normalMap,this.normalMapType=source.normalMapType,this.normalScale.copy(source.normalScale),this.displacementMap=source.displacementMap,this.displacementScale=source.displacementScale,this.displacementBias=source.displacementBias,this.wireframe=source.wireframe,this.wireframeLinewidth=source.wireframeLinewidth,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.morphNormals=source.morphNormals,this},MeshLambertMaterial.prototype=Object.create(Material.prototype),MeshLambertMaterial.prototype.constructor=MeshLambertMaterial,MeshLambertMaterial.prototype.isMeshLambertMaterial=!0,MeshLambertMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.color.copy(source.color),this.map=source.map,this.lightMap=source.lightMap,this.lightMapIntensity=source.lightMapIntensity,this.aoMap=source.aoMap,this.aoMapIntensity=source.aoMapIntensity,this.emissive.copy(source.emissive),this.emissiveMap=source.emissiveMap,this.emissiveIntensity=source.emissiveIntensity,this.specularMap=source.specularMap,this.alphaMap=source.alphaMap,this.envMap=source.envMap,this.combine=source.combine,this.reflectivity=source.reflectivity,this.refractionRatio=source.refractionRatio,this.wireframe=source.wireframe,this.wireframeLinewidth=source.wireframeLinewidth,this.wireframeLinecap=source.wireframeLinecap,this.wireframeLinejoin=source.wireframeLinejoin,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.morphNormals=source.morphNormals,this},MeshMatcapMaterial.prototype=Object.create(Material.prototype),MeshMatcapMaterial.prototype.constructor=MeshMatcapMaterial,MeshMatcapMaterial.prototype.isMeshMat
vendor: 16,898 bytes, line 1
1capMaterial=!0,MeshMatcapMaterial.prototype.copy=function(source){return Material.prototype.copy.call(this,source),this.defines={MATCAP:""},this.color.copy(source.color),this.matcap=source.matcap,this.map=source.map,this.bumpMap=source.bumpMap,this.bumpScale=source.bumpScale,this.normalMap=source.normalMap,this.normalMapType=source.normalMapType,this.normalScale.copy(source.normalScale),this.displacementMap=source.displacementMap,this.displacementScale=source.displacementScale,this.displacementBias=source.displacementBias,this.alphaMap=source.alphaMap,this.skinning=source.skinning,this.morphTargets=source.morphTargets,this.morphNormals=source.morphNormals,this},LineDashedMaterial.prototype=Object.create(LineBasicMaterial.prototype),LineDashedMaterial.prototype.constructor=LineDashedMaterial,LineDashedMaterial.prototype.isLineDashedMaterial=!0,LineDashedMaterial.prototype.copy=function(source){return LineBasicMaterial.prototype.copy.call(this,source),this.scale=source.scale,this.dashSize=source.dashSize,this.gapSize=source.gapSize,this};var Materials=Object.freeze({ShadowMaterial:ShadowMaterial,SpriteMaterial:SpriteMaterial,RawShaderMaterial:RawShaderMaterial,ShaderMaterial:ShaderMaterial,PointsMaterial:PointsMaterial,MeshPhysicalMaterial:MeshPhysicalMaterial,MeshStandardMaterial:MeshStandardMaterial,MeshPhongMaterial:MeshPhongMaterial,MeshToonMaterial:MeshToonMaterial,MeshNormalMaterial:MeshNormalMaterial,MeshLambertMaterial:MeshLambertMaterial,MeshDepthMaterial:MeshDepthMaterial,MeshDistanceMaterial:MeshDistanceMaterial,MeshBasicMaterial:MeshBasicMaterial,MeshMatcapMaterial:MeshMatcapMaterial,LineDashedMaterial:LineDashedMaterial,LineBasicMaterial:LineBasicMaterial,Material:Material}),AnimationUtils={arraySlice:function(array,from,to){return AnimationUtils.isTypedArray(array)?new array.constructor(array.subarray(from,void 0!==to?to:array.length)):array.slice(from,to)},convertArray:function(array,type,forceClone){return!array||!forceClone&&array.constructor===type?array:"number"==typeof type.BYTES_PER_ELEMENT?new type(array):Array.prototype.slice.call(array)},isTypedArray:function(object){return ArrayBuffer.isView(object)&&!(object instanceof DataView)},getKeyframeOrder:function(times){function compareTime(i,j){return times[i]-times[j]}for(var n=times.length,result=new Array(n),i=0;i!==n;++i)result[i]=i;return result.sort(compareTime),result},sortedArray:function(values,stride,order){for(var nValues=values.length,result=new values.constructor(nValues),i=0,dstOffset=0;dstOffset!==nValues;++i)for(var srcOffset=order[i]*stride,j=0;j!==stride;++j)result[dstOffset++]=values[srcOffset+j];return result},flattenJSON:function(jsonKeys,times,values,valuePropertyName){for(var i=1,key=jsonKeys[0];void 0!==key&&void 0===key[valuePropertyName];)key=jsonKeys[i++];if(void 0!==key){var value=key[valuePropertyName];if(void 0!==value)if(Array.isArray(value))do{void 0!==(value=key[valuePropertyName])&&(times.push(key.time),values.push.apply(values,value)),key=jsonKeys[i++]}while(void 0!==key);else if(void 0!==value.toArray)do{void 0!==(value=key[valuePropertyName])&&(times.push(key.time),value.toArray(values,values.length)),key=jsonKeys[i++]}while(void 0!==key);else do{void 0!==(value=key[valuePropertyName])&&(times.push(key.time),values.push(value)),key=jsonKeys[i++]}while(void 0!==key)}}};function Interpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){this.parameterPositions=parameterPositions,this._cachedIndex=0,this.resultBuffer=void 0!==resultBuffer?resultBuffer:new sampleValues.constructor(sampleSize),this.sampleValues=sampleValues,this.valueSize=sampleSize}function CubicInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0}function LinearInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}function DiscreteInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}function KeyframeTrack(name,times,values,interpolation){if(void 0===name)throw new Error("THREE.KeyframeTrack: track name is undefined");if(void 0===times||0===times.length)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+name);this.name=name,this.times=AnimationUtils.convertArray(times,this.TimeBufferType),this.values=AnimationUtils.convertArray(values,this.ValueBufferType),this.setInterpolation(interpolation||this.DefaultInterpolation)}function BooleanKeyframeTrack(name,times,values){KeyframeTrack.call(this,name,times,values)}function ColorKeyframeTrack(name,times,values,interpolation){KeyframeTrack.call(this,name,times,values,interpolation)}function NumberKeyframeTrack(name,times,values,interpolation){KeyframeTrack.call(this,name,times,values,interpolation)}function QuaternionLinearInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}function QuaternionKeyframeTrack(name,times,values,interpolation){KeyframeTrack.call(this,name,times,values,interpolation)}function StringKeyframeTrack(name,times,values,interpolation){KeyframeTrack.call(this,name,times,values,interpolation)}function VectorKeyframeTrack(name,times,values,interpolation){KeyframeTrack.call(this,name,times,values,interpolation)}function AnimationClip(name,duration,tracks){this.name=name,this.tracks=tracks,this.duration=void 0!==duration?duration:-1,this.uuid=_Math.generateUUID(),this.duration<0&&this.resetDuration()}function getTrackTypeForValueTypeName(typeName){switch(typeName.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return VectorKeyframeTrack;case"color":return ColorKeyframeTrack;case"quaternion":return QuaternionKeyframeTrack;case"bool":case"boolean":return BooleanKeyframeTrack;case"string":return StringKeyframeTrack}throw new Error("THREE.KeyframeTrack: Unsupported typeName: "+typeName)}function parseKeyframeTrack(json){if(void 0===json.type)throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");var trackType=getTrackTypeForValueTypeName(json.type);if(void 0===json.times){var times=[],values=[];AnimationUtils.flattenJSON(json.keys,times,values,"value"),json.times=times,json.values=values}return void 0!==trackType.parse?trackType.parse(json):new trackType(json.name,json.times,json.values,json.interpolation)}Object.assign(Interpolant.prototype,{evaluate:function(t){var pp=this.parameterPositions,i1=this._cachedIndex,t1=pp[i1],t0=pp[i1-1];validate_interval:{seek:{var right;linear_scan:{forward_scan:if(!(t<t1)){for(var giveUpAt=i1+2;;){if(void 0===t1){if(t<t0)break forward_scan;return i1=pp.length,this._cachedIndex=i1,this.afterEnd_(i1-1,t,t0)}if(i1===giveUpAt)break;if(t0=t1,t<(t1=pp[++i1]))break seek}right=pp.length;break linear_scan}if(t>=t0)break validate_interval;var t1global=pp[1];t<t1global&&(i1=2,t0=t1global);for(var giveUpAt=i1-2;;){if(void 0===t0)return this._cachedIndex=0,this.beforeStart_(0,t,t1);if(i1===giveUpAt)break;if(t1=t0,t>=(t0=pp[--i1-1]))break seek}right=i1,i1=0}for(;i1<right;){var mid=i1+right>>>1;t<pp[mid]?right=mid:i1=mid+1}if(t1=pp[i1],void 0===(t0=pp[i1-1]))return this._cachedIndex=0,this.beforeStart_(0,t,t1);if(void 0===t1)return i1=pp.length,this._cachedIndex=i1,this.afterEnd_(i1-1,t0,t)}this._cachedIndex=i1,this.intervalChanged_(i1,t0,t1)}return this.interpolate_(i1,t0,t,t1)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(index){for(var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,offset=index*stride,i=0;i!==stride;++i)result[i]=values[offset+i];return result},interpolate_:function(){throw new Error("call to abstract method")},intervalChanged_:function(){}}),Object.assign(Interpolant.prototype,{beforeStart_:Interpolant.prototype.copySampleValue_,afterEnd_:Interpolant.prototype.copySampleValue_}),CubicInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:CubicInterpolant,DefaultSettings_:{endingStart:2400,endingEnd:2400},intervalChanged_:function(i1,t0,t1){var pp=this.parameterPositions,iPrev=i1-2,iNext=i1+1,tPrev=pp[iPrev],tNext=pp[iNext];if(void 0===tPrev)switch(this.getSettings_().endingStart){case 2401:iPrev=i1,tPrev=2*t0-t1;break;case 2402:tPrev=t0+pp[iPrev=pp.length-2]-pp[iPrev+1];break;default:iPrev=i1,tPrev=t1}if(void 0===tNext)switch(this.getSettings_().endingEnd){case 2401:iNext=i1,tNext=2*t1-t0;break;case 2402:iNext=1,tNext=t1+pp[1]-pp[0];break;default:iNext=i1-1,tNext=t0}var halfDt=.5*(t1-t0),stride=this.valueSize;this._weightPrev=halfDt/(t0-tPrev),this._weightNext=halfDt/(tNext-t1),this._offsetPrev=iPrev*stride,this._offsetNext=iNext*stride},interpolate_:function(i1,t0,t,t1){for(var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,o1=i1*stride,o0=o1-stride,oP=this._offsetPrev,oN=this._offsetNext,wP=this._weightPrev,wN=this._weightNext,p=(t-t0)/(t1-t0),pp=p*p,ppp=pp*p,sP=-wP*ppp+2*wP*pp-wP*p,s0=(1+wP)*ppp+(-1.5-2*wP)*pp+(-.5+wP)*p+1,s1=(-1-wN)*ppp+(1.5+wN)*pp+.5*p,sN=wN*ppp-wN*pp,i=0;i!==stride;++i)result[i]=sP*values[oP+i]+s0*values[o0+i]+s1*values[o1+i]+sN*values[oN+i];return result}}),LinearInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:LinearInterpolant,interpolate_:function(i1,t0,t,t1){for(var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,offset1=i1*stride,offset0=offset1-stride,weight1=(t-t0)/(t1-t0),weight0=1-weight1,i=0;i!==stride;++i)result[i]=values[offset0+i]*weight0+values[offset1+i]*weight1;return result}}),DiscreteInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:DiscreteInterpolant,interpolate_:function(i1){return this.copySampleValue_(i1-1)}}),Object.assign(KeyframeTrack,{toJSON:function(track){var trackType=track.constructor,json;if(void 0!==trackType.toJSON)json=trackType.toJSON(track);else{json={name:track.name,times:AnimationUtils.convertArray(track.times,Array),values:AnimationUtils.convertArray(track.values,Array)};var interpolation=track.getInterpolation();interpolation!==track.DefaultInterpolation&&(json.interpolation=interpolation)}return json.type=track.ValueTypeName,json}}),Object.assign(KeyframeTrack.prototype,{constructor:KeyframeTrack,TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(result){return new DiscreteInterpolant(this.times,this.values,this.getValueSize(),result)},InterpolantFactoryMethodLinear:function(result){return new LinearInterpolant(this.times,this.values,this.getValueSize(),result)},InterpolantFactoryMethodSmooth:function(result){return new CubicInterpolant(this.times,this.values,this.getValueSize(),result)},setInterpolation:function(interpolation){var factoryMethod;switch(interpolation){case 2300:factoryMethod=this.InterpolantFactoryMethodDiscrete;break;case 2301:factoryMethod=this.InterpolantFactoryMethodLinear;break;case 2302:factoryMethod=this.InterpolantFactoryMethodSmooth}if(void 0===factoryMethod){var message="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant){if(interpolation===this.DefaultInterpolation)throw new Error(message);this.setInterpolation(this.DefaultInterpolation)}return console.warn("THREE.KeyframeTrack:",message),this}return this.createInterpolant=factoryMethod,this},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(timeOffset){if(0!==timeOffset)for(var times=this.times,i=0,n=times.length;i!==n;++i)times[i]+=timeOffset;return this},scale:function(timeScale){if(1!==timeScale)for(var times=this.times,i=0,n=times.length;i!==n;++i)times[i]*=timeScale;return this},trim:function(startTime,endTime){for(var times=this.times,nKeys=times.length,from=0,to=nKeys-1;from!==nKeys&×[from]<startTime;)++from;for(;-1!==to&×[to]>endTime;)--to;if(++to,0!==from||to!==nKeys){from>=to&&(from=(to=Math.max(to,1))-1);var stride=this.getValueSize();this.times=AnimationUtils.arraySlice(times,from,to),this.values=AnimationUtils.arraySlice(this.values,from*stride,to*stride)}return this},validate:function(){var valid=!0,valueSize=this.getValueSize();valueSize-Math.floor(valueSize)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),valid=!1);var times=this.times,values=this.values,nKeys=times.length;0===nKeys&&(console.error("THREE.KeyframeTrack: Track is empty.",this),valid=!1);for(var prevTime=null,i=0;i!==nKeys;i++){var currTime=times[i];if("number"==typeof currTime&&isNaN(currTime)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,i,currTime),valid=!1;break}if(null!==prevTime&&prevTime>currTime){console.error("THREE.KeyframeTrack: Out of order keys.",this,i,currTime,prevTime),valid=!1;break}prevTime=currTime}if(void 0!==values&&AnimationUtils.isTypedArray(values))for(var i=0,n=values.length;i!==n;++i){var value=values[i];if(isNaN(value)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,i,value),valid=!1;break}}return valid},optimize:function(){for(var times=this.times,values=this.values,stride=this.getValueSize(),smoothInterpolation=2302===this.getInterpolation(),writeIndex=1,lastIndex=times.length-1,i=1;i<lastIndex;++i){var keep=!1,time=times[i],timeNext;if(time!==times[i+1]&&(1!==i||time!==time[0]))if(smoothInterpolation)keep=!0;else for(var offset=i*stride,offsetP=offset-stride,offsetN=offset+stride,j=0;j!==stride;++j){var value=values[offset+j];if(value!==values[offsetP+j]||value!==values[offsetN+j]){keep=!0;break}}if(keep){if(i!==writeIndex){times[writeIndex]=times[i];for(var readOffset=i*stride,writeOffset=writeIndex*stride,j=0;j!==stride;++j)values[writeOffset+j]=values[readOffset+j]}++writeIndex}}if(lastIndex>0){times[writeIndex]=times[lastIndex];for(var readOffset=lastIndex*stride,writeOffset=writeIndex*stride,j=0;j!==stride;++j)values[writeOffset+j]=values[readOffset+j];++writeIndex}return writeIndex!==times.length&&(this.times=AnimationUtils.arraySlice(times,0,writeIndex),this.values=AnimationUtils.arraySlice(values,0,writeIndex*stride)),this}}),BooleanKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrack.prototype),{constructor:BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ColorKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrack.prototype),{constructor:ColorKeyframeTrack,ValueTypeName:"color"}),NumberKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrack.prototype),{constructor:NumberKeyframeTrack,ValueTypeName:"number"}),QuaternionLinearInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:QuaternionLinearInterpolant,interpolate_:function(i1,t0,t,t1){for(var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,offset=i1*stride,alpha=(t-t0)/(t1-t0),end=offset+stride;offset!==end;offset+=4)Quaternion.slerpFlat(result,0,values,offset-stride,values,offset,alpha);return result}}),QuaternionKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrack.prototype),{constructor:QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(result){return new QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),result)},InterpolantFactoryMethodSmooth:void 0}),StringKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrack.prototype),{constructor:StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),VectorKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrack.prototype),{constructor:VectorKeyframeTrack,ValueTypeName:"vector"}),Object.assign(AnimationClip,{parse:function(json){for(var tracks=[],jsonTracks=json.tracks,frameTime=1/(json.fps||1),i=0,n=jsonTracks.length;i!==n;++i)tracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime));return new AnimationClip(json.name,json.duration,tracks)},toJSON:function(clip){for(var tracks=[],clipTracks=clip.tracks,json={name:clip.name,duration:clip.duration,tracks:tracks,uuid:clip.uuid},i=0,n=clipTracks.length;i!==n;++i)tracks.push(KeyframeTrack.toJSON(clipTracks[i]));return json}
vendor: 8,232 bytes, line 1
1,CreateFromMorphTargetSequence:function(name,morphTargetSequence,fps,noLoop){for(var numMorphTargets=morphTargetSequence.length,tracks=[],i=0;i<numMorphTargets;i++){var times=[],values=[];times.push((i+numMorphTargets-1)%numMorphTargets,i,(i+1)%numMorphTargets),values.push(0,1,0);var order=AnimationUtils.getKeyframeOrder(times);times=AnimationUtils.sortedArray(times,1,order),values=AnimationUtils.sortedArray(values,1,order),noLoop||0!==times[0]||(times.push(numMorphTargets),values.push(values[0])),tracks.push(new NumberKeyframeTrack(".morphTargetInfluences["+morphTargetSequence[i].name+"]",times,values).scale(1/fps))}return new AnimationClip(name,-1,tracks)},findByName:function(objectOrClipArray,name){var clipArray=objectOrClipArray;if(!Array.isArray(objectOrClipArray)){var o=objectOrClipArray;clipArray=o.geometry&&o.geometry.animations||o.animations}for(var i=0;i<clipArray.length;i++)if(clipArray[i].name===name)return clipArray[i];return null},CreateClipsFromMorphTargetSequences:function(morphTargets,fps,noLoop){for(var animationToMorphTargets={},pattern=/^([\w-]*?)([\d]+)$/,i=0,il=morphTargets.length;i<il;i++){var morphTarget=morphTargets[i],parts=morphTarget.name.match(pattern);if(parts&&parts.length>1){var name,animationMorphTargets=animationToMorphTargets[name=parts[1]];animationMorphTargets||(animationToMorphTargets[name]=animationMorphTargets=[]),animationMorphTargets.push(morphTarget)}}var clips=[];for(var name in animationToMorphTargets)clips.push(AnimationClip.CreateFromMorphTargetSequence(name,animationToMorphTargets[name],fps,noLoop));return clips},parseAnimation:function(animation,bones){if(!animation)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var addNonemptyTrack=function(trackType,trackName,animationKeys,propertyName,destTracks){if(0!==animationKeys.length){var times=[],values=[];AnimationUtils.flattenJSON(animationKeys,times,values,propertyName),0!==times.length&&destTracks.push(new trackType(trackName,times,values))}},tracks=[],clipName=animation.name||"default",duration=animation.length||-1,fps=animation.fps||30,hierarchyTracks=animation.hierarchy||[],h=0;h<hierarchyTracks.length;h++){var animationKeys=hierarchyTracks[h].keys;if(animationKeys&&0!==animationKeys.length)if(animationKeys[0].morphTargets){for(var morphTargetNames={},k=0;k<animationKeys.length;k++)if(animationKeys[k].morphTargets)for(var m=0;m<animationKeys[k].morphTargets.length;m++)morphTargetNames[animationKeys[k].morphTargets[m]]=-1;for(var morphTargetName in morphTargetNames){for(var times=[],values=[],m=0;m!==animationKeys[k].morphTargets.length;++m){var animationKey=animationKeys[k];times.push(animationKey.time),values.push(animationKey.morphTarget===morphTargetName?1:0)}tracks.push(new NumberKeyframeTrack(".morphTargetInfluence["+morphTargetName+"]",times,values))}duration=morphTargetNames.length*(fps||1)}else{var boneName=".bones["+bones[h].name+"]";addNonemptyTrack(VectorKeyframeTrack,boneName+".position",animationKeys,"pos",tracks),addNonemptyTrack(QuaternionKeyframeTrack,boneName+".quaternion",animationKeys,"rot",tracks),addNonemptyTrack(VectorKeyframeTrack,boneName+".scale",animationKeys,"scl",tracks)}}return 0===tracks.length?null:new AnimationClip(clipName,duration,tracks);var clip}}),Object.assign(AnimationClip.prototype,{resetDuration:function(){for(var tracks,duration=0,i=0,n=this.tracks.length;i!==n;++i){var track=this.tracks[i];duration=Math.max(duration,track.times[track.times.length-1])}return this.duration=duration,this},trim:function(){for(var i=0;i<this.tracks.length;i++)this.tracks[i].trim(0,this.duration);return this},validate:function(){for(var valid=!0,i=0;i<this.tracks.length;i++)valid=valid&&this.tracks[i].validate();return valid},optimize:function(){for(var i=0;i<this.tracks.length;i++)this.tracks[i].optimize();return this}});var Cache={enabled:!1,files:{},add:function(key,file){!1!==this.enabled&&(this.files[key]=file)},get:function(key){if(!1!==this.enabled)return this.files[key]},remove:function(key){delete this.files[key]},clear:function(){this.files={}}};function LoadingManager(onLoad,onProgress,onError){var scope=this,isLoading=!1,itemsLoaded=0,itemsTotal=0,urlModifier=void 0;this.onStart=void 0,this.onLoad=onLoad,this.onProgress=onProgress,this.onError=onError,this.itemStart=function(url){itemsTotal++,!1===isLoading&&void 0!==scope.onStart&&scope.onStart(url,itemsLoaded,itemsTotal),isLoading=!0},this.itemEnd=function(url){itemsLoaded++,void 0!==scope.onProgress&&scope.onProgress(url,itemsLoaded,itemsTotal),itemsLoaded===itemsTotal&&(isLoading=!1,void 0!==scope.onLoad&&scope.onLoad())},this.itemError=function(url){void 0!==scope.onError&&scope.onError(url)},this.resolveURL=function(url){return urlModifier?urlModifier(url):url},this.setURLModifier=function(transform){return urlModifier=transform,this}}var DefaultLoadingManager=new LoadingManager,loading={};function FileLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}function AnimationLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}function CompressedTextureLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager,this._parser=null}function DataTextureLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager,this._parser=null}function ImageLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}function CubeTextureLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}function TextureLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}function Curve(){this.type="Curve",this.arcLengthDivisions=200}function EllipseCurve(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){Curve.call(this),this.type="EllipseCurve",this.aX=aX||0,this.aY=aY||0,this.xRadius=xRadius||1,this.yRadius=yRadius||1,this.aStartAngle=aStartAngle||0,this.aEndAngle=aEndAngle||2*Math.PI,this.aClockwise=aClockwise||!1,this.aRotation=aRotation||0}function ArcCurve(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){EllipseCurve.call(this,aX,aY,aRadius,aRadius,aStartAngle,aEndAngle,aClockwise),this.type="ArcCurve"}function CubicPoly(){var c0=0,c1=0,c2=0,c3=0;function init(x0,x1,t0,t1){c0=x0,c1=t0,c2=-3*x0+3*x1-2*t0-t1,c3=2*x0-2*x1+t0+t1}return{initCatmullRom:function(x0,x1,x2,x3,tension){init(x1,x2,tension*(x2-x0),tension*(x3-x1))},initNonuniformCatmullRom:function(x0,x1,x2,x3,dt0,dt1,dt2){var t1=(x1-x0)/dt0-(x2-x0)/(dt0+dt1)+(x2-x1)/dt1,t2=(x2-x1)/dt1-(x3-x1)/(dt1+dt2)+(x3-x2)/dt2;init(x1,x2,t1*=dt1,t2*=dt1)},calc:function(t){var t2=t*t,t3;return c0+c1*t+c2*t2+c3*(t2*t)}}}Object.assign(FileLoader.prototype,{load:function(url,onLoad,onProgress,onError){void 0===url&&(url=""),void 0!==this.path&&(url=this.path+url),url=this.manager.resolveURL(url);var scope=this,cached=Cache.get(url);if(void 0!==cached)return scope.manager.itemStart(url),setTimeout((function(){onLoad&&onLoad(cached),scope.manager.itemEnd(url)}),0),cached;if(void 0===loading[url]){var dataUriRegex=/^data:(.*?)(;base64)?,(.*)$/,dataUriRegexResult=url.match(dataUriRegex);if(dataUriRegexResult){var mimeType=dataUriRegexResult[1],isBase64=!!dataUriRegexResult[2],data=dataUriRegexResult[3];data=decodeURIComponent(data),isBase64&&(data=atob(data));try{var response,responseType=(this.responseType||"").toLowerCase();switch(responseType){case"arraybuffer":case"blob":for(var view=new Uint8Array(data.length),i=0;i<data.length;i++)view[i]=data.charCodeAt(i);response="blob"===responseType?new Blob([view.buffer],{type:mimeType}):view.buffer;break;case"document":var parser=new DOMParser;response=parser.parseFromString(data,mimeType);break;case"json":response=JSON.parse(data);break;default:response=data}setTimeout((function(){onLoad&&onLoad(response),scope.manager.itemEnd(url)}),0)}catch(error){setTimeout((function(){onError&&onError(error),scope.manager.itemError(url),scope.manager.itemEnd(url)}),0)}}else{loading[url]=[],loading[url].push({onLoad:onLoad,onProgress:onProgress,onError:onError});var request=new XMLHttpRequest;for(var header in request.open("GET",url,!0),request.addEventListener("load",(function(event){var response=this.response;Cache.add(url,response);var callbacks=loading[url];
vendor: 7,746 bytes, line 1
1if(delete loading[url],200===this.status||0===this.status){0===this.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");for(var i=0,il=callbacks.length;i<il;i++){var callback;(callback=callbacks[i]).onLoad&&callback.onLoad(response)}scope.manager.itemEnd(url)}else{for(var i=0,il=callbacks.length;i<il;i++){var callback;(callback=callbacks[i]).onError&&callback.onError(event)}scope.manager.itemError(url),scope.manager.itemEnd(url)}}),!1),request.addEventListener("progress",(function(event){for(var callbacks=loading[url],i=0,il=callbacks.length;i<il;i++){var callback=callbacks[i];callback.onProgress&&callback.onProgress(event)}}),!1),request.addEventListener("error",(function(event){var callbacks=loading[url];delete loading[url];for(var i=0,il=callbacks.length;i<il;i++){var callback=callbacks[i];callback.onError&&callback.onError(event)}scope.manager.itemError(url),scope.manager.itemEnd(url)}),!1),request.addEventListener("abort",(function(event){var callbacks=loading[url];delete loading[url];for(var i=0,il=callbacks.length;i<il;i++){var callback=callbacks[i];callback.onError&&callback.onError(event)}scope.manager.itemError(url),scope.manager.itemEnd(url)}),!1),void 0!==this.responseType&&(request.responseType=this.responseType),void 0!==this.withCredentials&&(request.withCredentials=this.withCredentials),request.overrideMimeType&&request.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain"),this.requestHeader)request.setRequestHeader(header,this.requestHeader[header]);request.send(null)}return scope.manager.itemStart(url),request}loading[url].push({onLoad:onLoad,onProgress:onProgress,onError:onError})},setPath:function(value){return this.path=value,this},setResponseType:function(value){return this.responseType=value,this},setWithCredentials:function(value){return this.withCredentials=value,this},setMimeType:function(value){return this.mimeType=value,this},setRequestHeader:function(value){return this.requestHeader=value,this}}),Object.assign(AnimationLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this,loader=new FileLoader(scope.manager);loader.setPath(scope.path),loader.load(url,(function(text){onLoad(scope.parse(JSON.parse(text)))}),onProgress,onError)},parse:function(json,onLoad){for(var animations=[],i=0;i<json.length;i++){var clip=AnimationClip.parse(json[i]);animations.push(clip)}onLoad(animations)},setPath:function(value){return this.path=value,this}}),Object.assign(CompressedTextureLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this,images=[],texture=new CompressedTexture;texture.image=images;var loader=new FileLoader(this.manager);function loadTexture(i){loader.load(url[i],(function(buffer){var texDatas=scope._parser(buffer,!0);images[i]={width:texDatas.width,height:texDatas.height,format:texDatas.format,mipmaps:texDatas.mipmaps},6===(loaded+=1)&&(1===texDatas.mipmapCount&&(texture.minFilter=1006),texture.format=texDatas.format,texture.needsUpdate=!0,onLoad&&onLoad(texture))}),onProgress,onError)}if(loader.setPath(this.path),loader.setResponseType("arraybuffer"),Array.isArray(url))for(var loaded=0,i=0,il=url.length;i<il;++i)loadTexture(i);else loader.load(url,(function(buffer){var texDatas=scope._parser(buffer,!0);if(texDatas.isCubemap)for(var faces=texDatas.mipmaps.length/texDatas.mipmapCount,f=0;f<faces;f++){images[f]={mipmaps:[]};for(var i=0;i<texDatas.mipmapCount;i++)images[f].mipmaps.push(texDatas.mipmaps[f*texDatas.mipmapCount+i]),images[f].format=texDatas.format,images[f].width=texDatas.width,images[f].height=texDatas.height}else texture.image.width=texDatas.width,texture.image.height=texDatas.height,texture.mipmaps=texDatas.mipmaps;1===texDatas.mipmapCount&&(texture.minFilter=1006),texture.format=texDatas.format,texture.needsUpdate=!0,onLoad&&onLoad(texture)}),onProgress,onError);return texture},setPath:function(value){return this.path=value,this}}),Object.assign(DataTextureLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this,texture=new DataTexture,loader=new FileLoader(this.manager);return loader.setResponseType("arraybuffer"),loader.setPath(this.path),loader.load(url,(function(buffer){var texData=scope._parser(buffer);texData&&(void 0!==texData.image?texture.image=texData.image:void 0!==texData.data&&(texture.image.width=texData.width,texture.image.height=texData.height,texture.image.data=texData.data),texture.wrapS=void 0!==texData.wrapS?texData.wrapS:1001,texture.wrapT=void 0!==texData.wrapT?texData.wrapT:1001,texture.magFilter=void 0!==texData.magFilter?texData.magFilter:1006,texture.minFilter=void 0!==texData.minFilter?texData.minFilter:1008,texture.anisotropy=void 0!==texData.anisotropy?texData.anisotropy:1,void 0!==texData.format&&(texture.format=texData.format),void 0!==texData.type&&(texture.type=texData.type),void 0!==texData.mipmaps&&(texture.mipmaps=texData.mipmaps),1===texData.mipmapCount&&(texture.minFilter=1006),texture.needsUpdate=!0,onLoad&&onLoad(texture,texData))}),onProgress,onError),texture},setPath:function(value){return this.path=value,this}}),Object.assign(ImageLoader.prototype,{crossOrigin:"anonymous",load:function(url,onLoad,onProgress,onError){void 0===url&&(url=""),void 0!==this.path&&(url=this.path+url),url=this.manager.resolveURL(url);var scope=this,cached=Cache.get(url);if(void 0!==cached)return scope.manager.itemStart(url),setTimeout((function(){onLoad&&onLoad(cached),scope.manager.itemEnd(url)}),0),cached;var image=document.createElementNS("http://www.w3.org/1999/xhtml","img");function onImageLoad(){image.removeEventListener("load",onImageLoad,!1),image.removeEventListener("error",onImageError,!1),Cache.add(url,this),onLoad&&onLoad(this),scope.manager.itemEnd(url)}function onImageError(event){image.removeEventListener("load",onImageLoad,!1),image.removeEventListener("error",onImageError,!1),onError&&onError(event),scope.manager.itemError(url),scope.manager.itemEnd(url)}return image.addEventListener("load",onImageLoad,!1),image.addEventListener("error",onImageError,!1),"data:"!==url.substr(0,5)&&void 0!==this.crossOrigin&&(image.crossOrigin=this.crossOrigin),scope.manager.itemStart(url),image.src=url,image},setCrossOrigin:function(value){return this.crossOrigin=value,this},setPath:function(value){return this.path=value,this}}),Object.assign(CubeTextureLoader.prototype,{crossOrigin:"anonymous",load:function(urls,onLoad,onProgress,onError){var texture=new CubeTexture,loader=new ImageLoader(this.manager);loader.setCrossOrigin(this.crossOrigin),loader.setPath(this.path);var loaded=0;function loadTexture(i){loader.load(urls[i],(function(image){texture.images[i]=image,6===++loaded&&(texture.needsUpdate=!0,onLoad&&onLoad(texture))}),void 0,onError)}for(var i=0;i<urls.length;++i)loadTexture(i);return texture},setCrossOrigin:function(value){return this.crossOrigin=value,this},setPath:function(value){return this.path=value,this}}),Object.assign(TextureLoader.prototype,{crossOrigin:"anonymous",load:function(url,onLoad,onProgress,onError){var texture=new Texture,loader=new ImageLoader(this.manager);return loader.setCrossOrigin(this.crossOrigin),loader.setPath(this.path),loader.load(url,(function(image){texture.image=image;var isJPEG=url.search(/\.jpe?g($|\?)/i)>0||0===url.search(/^data\:image\/jpeg/);texture.format=isJPEG?1022:1023,texture.needsUpdate=!0,void 0!==onLoad&&onLoad(texture)}),onProgress,onError),texture},setCrossOrigin:function(value){return this.crossOrigin=value,this},setPath:function(value){return this.path=value,this}}),Object.assign(Curve.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(u,optionalTarget){var t=this.getUtoTmapping(u);return this.getPoint(t,optionalTarget)}
vendor: 8,207 bytes, line 1
1,getPoints:function(divisions){void 0===divisions&&(divisions=5);for(var points=[],d=0;d<=divisions;d++)points.push(this.getPoint(d/divisions));return points},getSpacedPoints:function(divisions){void 0===divisions&&(divisions=5);for(var points=[],d=0;d<=divisions;d++)points.push(this.getPointAt(d/divisions));return points},getLength:function(){var lengths=this.getLengths();return lengths[lengths.length-1]},getLengths:function(divisions){if(void 0===divisions&&(divisions=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===divisions+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var cache=[],current,last=this.getPoint(0),p,sum=0;for(cache.push(0),p=1;p<=divisions;p++)sum+=(current=this.getPoint(p/divisions)).distanceTo(last),cache.push(sum),last=current;return this.cacheArcLengths=cache,cache},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(u,distance){var arcLengths=this.getLengths(),i=0,il=arcLengths.length,targetArcLength;targetArcLength=distance||u*arcLengths[il-1];for(var low=0,high=il-1,comparison;low<=high;)if((comparison=arcLengths[i=Math.floor(low+(high-low)/2)]-targetArcLength)<0)low=i+1;else{if(!(comparison>0)){high=i;break}high=i-1}if(arcLengths[i=high]===targetArcLength)return i/(il-1);var lengthBefore=arcLengths[i],lengthAfter,segmentLength,segmentFraction,t;return(i+(targetArcLength-lengthBefore)/(arcLengths[i+1]-lengthBefore))/(il-1)},getTangent:function(t){var delta=1e-4,t1=t-1e-4,t2=t+1e-4;t1<0&&(t1=0),t2>1&&(t2=1);var pt1=this.getPoint(t1),pt2,vec;return this.getPoint(t2).clone().sub(pt1).normalize()},getTangentAt:function(u){var t=this.getUtoTmapping(u);return this.getTangent(t)},computeFrenetFrames:function(segments,closed){var normal=new Vector3,tangents=[],normals=[],binormals=[],vec=new Vector3,mat=new Matrix4,i,u,theta;for(i=0;i<=segments;i++)u=i/segments,tangents[i]=this.getTangentAt(u),tangents[i].normalize();normals[0]=new Vector3,binormals[0]=new Vector3;var min=Number.MAX_VALUE,tx=Math.abs(tangents[0].x),ty=Math.abs(tangents[0].y),tz=Math.abs(tangents[0].z);for(tx<=min&&(min=tx,normal.set(1,0,0)),ty<=min&&(min=ty,normal.set(0,1,0)),tz<=min&&normal.set(0,0,1),vec.crossVectors(tangents[0],normal).normalize(),normals[0].crossVectors(tangents[0],vec),binormals[0].crossVectors(tangents[0],normals[0]),i=1;i<=segments;i++)normals[i]=normals[i-1].clone(),binormals[i]=binormals[i-1].clone(),vec.crossVectors(tangents[i-1],tangents[i]),vec.length()>Number.EPSILON&&(vec.normalize(),theta=Math.acos(_Math.clamp(tangents[i-1].dot(tangents[i]),-1,1)),normals[i].applyMatrix4(mat.makeRotationAxis(vec,theta))),binormals[i].crossVectors(tangents[i],normals[i]);if(!0===closed)for(theta=Math.acos(_Math.clamp(normals[0].dot(normals[segments]),-1,1)),theta/=segments,tangents[0].dot(vec.crossVectors(normals[0],normals[segments]))>0&&(theta=-theta),i=1;i<=segments;i++)normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i],theta*i)),binormals[i].crossVectors(tangents[i],normals[i]);return{tangents:tangents,normals:normals,binormals:binormals}},clone:function(){return(new this.constructor).copy(this)},copy:function(source){return this.arcLengthDivisions=source.arcLengthDivisions,this},toJSON:function(){var data={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return data.arcLengthDivisions=this.arcLengthDivisions,data.type=this.type,data},fromJSON:function(json){return this.arcLengthDivisions=json.arcLengthDivisions,this}}),EllipseCurve.prototype=Object.create(Curve.prototype),EllipseCurve.prototype.constructor=EllipseCurve,EllipseCurve.prototype.isEllipseCurve=!0,EllipseCurve.prototype.getPoint=function(t,optionalTarget){for(var point=optionalTarget||new Vector2,twoPi=2*Math.PI,deltaAngle=this.aEndAngle-this.aStartAngle,samePoints=Math.abs(deltaAngle)<Number.EPSILON;deltaAngle<0;)deltaAngle+=twoPi;for(;deltaAngle>twoPi;)deltaAngle-=twoPi;deltaAngle<Number.EPSILON&&(deltaAngle=samePoints?0:twoPi),!0!==this.aClockwise||samePoints||(deltaAngle===twoPi?deltaAngle=-twoPi:deltaAngle-=twoPi);var angle=this.aStartAngle+t*deltaAngle,x=this.aX+this.xRadius*Math.cos(angle),y=this.aY+this.yRadius*Math.sin(angle);if(0!==this.aRotation){var cos=Math.cos(this.aRotation),sin=Math.sin(this.aRotation),tx=x-this.aX,ty=y-this.aY;x=tx*cos-ty*sin+this.aX,y=tx*sin+ty*cos+this.aY}return point.set(x,y)},EllipseCurve.prototype.copy=function(source){return Curve.prototype.copy.call(this,source),this.aX=source.aX,this.aY=source.aY,this.xRadius=source.xRadius,this.yRadius=source.yRadius,this.aStartAngle=source.aStartAngle,this.aEndAngle=source.aEndAngle,this.aClockwise=source.aClockwise,this.aRotation=source.aRotation,this},EllipseCurve.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);return data.aX=this.aX,data.aY=this.aY,data.xRadius=this.xRadius,data.yRadius=this.yRadius,data.aStartAngle=this.aStartAngle,data.aEndAngle=this.aEndAngle,data.aClockwise=this.aClockwise,data.aRotation=this.aRotation,data},EllipseCurve.prototype.fromJSON=function(json){return Curve.prototype.fromJSON.call(this,json),this.aX=json.aX,this.aY=json.aY,this.xRadius=json.xRadius,this.yRadius=json.yRadius,this.aStartAngle=json.aStartAngle,this.aEndAngle=json.aEndAngle,this.aClockwise=json.aClockwise,this.aRotation=json.aRotation,this},ArcCurve.prototype=Object.create(EllipseCurve.prototype),ArcCurve.prototype.constructor=ArcCurve,ArcCurve.prototype.isArcCurve=!0;var tmp=new Vector3,px=new CubicPoly,py=new CubicPoly,pz=new CubicPoly;function CatmullRomCurve3(points,closed,curveType,tension){Curve.call(this),this.type="CatmullRomCurve3",this.points=points||[],this.closed=closed||!1,this.curveType=curveType||"centripetal",this.tension=tension||.5}function CatmullRom(t,p0,p1,p2,p3){var v0=.5*(p2-p0),v1=.5*(p3-p1),t2=t*t,t3;return(2*p1-2*p2+v0+v1)*(t*t2)+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1}function QuadraticBezierP0(t,p){var k=1-t;return k*k*p}function QuadraticBezierP1(t,p){return 2*(1-t)*t*p}function QuadraticBezierP2(t,p){return t*t*p}function QuadraticBezier(t,p0,p1,p2){return QuadraticBezierP0(t,p0)+QuadraticBezierP1(t,p1)+QuadraticBezierP2(t,p2)}function CubicBezierP0(t,p){var k=1-t;return k*k*k*p}function CubicBezierP1(t,p){var k=1-t;return 3*k*k*t*p}function CubicBezierP2(t,p){return 3*(1-t)*t*t*p}function CubicBezierP3(t,p){return t*t*t*p}function CubicBezier(t,p0,p1,p2,p3){return CubicBezierP0(t,p0)+CubicBezierP1(t,p1)+CubicBezierP2(t,p2)+CubicBezierP3(t,p3)}function CubicBezierCurve(v0,v1,v2,v3){Curve.call(this),this.type="CubicBezierCurve",this.v0=v0||new Vector2,this.v1=v1||new Vector2,this.v2=v2||new Vector2,this.v3=v3||new Vector2}function CubicBezierCurve3(v0,v1,v2,v3){Curve.call(this),this.type="CubicBezierCurve3",this.v0=v0||new Vector3,this.v1=v1||new Vector3,this.v2=v2||new Vector3,this.v3=v3||new Vector3}function LineCurve(v1,v2){Curve.call(this),this.type="LineCurve",this.v1=v1||new Vector2,this.v2=v2||new Vector2}function LineCurve3(v1,v2){Curve.call(this),this.type="LineCurve3",this.v1=v1||new Vector3,this.v2=v2||new Vector3}function QuadraticBezierCurve(v0,v1,v2){Curve.call(this),this.type="QuadraticBezierCurve",this.v0=v0||new Vector2,this.v1=v1||new Vector2,this.v2=v2||new Vector2}function QuadraticBezierCurve3(v0,v1,v2){Curve.call(this),this.type="QuadraticBezierCurve3",this.v0=v0||new Vector3,this.v1=v1||new Vector3,this.v2=v2||new Vector3}function SplineCurve(points){Curve.call(this),this.type="SplineCurve",this.points=points||[]}CatmullRomCurve3.prototype=Object.create(Curve.prototype),CatmullRomCurve3.prototype.constructor=CatmullRomCurve3,CatmullRomCurve3.prototype.isCatmullRomCurve3=!0,CatmullRomCurve3.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector3,points=this.points,l=points.length,p=(l-(this.closed?0:1))*t,intPoint=Math.floor(p),weight=p-intPoint,p0,p1,p2,p3;if(this.closed?intPoint+=intPoint>0?0:(Math.floor(Math.abs(intPoint)/l)+1)*l:0===weight&&intPoint===l-1&&(intPoint=l-2,weight=1),this.closed||intPoint>0?p0=points[(intPoint-1)%l]:(tmp.subVectors(points[0],points[1]).add(points[0]),p0=tmp),p1=points[intPoint%l],p2=points[(intPoint+1)%l],this.closed||intPoint+2<l?p3=points[(intPoint+2)%l]:(tmp.subVectors(points[l-1
vendor: 19,164 bytes, line 1
1],points[l-2]).add(points[l-1]),p3=tmp),"centripetal"===this.curveType||"chordal"===this.curveType){var pow="chordal"===this.curveType?.5:.25,dt0=Math.pow(p0.distanceToSquared(p1),pow),dt1=Math.pow(p1.distanceToSquared(p2),pow),dt2=Math.pow(p2.distanceToSquared(p3),pow);dt1<1e-4&&(dt1=1),dt0<1e-4&&(dt0=dt1),dt2<1e-4&&(dt2=dt1),px.initNonuniformCatmullRom(p0.x,p1.x,p2.x,p3.x,dt0,dt1,dt2),py.initNonuniformCatmullRom(p0.y,p1.y,p2.y,p3.y,dt0,dt1,dt2),pz.initNonuniformCatmullRom(p0.z,p1.z,p2.z,p3.z,dt0,dt1,dt2)}else"catmullrom"===this.curveType&&(px.initCatmullRom(p0.x,p1.x,p2.x,p3.x,this.tension),py.initCatmullRom(p0.y,p1.y,p2.y,p3.y,this.tension),pz.initCatmullRom(p0.z,p1.z,p2.z,p3.z,this.tension));return point.set(px.calc(weight),py.calc(weight),pz.calc(weight)),point},CatmullRomCurve3.prototype.copy=function(source){Curve.prototype.copy.call(this,source),this.points=[];for(var i=0,l=source.points.length;i<l;i++){var point=source.points[i];this.points.push(point.clone())}return this.closed=source.closed,this.curveType=source.curveType,this.tension=source.tension,this},CatmullRomCurve3.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);data.points=[];for(var i=0,l=this.points.length;i<l;i++){var point=this.points[i];data.points.push(point.toArray())}return data.closed=this.closed,data.curveType=this.curveType,data.tension=this.tension,data},CatmullRomCurve3.prototype.fromJSON=function(json){Curve.prototype.fromJSON.call(this,json),this.points=[];for(var i=0,l=json.points.length;i<l;i++){var point=json.points[i];this.points.push((new Vector3).fromArray(point))}return this.closed=json.closed,this.curveType=json.curveType,this.tension=json.tension,this},CubicBezierCurve.prototype=Object.create(Curve.prototype),CubicBezierCurve.prototype.constructor=CubicBezierCurve,CubicBezierCurve.prototype.isCubicBezierCurve=!0,CubicBezierCurve.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector2,v0=this.v0,v1=this.v1,v2=this.v2,v3=this.v3;return point.set(CubicBezier(t,v0.x,v1.x,v2.x,v3.x),CubicBezier(t,v0.y,v1.y,v2.y,v3.y)),point},CubicBezierCurve.prototype.copy=function(source){return Curve.prototype.copy.call(this,source),this.v0.copy(source.v0),this.v1.copy(source.v1),this.v2.copy(source.v2),this.v3.copy(source.v3),this},CubicBezierCurve.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);return data.v0=this.v0.toArray(),data.v1=this.v1.toArray(),data.v2=this.v2.toArray(),data.v3=this.v3.toArray(),data},CubicBezierCurve.prototype.fromJSON=function(json){return Curve.prototype.fromJSON.call(this,json),this.v0.fromArray(json.v0),this.v1.fromArray(json.v1),this.v2.fromArray(json.v2),this.v3.fromArray(json.v3),this},CubicBezierCurve3.prototype=Object.create(Curve.prototype),CubicBezierCurve3.prototype.constructor=CubicBezierCurve3,CubicBezierCurve3.prototype.isCubicBezierCurve3=!0,CubicBezierCurve3.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector3,v0=this.v0,v1=this.v1,v2=this.v2,v3=this.v3;return point.set(CubicBezier(t,v0.x,v1.x,v2.x,v3.x),CubicBezier(t,v0.y,v1.y,v2.y,v3.y),CubicBezier(t,v0.z,v1.z,v2.z,v3.z)),point},CubicBezierCurve3.prototype.copy=function(source){return Curve.prototype.copy.call(this,source),this.v0.copy(source.v0),this.v1.copy(source.v1),this.v2.copy(source.v2),this.v3.copy(source.v3),this},CubicBezierCurve3.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);return data.v0=this.v0.toArray(),data.v1=this.v1.toArray(),data.v2=this.v2.toArray(),data.v3=this.v3.toArray(),data},CubicBezierCurve3.prototype.fromJSON=function(json){return Curve.prototype.fromJSON.call(this,json),this.v0.fromArray(json.v0),this.v1.fromArray(json.v1),this.v2.fromArray(json.v2),this.v3.fromArray(json.v3),this},LineCurve.prototype=Object.create(Curve.prototype),LineCurve.prototype.constructor=LineCurve,LineCurve.prototype.isLineCurve=!0,LineCurve.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector2;return 1===t?point.copy(this.v2):(point.copy(this.v2).sub(this.v1),point.multiplyScalar(t).add(this.v1)),point},LineCurve.prototype.getPointAt=function(u,optionalTarget){return this.getPoint(u,optionalTarget)},LineCurve.prototype.getTangent=function(){var tangent;return this.v2.clone().sub(this.v1).normalize()},LineCurve.prototype.copy=function(source){return Curve.prototype.copy.call(this,source),this.v1.copy(source.v1),this.v2.copy(source.v2),this},LineCurve.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);return data.v1=this.v1.toArray(),data.v2=this.v2.toArray(),data},LineCurve.prototype.fromJSON=function(json){return Curve.prototype.fromJSON.call(this,json),this.v1.fromArray(json.v1),this.v2.fromArray(json.v2),this},LineCurve3.prototype=Object.create(Curve.prototype),LineCurve3.prototype.constructor=LineCurve3,LineCurve3.prototype.isLineCurve3=!0,LineCurve3.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector3;return 1===t?point.copy(this.v2):(point.copy(this.v2).sub(this.v1),point.multiplyScalar(t).add(this.v1)),point},LineCurve3.prototype.getPointAt=function(u,optionalTarget){return this.getPoint(u,optionalTarget)},LineCurve3.prototype.copy=function(source){return Curve.prototype.copy.call(this,source),this.v1.copy(source.v1),this.v2.copy(source.v2),this},LineCurve3.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);return data.v1=this.v1.toArray(),data.v2=this.v2.toArray(),data},LineCurve3.prototype.fromJSON=function(json){return Curve.prototype.fromJSON.call(this,json),this.v1.fromArray(json.v1),this.v2.fromArray(json.v2),this},QuadraticBezierCurve.prototype=Object.create(Curve.prototype),QuadraticBezierCurve.prototype.constructor=QuadraticBezierCurve,QuadraticBezierCurve.prototype.isQuadraticBezierCurve=!0,QuadraticBezierCurve.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector2,v0=this.v0,v1=this.v1,v2=this.v2;return point.set(QuadraticBezier(t,v0.x,v1.x,v2.x),QuadraticBezier(t,v0.y,v1.y,v2.y)),point},QuadraticBezierCurve.prototype.copy=function(source){return Curve.prototype.copy.call(this,source),this.v0.copy(source.v0),this.v1.copy(source.v1),this.v2.copy(source.v2),this},QuadraticBezierCurve.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);return data.v0=this.v0.toArray(),data.v1=this.v1.toArray(),data.v2=this.v2.toArray(),data},QuadraticBezierCurve.prototype.fromJSON=function(json){return Curve.prototype.fromJSON.call(this,json),this.v0.fromArray(json.v0),this.v1.fromArray(json.v1),this.v2.fromArray(json.v2),this},QuadraticBezierCurve3.prototype=Object.create(Curve.prototype),QuadraticBezierCurve3.prototype.constructor=QuadraticBezierCurve3,QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3=!0,QuadraticBezierCurve3.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector3,v0=this.v0,v1=this.v1,v2=this.v2;return point.set(QuadraticBezier(t,v0.x,v1.x,v2.x),QuadraticBezier(t,v0.y,v1.y,v2.y),QuadraticBezier(t,v0.z,v1.z,v2.z)),point},QuadraticBezierCurve3.prototype.copy=function(source){return Curve.prototype.copy.call(this,source),this.v0.copy(source.v0),this.v1.copy(source.v1),this.v2.copy(source.v2),this},QuadraticBezierCurve3.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);return data.v0=this.v0.toArray(),data.v1=this.v1.toArray(),data.v2=this.v2.toArray(),data},QuadraticBezierCurve3.prototype.fromJSON=function(json){return Curve.prototype.fromJSON.call(this,json),this.v0.fromArray(json.v0),this.v1.fromArray(json.v1),this.v2.fromArray(json.v2),this},SplineCurve.prototype=Object.create(Curve.prototype),SplineCurve.prototype.constructor=SplineCurve,SplineCurve.prototype.isSplineCurve=!0,SplineCurve.prototype.getPoint=function(t,optionalTarget){var point=optionalTarget||new Vector2,points=this.points,p=(points.length-1)*t,intPoint=Math.floor(p),weight=p-intPoint,p0=points[0===intPoint?intPoint:intPoint-1],p1=points[intPoint],p2=points[intPoint>points.length-2?points.length-1:intPoint+1],p3=points[intPoint>points.length-3?points.length-1:intPoint+2];return point.set(CatmullRom(weight,p0.x,p1.x,p2.x,p3.x),CatmullRom(weight,p0.y,p1.y,p2.y,p3.y)),point},SplineCurve.prototype.copy=function(source){Curve.prototype.copy.call(this,source),this.points=[];for(var i=0,l=source.points.length;i<l;i++){var point=source.points[i];this.points.push(point.clone())}return this},SplineCurve.prototype.toJSON=function(){var data=Curve.prototype.toJSON.call(this);data.points=[];for(var i=0,l=this.points.length;i<l;i++){var point=this.points[i];data.points.push(point.toArray())}return data},SplineCurve.prototype.fromJSON=function(json){Curve.prototype.fromJSON.call(this,json),this.points=[];for(var i=0,l=json.points.length;i<l;i++){var point=json.points[i];this.points.push((new Vector2).fromArray(point))}return this};var Curves=Object.freeze({ArcCurve:ArcCurve,CatmullRomCurve3:CatmullRomCurve3,CubicBezierCurve:CubicBezierCurve,CubicBezierCurve3:CubicBezierCurve3,EllipseCurve:EllipseCurve,LineCurve:LineCurve,LineCurve3:LineCurve3,QuadraticBezierCurve:QuadraticBezierCurve,QuadraticBezierCurve3:QuadraticBezierCurve3,SplineCurve:SplineCurve});function CurvePath(){Curve.call(this),this.type="CurvePath",this.curves=[],this.autoClose=!1}function Path(points){CurvePath.call(this),this.type="Path",this.currentPoint=new Vector2,points&&this.setFromPoints(points)}function Shape(points){Path.call(this,points),this.uuid=_Math.generateUUID(),this.type="Shape",this.holes=[]}function Light(color,intensity){Object3D.call(this),this.type="Light",this.color=new Color(color),this.intensity=void 0!==intensity?intensity:1,this.receiveShadow=void 0}function HemisphereLight(skyColor,groundColor,intensity){Light.call(this,skyColor,intensity),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(Object3D.DefaultUp),this.updateMatrix(),this.groundColor=new Color(groundColor)}function LightShadow(camera){this.camera=camera,this.bias=0,this.radius=1,this.mapSize=new Vector2(512,512),this.map=null,this.matrix=new Matrix4}function SpotLightShadow(){LightShadow.call(this,new PerspectiveCamera(50,1,.5,500))}function SpotLight(color,intensity,distance,angle,penumbra,decay){Light.call(this,color,intensity),this.type="SpotLight",this.position.copy(Object3D.DefaultUp),this.updateMatrix(),this.target=new Object3D,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(power){this.intensity=power/Math.PI}}),this.distance=void 0!==distance?distance:0,this.angle=void 0!==angle?angle:Math.PI/3,this.penumbra=void 0!==penumbra?penumbra:0,this.decay=void 0!==decay?decay:1,this.shadow=new SpotLightShadow}function PointLight(color,intensity,distance,decay){Light.call(this,color,intensity),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(power){this.intensity=power/(4*Math.PI)}}),this.distance=void 0!==distance?distance:0,this.decay=void 0!==decay?decay:1,this.shadow=new LightShadow(new PerspectiveCamera(90,1,.5,500))}function OrthographicCamera(left,right,top,bottom,near,far){Camera.call(this),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=void 0!==left?left:-1,this.right=void 0!==right?right:1,this.top=void 0!==top?top:1,this.bottom=void 0!==bottom?bottom:-1,this.near=void 0!==near?near:.1,this.far=void 0!==far?far:2e3,this.updateProjectionMatrix()}function DirectionalLightShadow(){LightShadow.call(this,new OrthographicCamera(-5,5,5,-5,.5,500))}function DirectionalLight(color,intensity){Light.call(this,color,intensity),this.type="DirectionalLight",this.position.copy(Object3D.DefaultUp),this.updateMatrix(),this.target=new Object3D,this.shadow=new DirectionalLightShadow}function AmbientLight(color,intensity){Light.call(this,color,intensity),this.type="AmbientLight",this.castShadow=void 0}function RectAreaLight(color,intensity,width,height){Light.call(this,color,intensity),this.type="RectAreaLight",this.width=void 0!==width?width:10,this.height=void 0!==height?height:10}function MaterialLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager,this.textures={}}CurvePath.prototype=Object.assign(Object.create(Curve.prototype),{constructor:CurvePath,add:function(curve){this.curves.push(curve)},closePath:function(){var startPoint=this.curves[0].getPoint(0),endPoint=this.curves[this.curves.length-1].getPoint(1);startPoint.equals(endPoint)||this.curves.push(new LineCurve(endPoint,startPoint))},getPoint:function(t){for(var d=t*this.getLength(),curveLengths=this.getCurveLengths(),i=0;i<curveLengths.length;){if(curveLengths[i]>=d){var diff=curveLengths[i]-d,curve=this.curves[i],segmentLength=curve.getLength(),u=0===segmentLength?0:1-diff/segmentLength;return curve.getPointAt(u)}i++}return null},getLength:function(){var lens=this.getCurveLengths();return lens[lens.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var lengths=[],sums=0,i=0,l=this.curves.length;i<l;i++)sums+=this.curves[i].getLength(),lengths.push(sums);return this.cacheLengths=lengths,lengths},getSpacedPoints:function(divisions){void 0===divisions&&(divisions=40);for(var points=[],i=0;i<=divisions;i++)points.push(this.getPoint(i/divisions));return this.autoClose&&points.push(points[0]),points},getPoints:function(divisions){divisions=divisions||12;for(var points=[],last,i=0,curves=this.curves;i<curves.length;i++)for(var curve=curves[i],resolution=curve&&curve.isEllipseCurve?2*divisions:curve&&(curve.isLineCurve||curve.isLineCurve3)?1:curve&&curve.isSplineCurve?divisions*curve.points.length:divisions,pts=curve.getPoints(resolution),j=0;j<pts.length;j++){var point=pts[j];last&&last.equals(point)||(points.push(point),last=point)}return this.autoClose&&points.length>1&&!points[points.length-1].equals(points[0])&&points.push(points[0]),points},copy:function(source){Curve.prototype.copy.call(this,source),this.curves=[];for(var i=0,l=source.curves.length;i<l;i++){var curve=source.curves[i];this.curves.push(curve.clone())}return this.autoClose=source.autoClose,this},toJSON:function(){var data=Curve.prototype.toJSON.call(this);data.autoClose=this.autoClose,data.curves=[];for(var i=0,l=this.curves.length;i<l;i++){var curve=this.curves[i];data.curves.push(curve.toJSON())}return data},fromJSON:function(json){Curve.prototype.fromJSON.call(this,json),this.autoClose=json.autoClose,this.curves=[];for(var i=0,l=json.curves.length;i<l;i++){var curve=json.curves[i];this.curves.push((new Curves[curve.type]).fromJSON(curve))}return this}}),Path.prototype=Object.assign(Object.create(CurvePath.prototype),{constructor:Path,setFromPoints:function(points){this.moveTo(points[0].x,points[0].y);for(var i=1,l=points.length;i<l;i++)this.lineTo(points[i].x,points[i].y)},moveTo:function(x,y){this.currentPoint.set(x,y)},lineTo:function(x,y){var curve=new LineCurve(this.currentPoint.clone(),new Vector2(x,y));this.curves.push(curve),this.currentPoint.set(x,y)},quadraticCurveTo:function(aCPx,aCPy,aX,aY){var curve=new QuadraticBezierCurve(this.currentPoint.clone(),new Vector2(aCPx,aCPy),new Vector2(aX,aY));this.curves.push(curve),this.currentPoint.set(aX,aY)},bezierCurveTo:function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){var curve=new CubicBezierCurve(this.currentPoint.clone(),new Vector2(aCP1x,aCP1y),new Vector2(aCP2x,aCP2y),new Vector2(aX,aY));this.curves.push(curve),this.currentPoint.set(aX,aY)},splineThru:function(pts){var npts,curve=new SplineCurve([this.currentPoint.clone()].concat(pts));this.curves.push(curve),this.currentPoint.copy(pts[pts.length-1])},arc:function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){var x0=this.currentPoint.x,y0=this.currentPoint.y;this.absarc(aX+x0,aY+y0,aRadius,aStartAngle,aEndAngle,aClockwise)},absarc:function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){this.absellipse(aX,aY,aRadius,aRadius,aStartAngle,aEndAngle,aClockwise)},ellipse:function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){var x0=this.currentPoint.x,y0=this.currentPoint.y;this.absellipse(aX+x0,aY+y0,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation)},absellipse:function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){var curve=new EllipseCurve(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation);if(this.curves.length>0){var firstPoint=curve.getPoint(0);firstPoint.equals(this.currentPoint)||this.lineTo(firstPoint.x,firstPoint.y)}this.curves.push(curve);var lastPoint=curve.getPoint(1);this.currentPoint.copy(lastPoint)},copy:function(source){return CurvePath.prototype.copy.call(this,source),this.currentPoint.copy(source.currentPoint),this},toJSON:function(){var data=CurvePath.prototype.toJSON.call(this);return data.currentPoint=this.currentPoint.toArray(),data},fromJSON:function(json){return CurvePath.prototype.fromJSON.call(this,json),this.currentPoint.fromArray(json.currentPoint),this}}),Shape.prototype=Object.assign(Object.create(Path.prototype),{constructor:Shape,getPointsHoles:function(divisions){for(var holesPts=[],i=0,l=this.holes.length;i<l;i++)holesPts[i]=this.holes[i].getPoints(divisions);return holesPts},extractPoints:function(divisions){return{shape:this.getPoints(divisions),holes:this.getPointsHoles(divisions)}},copy:function(source){Path.prototype.copy.call(this,source),this.holes=[];for(var i=0,l=source.holes.length;i<l;i++){var hole=source.holes[i];this.holes.push(hole.clone())}return this},toJSON:function(){var data=Path.prototype.toJSON.call(this);data.uuid=this.uuid,data.holes=[];for(var i=0,l=this.holes.length;i<l;i++){var hole=this.holes[i];data.holes.push(hole.toJSON())}return data},fromJSON:function(json){Path.prototype.fromJSON.call(this,json),this.uuid=json.uuid,this.holes=[];for(var i=0,l=json.holes.length;i<l;i++){var hole=json.holes[i];this.holes.push((new Path).fromJSON(hole))}return this}}),Light.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Light,isLight:!0,copy:function(source){return Object3D.prototype.copy.call(this,source),this.color.copy(source.color),this.intensity=source.intensity,this},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);return data.object.color=this.color.getHex(),data.object.intensity=this.intensity,void 0!==this.groundColor&&(data.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(data.object.distance=this.distance),void 0!==this.angle&&(data.object.angle=this.angle),void 0!==this.decay&&(data.object.decay=this.decay),void 0!==this.penumbra&&(data.object.penumbra=this.penumbra),void 0!==this.shadow&&(data.object.shadow=this.shadow.toJSON()),data}}),HemisphereLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:HemisphereLight,isHemisphereLight:!0,copy:function(source){return Light.prototype.copy.call(this,source),this.groundColor.copy(source.groundColor),this}}),Object.assign(LightShadow.prototype,{copy:function(source){return this.camera=source.camera.clone(),this.bias=source.bias,this.radius=source.radiu
vendor: 6,563 bytes, line 1
1s,this.mapSize.copy(source.mapSize),this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var object={};return 0!==this.bias&&(object.bias=this.bias),1!==this.radius&&(object.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(object.mapSize=this.mapSize.toArray()),object.camera=this.camera.toJSON(!1).object,delete object.camera.matrix,object}}),SpotLightShadow.prototype=Object.assign(Object.create(LightShadow.prototype),{constructor:SpotLightShadow,isSpotLightShadow:!0,update:function(light){var camera=this.camera,fov=2*_Math.RAD2DEG*light.angle,aspect=this.mapSize.width/this.mapSize.height,far=light.distance||camera.far;fov===camera.fov&&aspect===camera.aspect&&far===camera.far||(camera.fov=fov,camera.aspect=aspect,camera.far=far,camera.updateProjectionMatrix())}}),SpotLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:SpotLight,isSpotLight:!0,copy:function(source){return Light.prototype.copy.call(this,source),this.distance=source.distance,this.angle=source.angle,this.penumbra=source.penumbra,this.decay=source.decay,this.target=source.target.clone(),this.shadow=source.shadow.clone(),this}}),PointLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:PointLight,isPointLight:!0,copy:function(source){return Light.prototype.copy.call(this,source),this.distance=source.distance,this.decay=source.decay,this.shadow=source.shadow.clone(),this}}),OrthographicCamera.prototype=Object.assign(Object.create(Camera.prototype),{constructor:OrthographicCamera,isOrthographicCamera:!0,copy:function(source,recursive){return Camera.prototype.copy.call(this,source,recursive),this.left=source.left,this.right=source.right,this.top=source.top,this.bottom=source.bottom,this.near=source.near,this.far=source.far,this.zoom=source.zoom,this.view=null===source.view?null:Object.assign({},source.view),this},setViewOffset:function(fullWidth,fullHeight,x,y,width,height){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=fullWidth,this.view.fullHeight=fullHeight,this.view.offsetX=x,this.view.offsetY=y,this.view.width=width,this.view.height=height,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var dx=(this.right-this.left)/(2*this.zoom),dy=(this.top-this.bottom)/(2*this.zoom),cx=(this.right+this.left)/2,cy=(this.top+this.bottom)/2,left=cx-dx,right=cx+dx,top=cy+dy,bottom=cy-dy;if(null!==this.view&&this.view.enabled){var zoomW=this.zoom/(this.view.width/this.view.fullWidth),zoomH=this.zoom/(this.view.height/this.view.fullHeight),scaleW=(this.right-this.left)/this.view.width,scaleH=(this.top-this.bottom)/this.view.height;right=(left+=scaleW*(this.view.offsetX/zoomW))+scaleW*(this.view.width/zoomW),bottom=(top-=scaleH*(this.view.offsetY/zoomH))-scaleH*(this.view.height/zoomH)}this.projectionMatrix.makeOrthographic(left,right,top,bottom,this.near,this.far),this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);return data.object.zoom=this.zoom,data.object.left=this.left,data.object.right=this.right,data.object.top=this.top,data.object.bottom=this.bottom,data.object.near=this.near,data.object.far=this.far,null!==this.view&&(data.object.view=Object.assign({},this.view)),data}}),DirectionalLightShadow.prototype=Object.assign(Object.create(LightShadow.prototype),{constructor:DirectionalLightShadow}),DirectionalLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:DirectionalLight,isDirectionalLight:!0,copy:function(source){return Light.prototype.copy.call(this,source),this.target=source.target.clone(),this.shadow=source.shadow.clone(),this}}),AmbientLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:AmbientLight,isAmbientLight:!0}),RectAreaLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:RectAreaLight,isRectAreaLight:!0,copy:function(source){return Light.prototype.copy.call(this,source),this.width=source.width,this.height=source.height,this},toJSON:function(meta){var data=Light.prototype.toJSON.call(this,meta);return data.object.width=this.width,data.object.height=this.height,data}}),Object.assign(MaterialLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this,loader=new FileLoader(scope.manager);loader.setPath(scope.path),loader.load(url,(function(text){onLoad(scope.parse(JSON.parse(text)))}),onProgress,onError)},parse:function(json){var textures=this.textures;function getTexture(name){return void 0===textures[name]&&console.warn("THREE.MaterialLoader: Undefined texture",name),textures[name]}var material=new Materials[json.type];if(void 0!==json.uuid&&(material.uuid=json.uuid),void 0!==json.name&&(material.name=json.name),void 0!==json.color&&material.color.setHex(json.color),void 0!==json.roughness&&(material.roughness=json.roughness),void 0!==json.metalness&&(material.metalness=json.metalness),void 0!==json.emissive&&material.emissive.setHex(json.emissive),void 0!==json.specular&&material.specular.setHex(json.specular),void 0!==json.shininess&&(material.shininess=json.shininess),void 0!==json.clearCoat&&(material.clearCoat=json.clearCoat),void 0!==json.clearCoatRoughness&&(material.clearCoatRoughness=json.clearCoatRoughness),void 0!==json.vertexColors&&(material.vertexColors=json.vertexColors),void 0!==json.fog&&(material.fog=json.fog),void 0!==json.flatShading&&(material.flatShading=json.flatShading),void 0!==json.blending&&(material.blending=json.blending),void 0!==json.combine&&(material.combine=json.combine),void 0!==json.side&&(material.side=json.side),void 0!==json.opacity&&(material.opacity=json.opacity),void 0!==json.transparent&&(material.transparent=json.transparent),void 0!==json.alphaTest&&(material.alphaTest=json.alphaTest),void 0!==json.depthTest&&(material.depthTest=json.depthTest),void 0!==json.depthWrite&&(material.depthWrite=json.depthWrite),void 0!==json.colorWrite&&(material.colorWrite=json.colorWrite),void 0!==json.wireframe&&(material.wireframe=json.wireframe),void 0!==json.wireframeLinewidth&&(material.wireframeLinewidth=json.wireframeLinewidth),void 0!==json.wireframeLinecap&&(material.wireframeLinecap=json.wireframeLinecap),void 0!==json.wireframeLinejoin&&(material.wireframeLinejoin=json.wireframeLinejoin),void 0!==json.rotation&&(material.rotation=json.rotation),1!==json.linewidth&&(material.line
vendor: 1,272 bytes, line 1
1width=json.linewidth),void 0!==json.dashSize&&(material.dashSize=json.dashSize),void 0!==json.gapSize&&(material.gapSize=json.gapSize),void 0!==json.scale&&(material.scale=json.scale),void 0!==json.polygonOffset&&(material.polygonOffset=json.polygonOffset),void 0!==json.polygonOffsetFactor&&(material.polygonOffsetFactor=json.polygonOffsetFactor),void 0!==json.polygonOffsetUnits&&(material.polygonOffsetUnits=json.polygonOffsetUnits),void 0!==json.skinning&&(material.skinning=json.skinning),void 0!==json.morphTargets&&(material.morphTargets=json.morphTargets),void 0!==json.dithering&&(material.dithering=json.dithering),void 0!==json.visible&&(material.visible=json.visible),void 0!==json.userData&&(material.userData=json.userData),void 0!==json.uniforms)for(var name in json.uniforms){var uniform=json.uniforms[name];switch(material.uniforms[name]={},uniform.type){case"t":material.uniforms[name].value=getTexture(uniform.value);break;case"c":material.uniforms[name].value=(new Color).setHex(uniform.value);break;case"v2":material.uniforms[name].value=(new Vector2).fromArray(uniform.value);break;case"v3":material.uniforms[name].value=(new Vector3).fromArray(uniform.value);break;case"v4":material.uniforms[name].value=(new Vector4).fromArray(uniform.value);break;
vendor: 6,939 bytes, line 1
1case"m4":material.uniforms[name].value=(new Matrix4).fromArray(uniform.value);break;default:material.uniforms[name].value=uniform.value}}if(void 0!==json.defines&&(material.defines=json.defines),void 0!==json.vertexShader&&(material.vertexShader=json.vertexShader),void 0!==json.fragmentShader&&(material.fragmentShader=json.fragmentShader),void 0!==json.extensions)for(var key in json.extensions)material.extensions[key]=json.extensions[key];if(void 0!==json.shading&&(material.flatShading=1===json.shading),void 0!==json.size&&(material.size=json.size),void 0!==json.sizeAttenuation&&(material.sizeAttenuation=json.sizeAttenuation),void 0!==json.map&&(material.map=getTexture(json.map)),void 0!==json.alphaMap&&(material.alphaMap=getTexture(json.alphaMap),material.transparent=!0),void 0!==json.bumpMap&&(material.bumpMap=getTexture(json.bumpMap)),void 0!==json.bumpScale&&(material.bumpScale=json.bumpScale),void 0!==json.normalMap&&(material.normalMap=getTexture(json.normalMap)),void 0!==json.normalMapType&&(material.normalMapType=json.normalMapType),void 0!==json.normalScale){var normalScale=json.normalScale;!1===Array.isArray(normalScale)&&(normalScale=[normalScale,normalScale]),material.normalScale=(new Vector2).fromArray(normalScale)}return void 0!==json.displacementMap&&(material.displacementMap=getTexture(json.displacementMap)),void 0!==json.displacementScale&&(material.displacementScale=json.displacementScale),void 0!==json.displacementBias&&(material.displacementBias=json.displacementBias),void 0!==json.roughnessMap&&(material.roughnessMap=getTexture(json.roughnessMap)),void 0!==json.metalnessMap&&(material.metalnessMap=getTexture(json.metalnessMap)),void 0!==json.emissiveMap&&(material.emissiveMap=getTexture(json.emissiveMap)),void 0!==json.emissiveIntensity&&(material.emissiveIntensity=json.emissiveIntensity),void 0!==json.specularMap&&(material.specularMap=getTexture(json.specularMap)),void 0!==json.envMap&&(material.envMap=getTexture(json.envMap)),void 0!==json.envMapIntensity&&(material.envMapIntensity=json.envMapIntensity),void 0!==json.reflectivity&&(material.reflectivity=json.reflectivity),void 0!==json.lightMap&&(material.lightMap=getTexture(json.lightMap)),void 0!==json.lightMapIntensity&&(material.lightMapIntensity=json.lightMapIntensity),void 0!==json.aoMap&&(material.aoMap=getTexture(json.aoMap)),void 0!==json.aoMapIntensity&&(material.aoMapIntensity=json.aoMapIntensity),void 0!==json.gradientMap&&(material.gradientMap=getTexture(json.gradientMap)),material},setPath:function(value){return this.path=value,this},setTextures:function(value){return this.textures=value,this}});var LoaderUtils={decodeText:function(array){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(array);for(var s="",i=0,il=array.length;i<il;i++)s+=String.fromCharCode(array[i]);return decodeURIComponent(escape(s))},extractUrlBase:function(url){var index=url.lastIndexOf("/");return-1===index?"./":url.substr(0,index+1)}};function BufferGeometryLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}Object.assign(BufferGeometryLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this,loader=new FileLoader(scope.manager);loader.setPath(scope.path),loader.load(url,(function(text){onLoad(scope.parse(JSON.parse(text)))}),onProgress,onError)},parse:function(json){var geometry=new BufferGeometry,index=json.data.index;if(void 0!==index){var typedArray=new TYPED_ARRAYS[index.type](index.array);geometry.setIndex(new BufferAttribute(typedArray,1))}var attributes=json.data.attributes;for(var key in attributes){var attribute=attributes[key],typedArray=new TYPED_ARRAYS[attribute.type](attribute.array);geometry.addAttribute(key,new BufferAttribute(typedArray,attribute.itemSize,attribute.normalized))}var groups=json.data.groups||json.data.drawcalls||json.data.offsets;if(void 0!==groups)for(var i=0,n=groups.length;i!==n;++i){var group=groups[i];geometry.addGroup(group.start,group.count,group.materialIndex)}var boundingSphere=json.data.boundingSphere;if(void 0!==boundingSphere){var center=new Vector3;void 0!==boundingSphere.center&¢er.fromArray(boundingSphere.center),geometry.boundingSphere=new Sphere(center,boundingSphere.radius)}return json.name&&(geometry.name=json.name),json.userData&&(geometry.userData=json.userData),geometry},setPath:function(value){return this.path=value,this}});var TYPED_ARRAYS={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!=typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function ObjectLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager,this.resourcePath=""}Object.assign(ObjectLoader.prototype,{crossOrigin:"anonymous",load:function(url,onLoad,onProgress,onError){var scope=this,path=void 0===this.path?LoaderUtils.extractUrlBase(url):this.path;this.resourcePath=this.resourcePath||path;var loader=new FileLoader(scope.manager);loader.setPath(this.path),loader.load(url,(function(text){var json=null;try{json=JSON.parse(text)}catch(error){return void 0!==onError&&onError(error),void console.error("THREE:ObjectLoader: Can't parse "+url+".",error.message)}var metadata=json.metadata;void 0!==metadata&&void 0!==metadata.type&&"geometry"!==metadata.type.toLowerCase()?scope.parse(json,onLoad):console.error("THREE.ObjectLoader: Can't load "+url)}),onProgress,onError)},setPath:function(value){return this.path=value,this},setResourcePath:function(value){return this.resourcePath=value,this},setCrossOrigin:function(value){return this.crossOrigin=value,this},parse:function(json,onLoad){var shapes=this.parseShape(json.shapes),geometries=this.parseGeometries(json.geometries,shapes),images=this.parseImages(json.images,(function(){void 0!==onLoad&&onLoad(object)})),textures=this.parseTextures(json.textures,images),materials=this.parseMaterials(json.materials,textures),object=this.parseObject(json.object,geometries,materials);return json.animations&&(object.animations=this.parseAnimations(json.animations)),void 0!==json.images&&0!==json.images.length||void 0!==onLoad&&onLoad(object),object},parseShape:function(json){var shapes={};if(void 0!==json)for(var i=0,l=json.length;i<l;i++){var shape=(new Shape).fromJSON(json[i]);shapes[shape.uuid]=shape}return shapes},parseGeometries:function(json,shapes){var geometries={};if(void 0!==json)for(var bufferGeometryLoader=new BufferGeometryLoader,i=0,l=json.length;i<l;i++){var geometry,data=json[i];switch(data.type){case"PlaneGeometry":case"PlaneBufferGeometry":geometry=new Geometries[data.type](data.width,data.height,data.widthSegments,data.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":geometry=new Geometries[data.type](data.width,data.height,data.depth,data.widthSegments,data.heightSegments,data.depthSegments);break;
vendor: 19,303 bytes, line 1
1case"CircleGeometry":case"CircleBufferGeometry":geometry=new Geometries[data.type](data.radius,data.segments,data.thetaStart,data.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":geometry=new Geometries[data.type](data.radiusTop,data.radiusBottom,data.height,data.radialSegments,data.heightSegments,data.openEnded,data.thetaStart,data.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":geometry=new Geometries[data.type](data.radius,data.height,data.radialSegments,data.heightSegments,data.openEnded,data.thetaStart,data.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":geometry=new Geometries[data.type](data.radius,data.widthSegments,data.heightSegments,data.phiStart,data.phiLength,data.thetaStart,data.thetaLength);break;case"DodecahedronGeometry":case"DodecahedronBufferGeometry":case"IcosahedronGeometry":case"IcosahedronBufferGeometry":case"OctahedronGeometry":case"OctahedronBufferGeometry":case"TetrahedronGeometry":case"TetrahedronBufferGeometry":geometry=new Geometries[data.type](data.radius,data.detail);break;case"RingGeometry":case"RingBufferGeometry":geometry=new Geometries[data.type](data.innerRadius,data.outerRadius,data.thetaSegments,data.phiSegments,data.thetaStart,data.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":geometry=new Geometries[data.type](data.radius,data.tube,data.radialSegments,data.tubularSegments,data.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":geometry=new Geometries[data.type](data.radius,data.tube,data.tubularSegments,data.radialSegments,data.p,data.q);break;case"LatheGeometry":case"LatheBufferGeometry":geometry=new Geometries[data.type](data.points,data.segments,data.phiStart,data.phiLength);break;case"PolyhedronGeometry":case"PolyhedronBufferGeometry":geometry=new Geometries[data.type](data.vertices,data.indices,data.radius,data.details);break;case"ShapeGeometry":case"ShapeBufferGeometry":for(var geometryShapes=[],j=0,jl=data.shapes.length;j<jl;j++){var shape=shapes[data.shapes[j]];geometryShapes.push(shape)}geometry=new Geometries[data.type](geometryShapes,data.curveSegments);break;case"ExtrudeGeometry":case"ExtrudeBufferGeometry":for(var geometryShapes=[],j=0,jl=data.shapes.length;j<jl;j++){var shape=shapes[data.shapes[j]];geometryShapes.push(shape)}var extrudePath=data.options.extrudePath;void 0!==extrudePath&&(data.options.extrudePath=(new Curves[extrudePath.type]).fromJSON(extrudePath)),geometry=new Geometries[data.type](geometryShapes,data.options);break;case"BufferGeometry":geometry=bufferGeometryLoader.parse(data);break;case"Geometry":var geometryLoader;if("THREE"in window&&"LegacyJSONLoader"in THREE)geometry=(new THREE.LegacyJSONLoader).parse(data,this.resourcePath).geometry;else console.error('THREE.ObjectLoader: You have to import LegacyJSONLoader in order load geometry data of type "Geometry".');break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+data.type+'"');continue}geometry.uuid=data.uuid,void 0!==data.name&&(geometry.name=data.name),!0===geometry.isBufferGeometry&&void 0!==data.userData&&(geometry.userData=data.userData),geometries[data.uuid]=geometry}return geometries},parseMaterials:function(json,textures){var cache={},materials={};if(void 0!==json){var loader=new MaterialLoader;loader.setTextures(textures);for(var i=0,l=json.length;i<l;i++){var data=json[i];if("MultiMaterial"===data.type){for(var array=[],j=0;j<data.materials.length;j++){var material=data.materials[j];void 0===cache[material.uuid]&&(cache[material.uuid]=loader.parse(material)),array.push(cache[material.uuid])}materials[data.uuid]=array}else materials[data.uuid]=loader.parse(data),cache[data.uuid]=materials[data.uuid]}}return materials},parseAnimations:function(json){for(var animations=[],i=0;i<json.length;i++){var data=json[i],clip=AnimationClip.parse(data);void 0!==data.uuid&&(clip.uuid=data.uuid),animations.push(clip)}return animations},parseImages:function(json,onLoad){var scope=this,images={};function loadImage(url){return scope.manager.itemStart(url),loader.load(url,(function(){scope.manager.itemEnd(url)}),void 0,(function(){scope.manager.itemError(url),scope.manager.itemEnd(url)}))}if(void 0!==json&&json.length>0){var manager,loader=new ImageLoader(new LoadingManager(onLoad));loader.setCrossOrigin(this.crossOrigin);for(var i=0,il=json.length;i<il;i++){var image=json[i],url=image.url;if(Array.isArray(url)){images[image.uuid]=[];for(var j=0,jl=url.length;j<jl;j++){var currentUrl=url[j],path=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(currentUrl)?currentUrl:scope.resourcePath+currentUrl;images[image.uuid].push(loadImage(path))}}else{var path=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(image.url)?image.url:scope.resourcePath+image.url;images[image.uuid]=loadImage(path)}}}return images},parseTextures:function(json,images){function parseConstant(value,type){return"number"==typeof value?value:(console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",value),type[value])}var textures={};if(void 0!==json)for(var i=0,l=json.length;i<l;i++){var data=json[i],texture;void 0===data.image&&console.warn('THREE.ObjectLoader: No "image" specified for',data.uuid),void 0===images[data.image]&&console.warn("THREE.ObjectLoader: Undefined image",data.image),(texture=Array.isArray(images[data.image])?new CubeTexture(images[data.image]):new Texture(images[data.image])).needsUpdate=!0,texture.uuid=data.uuid,void 0!==data.name&&(texture.name=data.name),void 0!==data.mapping&&(texture.mapping=parseConstant(data.mapping,TEXTURE_MAPPING)),void 0!==data.offset&&texture.offset.fromArray(data.offset),void 0!==data.repeat&&texture.repeat.fromArray(data.repeat),void 0!==data.center&&texture.center.fromArray(data.center),void 0!==data.rotation&&(texture.rotation=data.rotation),void 0!==data.wrap&&(texture.wrapS=parseConstant(data.wrap[0],TEXTURE_WRAPPING),texture.wrapT=parseConstant(data.wrap[1],TEXTURE_WRAPPING)),void 0!==data.format&&(texture.format=data.format),void 0!==data.type&&(texture.type=data.type),void 0!==data.encoding&&(texture.encoding=data.encoding),void 0!==data.minFilter&&(texture.minFilter=parseConstant(data.minFilter,TEXTURE_FILTER)),void 0!==data.magFilter&&(texture.magFilter=parseConstant(data.magFilter,TEXTURE_FILTER)),void 0!==data.anisotropy&&(texture.anisotropy=data.anisotropy),void 0!==data.flipY&&(texture.flipY=data.flipY),void 0!==data.premultiplyAlpha&&(texture.premultiplyAlpha=data.premultiplyAlpha),void 0!==data.unpackAlignment&&(texture.unpackAlignment=data.unpackAlignment),textures[data.uuid]=texture}return textures},parseObject:function(data,geometries,materials){var object;function getGeometry(name){return void 0===geometries[name]&&console.warn("THREE.ObjectLoader: Undefined geometry",name),geometries[name]}function getMaterial(name){if(void 0!==name){if(Array.isArray(name)){for(var array=[],i=0,l=name.length;i<l;i++){var uuid=name[i];void 0===materials[uuid]&&console.warn("THREE.ObjectLoader: Undefined material",uuid),array.push(materials[uuid])}return array}return void 0===materials[name]&&console.warn("THREE.ObjectLoader: Undefined material",name),materials[name]}}switch(data.type){case"Scene":object=new Scene,void 0!==data.background&&Number.isInteger(data.background)&&(object.background=new Color(data.background)),void 0!==data.fog&&("Fog"===data.fog.type?object.fog=new Fog(data.fog.color,data.fog.near,data.fog.far):"FogExp2"===data.fog.type&&(object.fog=new FogExp2(data.fog.color,data.fog.density)));break;case"PerspectiveCamera":object=new PerspectiveCamera(data.fov,data.aspect,data.near,data.far),void 0!==data.focus&&(object.focus=data.focus),void 0!==data.zoom&&(object.zoom=data.zoom),void 0!==data.filmGauge&&(object.filmGauge=data.filmGauge),void 0!==data.filmOffset&&(object.filmOffset=data.filmOffset),void 0!==data.view&&(object.view=Object.assign({},data.view));break;case"OrthographicCamera":object=new OrthographicCamera(data.left,data.right,data.top,data.bottom,data.near,data.far),void 0!==data.zoom&&(object.zoom=data.zoom),void 0!==data.view&&(object.view=Object.assign({},data.view));break;case"AmbientLight":object=new AmbientLight(data.color,data.intensity);break;case"DirectionalLight":object=new DirectionalLight(data.color,data.intensity);break;case"PointLight":object=new PointLight(data.color,data.intensity,data.distance,data.decay);break;case"RectAreaLight":object=new RectAreaLight(data.color,data.intensity,data.width,data.height);break;case"SpotLight":object=new SpotLight(data.color,data.intensity,data.distance,data.angle,data.penumbra,data.decay);break;case"HemisphereLight":object=new HemisphereLight(data.color,data.groundColor,data.intensity);break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.");case"Mesh":var geometry=getGeometry(data.geometry),material=getMaterial(data.material);object=geometry.bones&&geometry.bones.length>0?new SkinnedMesh(geometry,material):new Mesh(geometry,material);break;case"LOD":object=new LOD;break;case"Line":object=new Line(getGeometry(data.geometry),getMaterial(data.material),data.mode);break;case"LineLoop":object=new LineLoop(getGeometry(data.geometry),getMaterial(data.material));break;case"LineSegments":object=new LineSegments(getGeometry(data.geometry),getMaterial(data.material));break;case"PointCloud":case"Points":object=new Points(getGeometry(data.geometry),getMaterial(data.material));break;case"Sprite":object=new Sprite(getMaterial(data.material));break;case"Group":object=new Group;break;default:object=new Object3D}if(object.uuid=data.uuid,void 0!==data.name&&(object.name=data.name),void 0!==data.matrix?(object.matrix.fromArray(data.matrix),void 0!==data.matrixAutoUpdate&&(object.matrixAutoUpdate=data.matrixAutoUpdate),object.matrixAutoUpdate&&object.matrix.decompose(object.position,object.quaternion,object.scale)):(void 0!==data.position&&object.position.fromArray(data.position),void 0!==data.rotation&&object.rotation.fromArray(data.rotation),void 0!==data.quaternion&&object.quaternion.fromArray(data.quaternion),void 0!==data.scale&&object.scale.fromArray(data.scale)),void 0!==data.castShadow&&(object.castShadow=data.castShadow),void 0!==data.receiveShadow&&(object.receiveShadow=data.receiveShadow),data.shadow&&(void 0!==data.shadow.bias&&(object.shadow.bias=data.shadow.bias),void 0!==data.shadow.radius&&(object.shadow.radius=data.shadow.radius),void 0!==data.shadow.mapSize&&object.shadow.mapSize.fromArray(data.shadow.mapSize),void 0!==data.shadow.camera&&(object.shadow.camera=this.parseObject(data.shadow.camera))),void 0!==data.visible&&(object.visible=data.visible),void 0!==data.frustumCulled&&(object.frustumCulled=data.frustumCulled),void 0!==data.renderOrder&&(object.renderOrder=data.renderOrder),void 0!==data.userData&&(object.userData=data.userData),void 0!==data.layers&&(object.layers.mask=data.layers),void 0!==data.children)for(var children=data.children,i=0;i<children.length;i++)object.add(this.parseObject(children[i],geometries,materials));if("LOD"===data.type)for(var levels=data.levels,l=0;l<levels.length;l++){var level=levels[l],child=object.getObjectByProperty("uuid",level.object);void 0!==child&&object.addLevel(child,level.distance)}return object}});var TEXTURE_MAPPING={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},TEXTURE_WRAPPING={RepeatWrapping:1e3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},TEXTURE_FILTER={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008},BlendingMode,color,textureLoader,materialLoader,context;function ImageBitmapLoader(manager){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.manager=void 0!==manager?manager:DefaultLoadingManager,this.options=void 0}function ShapePath(){this.type="ShapePath",this.color=new Color,this.subPaths=[],this.currentPath=null}function Font(data){this.type="Font",this.data=data}function createPaths(text,size,data){for(var chars=Array.from?Array.from(text):String(text).split(""),scale=size/data.resolution,line_height=(data.boundingBox.yMax-data.boundingBox.yMin+data.underlineThickness)*scale,paths=[],offsetX=0,offsetY=0,i=0;i<chars.length;i++){var char=chars[i];if("\n"===char)offsetX=0,offsetY-=line_height;else{var ret=createPath(char,scale,offsetX,offsetY,data);offsetX+=ret.offsetX,paths.push(ret.path)}}return paths}function createPath(char,scale,offsetX,offsetY,data){var glyph=data.glyphs[char]||data.glyphs["?"];if(glyph){var path=new ShapePath,x,y,cpx,cpy,cpx1,cpy1,cpx2,cpy2;if(glyph.o)for(var outline=glyph._cachedOutline||(glyph._cachedOutline=glyph.o.split(" ")),i=0,l=outline.length;i<l;){var action;switch(outline[i++]){case"m":x=outline[i++]*scale+offsetX,y=outline[i++]*scale+offsetY,path.moveTo(x,y);break;case"l":x=outline[i++]*scale+offsetX,y=outline[i++]*scale+offsetY,path.lineTo(x,y);break;case"q":cpx=outline[i++]*scale+offsetX,cpy=outline[i++]*scale+offsetY,cpx1=outline[i++]*scale+offsetX,cpy1=outline[i++]*scale+offsetY,path.quadraticCurveTo(cpx1,cpy1,cpx,cpy);break;case"b":cpx=outline[i++]*scale+offsetX,cpy=outline[i++]*scale+offsetY,cpx1=outline[i++]*scale+offsetX,cpy1=outline[i++]*scale+offsetY,cpx2=outline[i++]*scale+offsetX,cpy2=outline[i++]*scale+offsetY,path.bezierCurveTo(cpx1,cpy1,cpx2,cpy2,cpx,cpy)}}return{offsetX:glyph.ha*scale,path:path}}}function FontLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}function Loader(){}ImageBitmapLoader.prototype={constructor:ImageBitmapLoader,setOptions:function setOptions(options){return this.options=options,this},load:function(url,onLoad,onProgress,onError){void 0===url&&(url=""),void 0!==this.path&&(url=this.path+url),url=this.manager.resolveURL(url);var scope=this,cached=Cache.get(url);if(void 0!==cached)return scope.manager.itemStart(url),setTimeout((function(){onLoad&&onLoad(cached),scope.manager.itemEnd(url)}),0),cached;fetch(url).then((function(res){return res.blob()})).then((function(blob){return createImageBitmap(blob,scope.options)})).then((function(imageBitmap){Cache.add(url,imageBitmap),onLoad&&onLoad(imageBitmap),scope.manager.itemEnd(url)})).catch((function(e){onError&&onError(e),scope.manager.itemError(url),scope.manager.itemEnd(url)}))},setCrossOrigin:function(){return this},setPath:function(value){return this.path=value,this}},Object.assign(ShapePath.prototype,{moveTo:function(x,y){this.currentPath=new Path,this.subPaths.push(this.currentPath),this.currentPath.moveTo(x,y)},lineTo:function(x,y){this.currentPath.lineTo(x,y)},quadraticCurveTo:function(aCPx,aCPy,aX,aY){this.currentPath.quadraticCurveTo(aCPx,aCPy,aX,aY)},bezierCurveTo:function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){this.currentPath.bezierCurveTo(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY)},splineThru:function(pts){this.currentPath.splineThru(pts)},toShapes:function(isCCW,noHoles){function toShapesNoHoles(inSubpaths){for(var shapes=[],i=0,l=inSubpaths.length;i<l;i++){var tmpPath=inSubpaths[i],tmpShape=new Shape;tmpShape.curves=tmpPath.curves,shapes.push(tmpShape)}return shapes}function isPointInsidePolygon(inPt,inPolygon){for(var polyLen=inPolygon.length,inside=!1,p=polyLen-1,q=0;q<polyLen;p=q++){var edgeLowPt=inPolygon[p],edgeHighPt=inPolygon[q],edgeDx=edgeHighPt.x-edgeLowPt.x,edgeDy=edgeHighPt.y-edgeLowPt.y;if(Math.abs(edgeDy)>Number.EPSILON){if(edgeDy<0&&(edgeLowPt=inPolygon[q],edgeDx=-edgeDx,edgeHighPt=inPolygon[p],edgeDy=-edgeDy),inPt.y<edgeLowPt.y||inPt.y>edgeHighPt.y)continue;if(inPt.y===edgeLowPt.y){if(inPt.x===edgeLowPt.x)return!0}else{var perpEdge=edgeDy*(inPt.x-edgeLowPt.x)-edgeDx*(inPt.y-edgeLowPt.y);if(0===perpEdge)return!0;if(perpEdge<0)continue;inside=!inside}}else{if(inPt.y!==edgeLowPt.y)continue;if(edgeHighPt.x<=inPt.x&&inPt.x<=edgeLowPt.x||edgeLowPt.x<=inPt.x&&inPt.x<=edgeHighPt.x)return!0}}return inside}var isClockWise=ShapeUtils.isClockWise,subPaths=this.subPaths;if(0===subPaths.length)return[];if(!0===noHoles)return toShapesNoHoles(subPaths);var solid,tmpPath,tmpShape,shapes=[];if(1===subPaths.length)return tmpPath=subPaths[0],(tmpShape=new Shape).curves=tmpPath.curves,shapes.push(tmpShape),shapes;var holesFirst=!isClockWise(subPaths[0].getPoints());holesFirst=isCCW?!holesFirst:holesFirst;var betterShapeHoles=[],newShapes=[],newShapeHoles=[],mainIdx=0,tmpPoints,tmpHoles;newShapes[mainIdx]=void 0,newShapeHoles[mainIdx]=[];for(var i=0,l=subPaths.length;i<l;i++)solid=isClockWise(tmpPoints=(tmpPath=subPaths[i]).getPoints()),(solid=isCCW?!solid:solid)?(!holesFirst&&newShapes[mainIdx]&&mainIdx++,newShapes[mainIdx]={s:new Shape,p:tmpPoints},newShapes[mainIdx].s.curves=tmpPath.curves,holesFirst&&mainIdx++,newShapeHoles[mainIdx]=[]):newShapeHoles[mainIdx].push({h:tmpPath,p:tmpPoints[0]});if(!newShapes[0])return toShapesNoHoles(subPaths);if(newShapes.length>1){for(var ambiguous=!1,toChange=[],sIdx=0,sLen=newShapes.length;sIdx<sLen;sIdx++)betterShapeHoles[sIdx]=[];for(var sIdx=0,sLen=newShapes.length;sIdx<sLen;sIdx++)for(var sho=newShapeHoles[sIdx],hIdx=0;hIdx<sho.length;hIdx++){for(var ho=sho[hIdx],hole_unassigned=!0,s2Idx=0;s2Idx<newShapes.length;s2Idx++)isPointInsidePolygon(ho.p,newShapes[s2Idx].p)&&(sIdx!==s2Idx&&toChange.push({froms:sIdx,tos:s2Idx,hole:hIdx}),hole_unassigned?(hole_unassigned=!1,betterShapeHoles[s2Idx].push(ho)):ambiguous=!0);hole_unassigned&&betterShapeHoles[sIdx].push(ho)}toChange.length>0&&(ambiguous||(newShapeHoles=betterShapeHoles))}for(var i=0,il=newShapes.length;i<il;i++){tmpShape=newShapes[i].s,shapes.push(tmpShape);for(var j=0,jl=(tmpHoles=newShapeHoles[i]).length;j<jl;j++)tmpShape.holes.push(tmpHoles[j].h)}return shapes}}),Object.assign(Font.prototype,{isFont:!0,generateShapes:function(text,size){void 0===size&&(size=100);for(var shapes=[],paths=createPaths(text,size,this.data),p=0,pl=paths.length;p<pl;p++)Array.prototype.push.apply(shapes,paths[p].toShapes());return shapes}}),Object.assign(FontLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this,loader=new FileLoader(this.manager);loader.setPath(this.path),loader.load(url,(function(text){var json;try{json=JSON.parse(text)}catch(e){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),json=JSON.parse(text.substring(65,text.length-2))}var font=scope.parse(json);onLoad&&onLoad(font)}),onProgress,onError)},parse:function(json){return new Font(json)},setPath:function(value){return this.path=value,this}}),Loader.Handlers={handlers:[],add:function(regex,loader){this.handlers.push(regex,loader)},get:function(file){for(var handlers=this.handlers,i=0,l=handlers.length;i<l;i+=2){var regex=handlers[i],loader=handlers[i+1];if(regex.test(file))return loader}return null}},Object.assign(Loader.prototype,{crossOrigin:"anonymous",onLoadStart:function(){},onLoadProgress:function(){},onLoadComplete:function(){},initMaterials:function(materials,texturePath,crossOrigin){for(var array=[],i=0;i<materials.length;++i)array[i]=this.createMaterial(materials[i],texturePath,crossOrigin);return array}
vendor: 29,326 bytes, line 1
1,createMaterial:(BlendingMode={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},color=new Color,textureLoader=new TextureLoader,materialLoader=new MaterialLoader,function createMaterial(m,texturePath,crossOrigin){var textures={};function loadTexture(path,repeat,offset,wrap,anisotropy){var fullPath=texturePath+path,loader=Loader.Handlers.get(fullPath),texture;null!==loader?texture=loader.load(fullPath):(textureLoader.setCrossOrigin(crossOrigin),texture=textureLoader.load(fullPath)),void 0!==repeat&&(texture.repeat.fromArray(repeat),1!==repeat[0]&&(texture.wrapS=1e3),1!==repeat[1]&&(texture.wrapT=1e3)),void 0!==offset&&texture.offset.fromArray(offset),void 0!==wrap&&("repeat"===wrap[0]&&(texture.wrapS=1e3),"mirror"===wrap[0]&&(texture.wrapS=1002),"repeat"===wrap[1]&&(texture.wrapT=1e3),"mirror"===wrap[1]&&(texture.wrapT=1002)),void 0!==anisotropy&&(texture.anisotropy=anisotropy);var uuid=_Math.generateUUID();return textures[uuid]=texture,uuid}var json={uuid:_Math.generateUUID(),type:"MeshLambertMaterial"};for(var name in m){var value=m[name];switch(name){case"DbgColor":case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":json.name=value;break;case"blending":json.blending=BlendingMode[value];break;case"colorAmbient":case"mapAmbient":console.warn("THREE.Loader.createMaterial:",name,"is no longer supported.");break;case"colorDiffuse":json.color=color.fromArray(value).getHex();break;case"colorSpecular":json.specular=color.fromArray(value).getHex();break;case"colorEmissive":json.emissive=color.fromArray(value).getHex();break;case"specularCoef":json.shininess=value;break;case"shading":"basic"===value.toLowerCase()&&(json.type="MeshBasicMaterial"),"phong"===value.toLowerCase()&&(json.type="MeshPhongMaterial"),"standard"===value.toLowerCase()&&(json.type="MeshStandardMaterial");break;case"mapDiffuse":json.map=loadTexture(value,m.mapDiffuseRepeat,m.mapDiffuseOffset,m.mapDiffuseWrap,m.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapEmissive":json.emissiveMap=loadTexture(value,m.mapEmissiveRepeat,m.mapEmissiveOffset,m.mapEmissiveWrap,m.mapEmissiveAnisotropy);break;case"mapEmissiveRepeat":case"mapEmissiveOffset":case"mapEmissiveWrap":case"mapEmissiveAnisotropy":break;case"mapLight":json.lightMap=loadTexture(value,m.mapLightRepeat,m.mapLightOffset,m.mapLightWrap,m.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":json.aoMap=loadTexture(value,m.mapAORepeat,m.mapAOOffset,m.mapAOWrap,m.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":json.bumpMap=loadTexture(value,m.mapBumpRepeat,m.mapBumpOffset,m.mapBumpWrap,m.mapBumpAnisotropy);break;case"mapBumpScale":json.bumpScale=value;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":json.normalMap=loadTexture(value,m.mapNormalRepeat,m.mapNormalOffset,m.mapNormalWrap,m.mapNormalAnisotropy);break;case"mapNormalFactor":json.normalScale=value;break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":json.specularMap=loadTexture(value,m.mapSpecularRepeat,m.mapSpecularOffset,m.mapSpecularWrap,m.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapMetalness":json.metalnessMap=loadTexture(value,m.mapMetalnessRepeat,m.mapMetalnessOffset,m.mapMetalnessWrap,m.mapMetalnessAnisotropy);break;case"mapMetalnessRepeat":case"mapMetalnessOffset":case"mapMetalnessWrap":case"mapMetalnessAnisotropy":break;case"mapRoughness":json.roughnessMap=loadTexture(value,m.mapRoughnessRepeat,m.mapRoughnessOffset,m.mapRoughnessWrap,m.mapRoughnessAnisotropy);break;case"mapRoughnessRepeat":case"mapRoughnessOffset":case"mapRoughnessWrap":case"mapRoughnessAnisotropy":break;case"mapAlpha":json.alphaMap=loadTexture(value,m.mapAlphaRepeat,m.mapAlphaOffset,m.mapAlphaWrap,m.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":json.side=1;break;case"doubleSided":json.side=2;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity"),json.opacity=value;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":json[name]=value;break;case"vertexColors":!0===value&&(json.vertexColors=2),"face"===value&&(json.vertexColors=1);break;default:console.error("THREE.Loader.createMaterial: Unsupported",name,value)}}return"MeshBasicMaterial"===json.type&&delete json.emissive,"MeshPhongMaterial"!==json.type&&delete json.specular,json.opacity<1&&(json.transparent=!0),materialLoader.setTextures(textures),materialLoader.parse(json)})});var AudioContext={getContext:function(){return void 0===context&&(context=new(window.AudioContext||window.webkitAudioContext)),context},setContext:function(value){context=value}},instance,focus,fov,aspect,near,far,zoom,eyeSep,eyeRight,eyeLeft;function AudioLoader(manager){this.manager=void 0!==manager?manager:DefaultLoadingManager}function StereoCamera(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new PerspectiveCamera,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new PerspectiveCamera,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1}function CubeCamera(near,far,cubeResolution,options){Object3D.call(this),this.type="CubeCamera";var fov=90,aspect=1,cameraPX=new PerspectiveCamera(90,1,near,far);cameraPX.up.set(0,-1,0),cameraPX.lookAt(new Vector3(1,0,0)),this.add(cameraPX);var cameraNX=new PerspectiveCamera(90,1,near,far);cameraNX.up.set(0,-1,0),cameraNX.lookAt(new Vector3(-1,0,0)),this.add(cameraNX);var cameraPY=new PerspectiveCamera(90,1,near,far);cameraPY.up.set(0,0,1),cameraPY.lookAt(new Vector3(0,1,0)),this.add(cameraPY);var cameraNY=new PerspectiveCamera(90,1,near,far);cameraNY.up.set(0,0,-1),cameraNY.lookAt(new Vector3(0,-1,0)),this.add(cameraNY);var cameraPZ=new PerspectiveCamera(90,1,near,far);cameraPZ.up.set(0,-1,0),cameraPZ.lookAt(new Vector3(0,0,1)),this.add(cameraPZ);var cameraNZ=new PerspectiveCamera(90,1,near,far);cameraNZ.up.set(0,-1,0),cameraNZ.lookAt(new Vector3(0,0,-1)),this.add(cameraNZ),options=options||{format:1022,magFilter:1006,minFilter:1006},this.renderTarget=new WebGLRenderTargetCube(cubeResolution,cubeResolution,options),this.renderTarget.texture.name="CubeCamera",this.update=function(renderer,scene){null===this.parent&&this.updateMatrixWorld();var renderTarget=this.renderTarget,generateMipmaps=renderTarget.texture.generateMipmaps;renderTarget.texture.generateMipmaps=!1,renderTarget.activeCubeFace=0,renderer.render(scene,cameraPX,renderTarget),renderTarget.activeCubeFace=1,renderer.render(scene,cameraNX,renderTarget),renderTarget.activeCubeFace=2,renderer.render(scene,cameraPY,renderTarget),renderTarget.activeCubeFace=3,renderer.render(scene,cameraNY,renderTarget),renderTarget.activeCubeFace=4,renderer.render(scene,cameraPZ,renderTarget),renderTarget.texture.generateMipmaps=generateMipmaps,renderTarget.activeCubeFace=5,renderer.render(scene,cameraNZ,renderTarget),renderer.setRenderTarget(null)},this.clear=function(renderer,color,depth,stencil){for(var renderTarget=this.renderTarget,i=0;i<6;i++)renderTarget.activeCubeFace=i,renderer.setRenderTarget(renderTarget),renderer.clear(color,depth,stencil);renderer.setRenderTarget(null)}}function Clock(autoStart){this.autoStart=void 0===autoStart||autoStart,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}function AudioListener(){Object3D.call(this),this.type="AudioListener",this.context=AudioContext.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0}function Audio(listener){Object3D.call(this),this.type="Audio",this.listener=listener,this.context=listener.context,this.gain=this.context.createGain(),this.gain.connect(listener.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.startTime=0,this.offset=0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.sourceType="empty",this.filters=[]}function PositionalAudio(listener){Audio.call(this,listener),this.panner=this.context.createPanner(),this.panner.connect(this.gain)}function AudioAnalyser(audio,fftSize){this.analyser=audio.context.createAnalyser(),this.analyser.fftSize=void 0!==fftSize?fftSize:2048,this.data=new Uint8Array(this.analyser.frequencyBinCount),audio.getOutput().connect(this.analyser)}function PropertyMixer(binding,typeName,valueSize){this.binding=binding,this.valueSize=valueSize;var bufferType=Float64Array,mixFunction;switch(typeName){case"quaternion":mixFunction=this._slerp;break;case"string":case"bool":bufferType=Array,mixFunction=this._select;break;default:mixFunction=this._lerp}this.buffer=new bufferType(4*valueSize),this._mixBufferRegion=mixFunction,this.cumulativeWeight=0,this.useCount=0,this.referenceCount=0}Object.assign(AudioLoader.prototype,{load:function(url,onLoad,onProgress,onError){var loader=new FileLoader(this.manager);loader.setResponseType("arraybuffer"),loader.setPath(this.path),loader.load(url,(function(buffer){var bufferCopy=buffer.slice(0),context;AudioContext.getContext().decodeAudioData(bufferCopy,(function(audioBuffer){onLoad(audioBuffer)}))}),onProgress,onError)},setPath:function(value){return this.path=value,this}}),Object.assign(StereoCamera.prototype,{update:(eyeRight=new Matrix4,eyeLeft=new Matrix4,function update(camera){var needsUpdate;if(instance!==this||focus!==camera.focus||fov!==camera.fov||aspect!==camera.aspect*this.aspect||near!==camera.near||far!==camera.far||zoom!==camera.zoom||eyeSep!==this.eyeSep){instance=this,focus=camera.focus,fov=camera.fov,aspect=camera.aspect*this.aspect,near=camera.near,far=camera.far,zoom=camera.zoom;var projectionMatrix=camera.projectionMatrix.clone(),eyeSepOnProjection=(eyeSep=this.eyeSep/2)*near/focus,ymax=near*Math.tan(_Math.DEG2RAD*fov*.5)/zoom,xmin,xmax;eyeLeft.elements[12]=-eyeSep,eyeRight.elements[12]=eyeSep,xmin=-ymax*aspect+eyeSepOnProjection,xmax=ymax*aspect+eyeSepOnProjection,projectionMatrix.elements[0]=2*near/(xmax-xmin),projectionMatrix.elements[8]=(xmax+xmin)/(xmax-xmin),this.cameraL.projectionMatrix.copy(projectionMatrix),xmin=-ymax*aspect-eyeSepOnProjection,xmax=ymax*aspect-eyeSepOnProjection,projectionMatrix.elements[0]=2*near/(xmax-xmin),projectionMatrix.elements[8]=(xmax+xmin)/(xmax-xmin),this.cameraR.projectionMatrix.copy(projectionMatrix)}this.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(eyeLeft),this.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(eyeRight)})}),CubeCamera.prototype=Object.create(Object3D.prototype),CubeCamera.prototype.constructor=CubeCamera,Object.assign(Clock.prototype,{start:function(){this.startTime=("undefined"==typeof performance?Date:performance).now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0},stop:function(){this.getElapsedTime(),this.running=!1,this.autoStart=!1},getElapsedTime:function(){return this.getDelta(),this.elapsedTime},getDelta:function(){var diff=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var newTime=("undefined"==typeof performance?Date:performance).now();diff=(newTime-this.oldTime)/1e3,this.oldTime=newTime,this.elapsedTime+=diff}return diff}}),AudioListener.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:AudioListener,getInput:function(){return this.gain},removeFilter:function(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this},getFilter:function(){return this.filter},setFilter:function(value){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=value,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(value){return this.gain.gain.setTargetAtTime(value,this.context.currentTime,.01),this},updateMatrixWorld:function(){var position=new Vector3,quaternion=new Quaternion,scale=new Vector3,orientation=new Vector3,clock=new Clock;return function updateMatrixWorld(force){Object3D.prototype.updateMatrixWorld.call(this,force);var listener=this.context.listener,up=this.up;if(this.timeDelta=clock.getDelta(),this.matrixWorld.decompose(position,quaternion,scale),orientation.set(0,0,-1).applyQuaternion(quaternion),listener.positionX){var endTime=this.context.currentTime+this.timeDelta;listener.positionX.linearRampToValueAtTime(position.x,endTime),listener.positionY.linearRampToValueAtTime(position.y,endTime),listener.positionZ.linearRampToValueAtTime(position.z,endTime),listener.forwardX.linearRampToValueAtTime(orientation.x,endTime),listener.forwardY.linearRampToValueAtTime(orientation.y,endTime),listener.forwardZ.linearRampToValueAtTime(orientation.z,endTime),listener.upX.linearRampToValueAtTime(up.x,endTime),listener.upY.linearRampToValueAtTime(up.y,endTime),listener.upZ.linearRampToValueAtTime(up.z,endTime)}else listener.setPosition(position.x,position.y,position.z),listener.setOrientation(orientation.x,orientation.y,orientation.z,up.x,up.y,up.z)}}()}),Audio.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Audio,getOutput:function(){return this.gain},setNodeSource:function(audioNode){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=audioNode,this.connect(),this},setMediaElementSource:function(mediaElement){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(mediaElement),this.connect(),this},setBuffer:function(audioBuffer){return this.buffer=audioBuffer,this.sourceType="buffer",this.autoplay&&this.play(),this},play:function(){if(!0!==this.isPlaying){if(!1!==this.hasPlaybackControl){var source=this.context.createBufferSource();return source.buffer=this.buffer,source.detune.value=this.detune,source.loop=this.loop,source.onended=this.onEnded.bind(this),source.playbackRate.setValueAtTime(this.playbackRate,this.startTime),this.startTime=this.context.currentTime,source.start(this.startTime,this.offset),this.isPlaying=!0,this.source=source,this.connect()}console.warn("THREE.Audio: this Audio has no playback control.")}else console.warn("THREE.Audio: Audio is already playing.")},pause:function(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this.source.stop(),this.source.onended=null,this.offset+=(this.context.currentTime-this.startTime)*this.playbackRate,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")},stop:function(){if(!1!==this.hasPlaybackControl)return this.source.stop(),this.source.onended=null,this.offset=0,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")},connect:function(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(var i=1,l=this.filters.length;i<l;i++)this.filters[i-1].connect(this.filters[i]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(var i=1,l=this.filters.length;i<l;i++)this.filters[i-1].disconnect(this.filters[i]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(value){return value||(value=[]),!0===this.isPlaying?(this.disconnect(),this.filters=value,this.connect()):this.filters=value,this},setDetune:function(value){return this.detune=value,!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this},getDetune:function(){return this.detune},getFilter:function(){return this.getFilters()[0]},setFilter:function(filter){return this.setFilters(filter?[filter]:[])},setPlaybackRate:function(value){if(!1!==this.hasPlaybackControl)return this.playbackRate=value,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn("THREE.Audio: this Audio has no playback control.")},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop},setLoop:function(value){if(!1!==this.hasPlaybackControl)return this.loop=value,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn("THREE.Audio: this Audio has no playback control.")},getVolume:function(){return this.gain.gain.value},setVolume:function(value){return this.gain.gain.setTargetAtTime(value,this.context.currentTime,.01),this}}),PositionalAudio.prototype=Object.assign(Object.create(Audio.prototype),{constructor:PositionalAudio,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(value){return this.panner.refDistance=value,this},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(value){return this.panner.rolloffFactor=value,this},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(value){return this.panner.distanceModel=value,this},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(value){return this.panner.maxDistance=value,this},setDirectionalCone:function(coneInnerAngle,coneOuterAngle,coneOuterGain){return this.panner.coneInnerAngle=coneInnerAngle,this.panner.coneOuterAngle=coneOuterAngle,this.panner.coneOuterGain=coneOuterGain,this},updateMatrixWorld:function(){var position=new Vector3,quaternion=new Quaternion,scale=new Vector3,orientation=new Vector3;return function updateMatrixWorld(force){if(Object3D.prototype.updateMatrixWorld.call(this,force),!1!==this.isPlaying){this.matrixWorld.decompose(position,quaternion,scale),orientation.set(0,0,1).applyQuaternion(quaternion);var panner=this.panner;if(panner.positionX){var endTime=this.context.currentTime+this.listener.timeDelta;panner.positionX.linearRampToValueAtTime(position.x,endTime),panner.positionY.linearRampToValueAtTime(position.y,endTime),panner.positionZ.linearRampToValueAtTime(position.z,endTime),panner.orientationX.linearRampToValueAtTime(orientation.x,endTime),panner.orientationY.linearRampToValueAtTime(orientation.y,endTime),panner.orientationZ.linearRampToValueAtTime(orientation.z,endTime)}else panner.setPosition(position.x,position.y,position.z),panner.setOrientation(orientation.x,orientation.y,orientation.z)}}}()}),Object.assign(AudioAnalyser.prototype,{getFrequencyData:function(){return this.analyser.getByteFrequencyData(this.data),this.data},getAverageFrequency:function(){for(var value=0,data=this.getFrequencyData(),i=0;i<data.length;i++)value+=data[i];return value/data.length}}),Object.assign(PropertyMixer.prototype,{accumulate:function(accuIndex,weight){var buffer=this.buffer,stride=this.valueSize,offset=accuIndex*stride+stride,currentWeight=this.cumulativeWeight;if(0===currentWeight){for(var i=0;i!==stride;++i)buffer[offset+i]=buffer[i];currentWeight=weight}else{var mix=weight/(currentWeight+=weight);this._mixBufferRegion(buffer,offset,0,mix,stride)}this.cumulativeWeight=currentWeight},apply:function(accuIndex){var stride=this.valueSize,buffer=this.buffer,offset=accuIndex*stride+stride,weight=this.cumulativeWeight,binding=this.binding;if(this.cumulativeWeight=0,weight<1){var originalValueOffset=3*stride;this._mixBufferRegion(buffer,offset,originalValueOffset,1-weight,stride)}for(var i=stride,e=stride+stride;i!==e;++i)if(buffer[i]!==buffer[i+stride]){binding.setValue(buffer,offset);break}},saveOriginalState:function(){var binding=this.binding,buffer=this.buffer,stride=this.valueSize,originalValueOffset=3*stride;binding.getValue(buffer,originalValueOffset);for(var i=stride,e=originalValueOffset;i!==e;++i)buffer[i]=buffer[originalValueOffset+i%stride];this.cumulativeWeight=0},restoreOriginalState:function(){var originalValueOffset=3*this.valueSize;this.binding.setValue(this.buffer,originalValueOffset)},_select:function(buffer,dstOffset,srcOffset,t,stride){if(t>=.5)for(var i=0;i!==stride;++i)buffer[dstOffset+i]=buffer[srcOffset+i]},_slerp:function(buffer,dstOffset,srcOffset,t){Quaternion.slerpFlat(buffer,dstOffset,buffer,dstOffset,buffer,srcOffset,t)},_lerp:function(buffer,dstOffset,srcOffset,t,stride){for(var s=1-t,i=0;i!==stride;++i){var j=dstOffset+i;buffer[j]=buffer[j]*s+buffer[srcOffset+i]*t}}});var RESERVED_CHARS_RE="\\[\\]\\.:\\/",wordChar,wordCharOrDot,directoryRe,nodeRe,objectRe,propertyRe,trackRe,supportedObjectNames,reservedRe,startP,startEnd,lineGeometry,coneGeometry,axis,radians;function Composite(targetGroup,path,optionalParsedPath){var parsedPath=optionalParsedPath||PropertyBinding.parseTrackName(path);this._targetGroup=targetGroup,this._bindings=targetGroup.subscribe_(path,parsedPath)}function PropertyBinding(rootNode,path,parsedPath){this.path=path,this.parsedPath=parsedPath||PropertyBinding.parseTrackName(path),this.node=PropertyBinding.findNode(rootNode,this.parsedPath.nodeName)||rootNode,this.rootNode=rootNode}function AnimationObjectGroup(){this.uuid=_Math.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var indices={};this._indicesByUUID=indices;for(var i=0,n=arguments.length;i!==n;++i)indices[arguments[i].uuid]=i;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var scope=this;this.stats={objects:{get total(){return scope._objects.length},get inUse(){return this.total-scope.nCachedObjects_}},get bindingsPerObject(){return scope._bindings.length}}}function AnimationAction(mixer,clip,localRoot){this._mixer=mixer,this._clip=clip,this._localRoot=localRoot||null;for(var tracks=clip.tracks,nTracks=tracks.length,interpolants=new Array(nTracks),interpolantSettings={endingStart:2400,endingEnd:2400},i=0;i!==nTracks;++i){var interpolant=tracks[i].createInterpolant(null);interpolants[i]=interpolant,interpolant.settings=interpolantSettings}this._interpolantSettings=interpolantSettings,this._interpolants=interpolants,this._propertyBindings=new Array(nTracks),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function AnimationMixer(root){this._root=root,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function Uniform(value){"string"==typeof value&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),value=arguments[1]),this.value=value}function InstancedBufferGeometry(){BufferGeometry.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function InstancedInterleavedBuffer(array,stride,meshPerAttribute){InterleavedBuffer.call(this,array,stride),this.meshPerAttribute=meshPerAttribute||1}function InstancedBufferAttribute(array,itemSize,normalized,meshPerAttribute){"number"==typeof normalized&&(meshPerAttribute=normalized,normalized=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),BufferAttribute.call(this,array,itemSize,normalized),this.meshPerAttribute=meshPerAttribute||1}function Raycaster(origin,direction,near,far){this.ray=new Ray(origin,direction),this.near=near||0,this.far=far||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function ascSort(a,b){return a.distance-b.distance}function intersectObject(object,raycaster,intersects,recursive){if(!1!==object.visible&&(object.raycast(raycaster,intersects),!0===recursive))for(var children=object.children,i=0,l=children.length;i<l;i++)intersectObject(children[i],raycaster,intersects,!0)}function Spherical(radius,phi,theta){return this.radius=void 0!==radius?radius:1,this.phi=void 0!==phi?phi:0,this.theta=void 0!==theta?theta:0,this}function Cylindrical(radius,theta,y){return this.radius=void 0!==radius?radius:1,this.theta=void 0!==theta?theta:0,this.y=void 0!==y?y:0,this}function Box2(min,max){this.min=void 0!==min?min:new Vector2(1/0,1/0),this.max=void 0!==max?max:new Vector2(-1/0,-1/0)}function Line3(start,end){this.start=void 0!==start?start:new Vector3,this.end=void 0!==end?end:new Vector3}function ImmediateRenderObject(material){Object3D.call(this),this.material=material,this.render=function(){}}function VertexNormalsHelper(object,size,hex,linewidth){this.object=object,this.size=void 0!==size?size:1;var color=void 0!==hex?hex:16711680,width=void 0!==linewidth?linewidth:1,nNormals=0,objGeometry=this.object.geometry;objGeometry&&objGeometry.isGeometry?nNormals=3*objGeometry.faces.length:objGeometry&&objGeometry.isBufferGeometry&&(nNormals=objGeometry.attributes.normal.count);var geometry=new BufferGeometry,positions=new Float32BufferAttribute(2*nNormals*3,3);geometry.addAttribute("position",positions),LineSegments.call(this,geometry,new LineBasicMaterial({color:color,linewidth:width})),this.matrixAutoUpdate=!1,this.update()}function SpotLightHelper(light,color){Object3D.call(this),this.light=light,this.light.updateMatrixWorld(),this.matrix=light.matrixWorld,this.matrixAutoUpdate=!1,this.color=color;for(var geometry=new BufferGeometry,positions=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],i=0,j=1,l=32;i<l;i++,j++){var p1=i/l*Math.PI*2,p2=j/l*Math.PI*2;positions.push(Math.cos(p1),Math.sin(p1),1,Math.cos(p2),Math.sin(p2),1)}geometry.addAttribute("position",new Float32BufferAttribute(positions,3));var material=new LineBasicMaterial({fog:!1});this.cone=new LineSegments(geometry,material),this.add(this.cone),this.update()}function getBoneList(object){var boneList=[];object&&object.isBone&&boneList.push(object);for(var i=0;i<object.children.length;i++)boneList.push.apply(boneList,getBoneList(object.children[i]));return boneList}function SkeletonHelper(object){for(var bones=getBoneList(object),geometry=new BufferGeometry,vertices=[],colors=[],color1=new Color(0,0,1),color2=new Color(0,1,0),i=0;i<bones.length;i++){var bone=bones[i];bone.parent&&bone.parent.isBone&&(vertices.push(0,0,0),vertices.push(0,0,0),colors.push(color1.r,color1.g,color1.b),colors.push(color2.r,color2.g,color2.b))}geometry.addAttribute("position",new Float32BufferAttribute(vertices,3)),geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0});LineSegments.call(this,geometry,material),this.root=object,this.bones=bones,this.matrix=object.matrixWorld,this.matrixAutoUpdate=!1}function PointLightHelper(light,sphereSize,color){this.light=light,this.light.updateMatrixWorld(),this.color=color;var geometry=new SphereBufferGeometry(sphereSize,4,2),material=new MeshBasicMaterial({wireframe:!0,fog:!1});Mesh.call(this,geometry,material),this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}function RectAreaLightHelper(light,color){this.type="RectAreaLightHelper",this.light=light,this.color=color;var positions=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(positions,3)),geometry.computeBoundingSphere();var material=new LineBasicMaterial({fog:!1});Line.call(this,geometry,material);var positions2=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],geometry2=new BufferGeometry;geometry2.addAttribute("position",new Float32BufferAttribute(positions2,3)),geometry2.computeBoundingSphere(),this.add(new Mesh(geometry2,new MeshBasicMaterial({side:THREE.BackSide,fog:!1}))),this.update()}function HemisphereLightHelper(light,size,color){Object3D.call(this),this.light=light,this.light.updateMatrixWorld(),this.matrix=light.matrixWorld,this.matrixAutoUpdate=!1,this.color=color;var geometry=new OctahedronBufferGeometry(size);geometry.rotateY(.5*Math.PI),this.material=new MeshBasicMaterial({wireframe:!0,fog:!1}),void 0===this.color&&(this.material.vertexColors=2);var position=geometry.getAttribute("position"),colors=new Float32Array(3*position.count);geometry.addAttribute("color",new BufferAttribute(colors,3)),this.add(new Mesh(geometry,this.material)),this.update()}function GridHelper(size,divisions,color1,color2){size=size||10,divisions=divisions||10,color1=new Color(void 0!==color1?color1:4473924),color2=new Color(void 0!==color2?color2:8947848);for(var center=divisions/2,step=size/divisions,halfSize=size/2,vertices=[],colors=[],i=0,j=0,k=-halfSize;
vendor: 4,638 bytes, line 1
1i<=divisions;i++,k+=step){vertices.push(-halfSize,0,k,halfSize,0,k),vertices.push(k,0,-halfSize,k,0,halfSize);var color=i===center?color1:color2;color.toArray(colors,j),j+=3,color.toArray(colors,j),j+=3,color.toArray(colors,j),j+=3,color.toArray(colors,j),j+=3}var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(vertices,3)),geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:2});LineSegments.call(this,geometry,material)}function PolarGridHelper(radius,radials,circles,divisions,color1,color2){radius=radius||10,radials=radials||16,circles=circles||8,divisions=divisions||64,color1=new Color(void 0!==color1?color1:4473924),color2=new Color(void 0!==color2?color2:8947848);var vertices=[],colors=[],x,z,v,i,j,r,color;for(i=0;i<=radials;i++)v=i/radials*(2*Math.PI),x=Math.sin(v)*radius,z=Math.cos(v)*radius,vertices.push(0,0,0),vertices.push(x,0,z),color=1&i?color1:color2,colors.push(color.r,color.g,color.b),colors.push(color.r,color.g,color.b);for(i=0;i<=circles;i++)for(color=1&i?color1:color2,r=radius-radius/circles*i,j=0;j<divisions;j++)v=j/divisions*(2*Math.PI),x=Math.sin(v)*r,z=Math.cos(v)*r,vertices.push(x,0,z),colors.push(color.r,color.g,color.b),v=(j+1)/divisions*(2*Math.PI),x=Math.sin(v)*r,z=Math.cos(v)*r,vertices.push(x,0,z),colors.push(color.r,color.g,color.b);var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(vertices,3)),geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:2});LineSegments.call(this,geometry,material)}function FaceNormalsHelper(object,size,hex,linewidth){this.object=object,this.size=void 0!==size?size:1;var color=void 0!==hex?hex:16776960,width=void 0!==linewidth?linewidth:1,nNormals=0,objGeometry=this.object.geometry;objGeometry&&objGeometry.isGeometry?nNormals=objGeometry.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.");var geometry=new BufferGeometry,positions=new Float32BufferAttribute(2*nNormals*3,3);geometry.addAttribute("position",positions),LineSegments.call(this,geometry,new LineBasicMaterial({color:color,linewidth:width})),this.matrixAutoUpdate=!1,this.update()}function DirectionalLightHelper(light,size,color){Object3D.call(this),this.light=light,this.light.updateMatrixWorld(),this.matrix=light.matrixWorld,this.matrixAutoUpdate=!1,this.color=color,void 0===size&&(size=1);var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute([-size,size,0,size,size,0,size,-size,0,-size,-size,0,-size,size,0],3));var material=new LineBasicMaterial({fog:!1});this.lightPlane=new Line(geometry,material),this.add(this.lightPlane),(geometry=new BufferGeometry).addAttribute("position",new Float32BufferAttribute([0,0,0,0,0,1],3)),this.targetLine=new Line(geometry,material),this.add(this.targetLine),this.update()}function CameraHelper(camera){var geometry=new BufferGeometry,material=new LineBasicMaterial({color:16777215,vertexColors:1}),vertices=[],colors=[],pointMap={},colorFrustum=new Color(16755200),colorCone=new Color(16711680),colorUp=new Color(43775),colorTarget=new Color(16777215),colorCross=new Color(3355443);function addLine(a,b,color){addPoint(a,color),addPoint(b,color)}function addPoint(id,color){vertices.push(0,0,0),colors.push(color.r,color.g,color.b),void 0===pointMap[id]&&(pointMap[id]=[]),pointMap[id].push(vertices.length/3-1)}addLine("n1","n2",colorFrustum),addLine("n2","n4",colorFrustum),addLine("n4","n3",colorFrustum),addLine("n3","n1",colorFrustum),addLine("f1","f2",colorFrustum),addLine("f2","f4",colorFrustum),addLine("f4","f3",colorFrustum),addLine("f3","f1",colorFrustum),addLine("n1","f1",colorFrustum),addLine("n2","f2",colorFrustum),addLine("n3","f3",colorFrustum),addLine("n4","f4",colorFrustum),addLine("p","n1",colorCone),addLine("p","n2",colorCone),addLine("p","n3",colorCone),addLine("p","n4",colorCone),addLine("u1","u2",colorUp),addLine("u2","u3",colorUp),addLine("u3","u1",colorUp),addLine("c","t",colorTarget),addLine("p","c",colorCross),addLine("cn1","cn2",colorCross),addLine("cn3","cn4",colorCross),addLine("cf1","cf2",colorCross),addLine("cf3","cf4",colorCross),geometry.addAttribute("position",new Float32BufferAttribute(vertices,3)),geometry.addAttribute("color",new Float32BufferAttribute(colors,3)),LineSegments.call(this,geometry,material),this.camera=camera,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=camera.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=p
vendor: 13,080 bytes, line 1
1ointMap,this.update()}function BoxHelper(object,color){this.object=object,void 0===color&&(color=16776960);var indices=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),positions=new Float32Array(24),geometry=new BufferGeometry;geometry.setIndex(new BufferAttribute(indices,1)),geometry.addAttribute("position",new BufferAttribute(positions,3)),LineSegments.call(this,geometry,new LineBasicMaterial({color:color})),this.matrixAutoUpdate=!1,this.update()}function Box3Helper(box,hex){this.type="Box3Helper",this.box=box;var color=void 0!==hex?hex:16776960,indices=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),positions=[1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],geometry=new BufferGeometry;geometry.setIndex(new BufferAttribute(indices,1)),geometry.addAttribute("position",new Float32BufferAttribute(positions,3)),LineSegments.call(this,geometry,new LineBasicMaterial({color:color})),this.geometry.computeBoundingSphere()}function PlaneHelper(plane,size,hex){this.type="PlaneHelper",this.plane=plane,this.size=void 0===size?1:size;var color=void 0!==hex?hex:16776960,positions=[1,-1,1,-1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,1,0,0,1,0,0,0],geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(positions,3)),geometry.computeBoundingSphere(),Line.call(this,geometry,new LineBasicMaterial({color:color}));var positions2=[1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],geometry2=new BufferGeometry;geometry2.addAttribute("position",new Float32BufferAttribute(positions2,3)),geometry2.computeBoundingSphere(),this.add(new Mesh(geometry2,new MeshBasicMaterial({color:color,opacity:.2,transparent:!0,depthWrite:!1})))}function ArrowHelper(dir,origin,length,color,headLength,headWidth){Object3D.call(this),void 0===dir&&(dir=new THREE.Vector3(0,0,1)),void 0===origin&&(origin=new THREE.Vector3(0,0,0)),void 0===length&&(length=1),void 0===color&&(color=16776960),void 0===headLength&&(headLength=.2*length),void 0===headWidth&&(headWidth=.2*headLength),void 0===lineGeometry&&((lineGeometry=new BufferGeometry).addAttribute("position",new Float32BufferAttribute([0,0,0,0,1,0],3)),(coneGeometry=new CylinderBufferGeometry(0,.5,1,5,1)).translate(0,-.5,0)),this.position.copy(origin),this.line=new Line(lineGeometry,new LineBasicMaterial({color:color})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new Mesh(coneGeometry,new MeshBasicMaterial({color:color})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(dir),this.setLength(length,headLength,headWidth)}function AxesHelper(size){var vertices=[0,0,0,size=size||1,0,0,0,0,0,0,size,0,0,0,0,0,0,size],colors=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(vertices,3)),geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:2});LineSegments.call(this,geometry,material)}function Face4(a,b,c,d,normal,color,materialIndex){return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."),new Face3(a,b,c,normal,color,materialIndex)}Object.assign(Composite.prototype,{getValue:function(array,offset){this.bind();var firstValidIndex=this._targetGroup.nCachedObjects_,binding=this._bindings[firstValidIndex];void 0!==binding&&binding.getValue(array,offset)},setValue:function(array,offset){for(var bindings=this._bindings,i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i)bindings[i].setValue(array,offset)},bind:function(){for(var bindings=this._bindings,i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i)bindings[i].bind()},unbind:function(){for(var bindings=this._bindings,i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i)bindings[i].unbind()}}),Object.assign(PropertyBinding,{Composite:Composite,create:function(root,path,parsedPath){return root&&root.isAnimationObjectGroup?new PropertyBinding.Composite(root,path,parsedPath):new PropertyBinding(root,path,parsedPath)},sanitizeNodeName:(reservedRe=new RegExp("[\\[\\]\\.:\\/]","g"),function sanitizeNodeName(name){return name.replace(/\s/g,"_").replace(reservedRe,"")}),parseTrackName:(wordChar="[^\\[\\]\\.:\\/]",wordCharOrDot="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",directoryRe=/((?:WC+[\/:])*)/.source.replace("WC",wordChar),nodeRe=/(WCOD+)?/.source.replace("WCOD",wordCharOrDot),objectRe=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",wordChar),propertyRe=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",wordChar),trackRe=new RegExp("^"+directoryRe+nodeRe+objectRe+propertyRe+"$"),supportedObjectNames=["material","materials","bones"],function parseTrackName(trackName){var matches=trackRe.exec(trackName);if(!matches)throw new Error("PropertyBinding: Cannot parse trackName: "+trackName);var results={nodeName:matches[2],objectName:matches[3],objectIndex:matches[4],propertyName:matches[5],propertyIndex:matches[6]},lastDot=results.nodeName&&results.nodeName.lastIndexOf(".");if(void 0!==lastDot&&-1!==lastDot){var objectName=results.nodeName.substring(lastDot+1);-1!==supportedObjectNames.indexOf(objectName)&&(results.nodeName=results.nodeName.substring(0,lastDot),results.objectName=objectName)}if(null===results.propertyName||0===results.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+trackName);return results}),findNode:function(root,nodeName){if(!nodeName||""===nodeName||"root"===nodeName||"."===nodeName||-1===nodeName||nodeName===root.name||nodeName===root.uuid)return root;if(root.skeleton){var bone=root.skeleton.getBoneByName(nodeName);if(void 0!==bone)return bone}if(root.children){var searchNodeSubtree=function(children){for(var i=0;i<children.length;i++){var childNode=children[i];if(childNode.name===nodeName||childNode.uuid===nodeName)return childNode;var result=searchNodeSubtree(childNode.children);if(result)return result}return null},subTreeNode=searchNodeSubtree(root.children);if(subTreeNode)return subTreeNode}return null}}),Object.assign(PropertyBinding.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function getValue_direct(buffer,offset){buffer[offset]=this.node[this.propertyName]},function getValue_array(buffer,offset){for(var source=this.resolvedProperty,i=0,n=source.length;i!==n;++i)buffer[offset++]=source[i]},function getValue_arrayElement(buffer,offset){buffer[offset]=this.resolvedProperty[this.propertyIndex]},function getValue_toArray(buffer,offset){this.resolvedProperty.toArray(buffer,offset)}],SetterByBindingTypeAndVersioning:[[function setValue_direct(buffer,offset){this.targetObject[this.propertyName]=buffer[offset]},function setValue_direct_setNeedsUpdate(buffer,offset){this.targetObject[this.propertyName]=buffer[offset],this.targetObject.needsUpdate=!0},function setValue_direct_setMatrixWorldNeedsUpdate(buffer,offset){this.targetObject[this.propertyName]=buffer[offset],this.targetObject.matrixWorldNeedsUpdate=!0}],[function setValue_array(buffer,offset){for(var dest=this.resolvedProperty,i=0,n=dest.length;i!==n;++i)dest[i]=buffer[offset++]},function setValue_array_setNeedsUpdate(buffer,offset){for(var dest=this.resolvedProperty,i=0,n=dest.length;i!==n;++i)dest[i]=buffer[offset++];this.targetObject.needsUpdate=!0},function setValue_array_setMatrixWorldNeedsUpdate(buffer,offset){for(var dest=this.resolvedProperty,i=0,n=dest.length;i!==n;++i)dest[i]=buffer[offset++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function setValue_arrayElement(buffer,offset){this.resolvedProperty[this.propertyIndex]=buffer[offset]},function setValue_arrayElement_setNeedsUpdate(buffer,offset){this.resolvedProperty[this.propertyIndex]=buffer[offset],this.targetObject.needsUpdate=!0},function setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer,offset){this.resolvedProperty[this.propertyIndex]=buffer[offset],this.targetObject.matrixWorldNeedsUpdate=!0}],[function setValue_fromArray(buffer,offset){this.resolvedProperty.fromArray(buffer,offset)},function setValue_fromArray_setNeedsUpdate(buffer,offset){this.resolvedProperty.fromArray(buffer,offset),this.targetObject.needsUpdate=!0},function setValue_fromArray_setMatrixWorldNeedsUpdate(buffer,offset){this.resolvedProperty.fromArray(buffer,offset),this.targetObject.matrixWorldNeedsUpdate=!0}]],getValue:function getValue_unbound(targetArray,offset){this.bind(),this.getValue(targetArray,offset)},setValue:function getValue_unbound(sourceArray,offset){this.bind(),this.setValue(sourceArray,offset)},bind:function(){var targetObject=this.node,parsedPath=this.parsedPath,objectName=parsedPath.objectName,propertyName=parsedPath.propertyName,propertyIndex=parsedPath.propertyIndex;if(targetObject||(targetObject=PropertyBinding.findNode(this.rootNode,parsedPath.nodeName)||this.rootNode,this.node=targetObject),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,targetObject){if(objectName){var objectIndex=parsedPath.objectIndex;switch(objectName){case"materials":if(!targetObject.material)return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);if(!targetObject.material.materials)return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);targetObject=targetObject.material.materials;break;case"bones":if(!targetObject.skeleton)return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);targetObject=targetObject.skeleton.bones;for(var i=0;i<targetObject.length;i++)if(targetObject[i].name===objectIndex){objectIndex=i;break}break;default:if(void 0===targetObject[objectName])return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);targetObject=targetObject[objectName]}if(void 0!==objectIndex){if(void 0===targetObject[objectIndex])return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,targetObject);targetObject=targetObject[objectIndex]}}var nodeProperty=targetObject[propertyName];if(void 0!==nodeProperty){var versioning=this.Versioning.None;this.targetObject=targetObject,void 0!==targetObject.needsUpdate?versioning=this.Versioning.NeedsUpdate:void 0!==targetObject.matrixWorldNeedsUpdate&&(versioning=this.Versioning.MatrixWorldNeedsUpdate);var bindingType=this.BindingType.Direct;if(void 0!==propertyIndex){if("morphTargetInfluences"===propertyName){if(!targetObject.geometry)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);if(targetObject.geometry.isBufferGeometry){if(!targetObject.geometry.morphAttributes)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);for(var i=0;i<this.node.geometry.morphAttributes.position.length;i++)if(targetObject.geometry.morphAttributes.position[i].name===propertyIndex){propertyIndex=i;break}}else{if(!targetObject.geometry.morphTargets)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.",this);for(var i=0;i<this.node.geometry.morphTargets.length;i++)if(targetObject.geometry.morphTargets[i].name===propertyIndex){propertyIndex=i;break}}}bindingType=this.BindingType.ArrayElement,this.resolvedProperty=nodeProperty,this.propertyIndex=propertyIndex}else void 0!==nodeProperty.fromArray&&void 0!==nodeProperty.toArray?(bindingType=this.BindingType.HasFromToArray,this.resolvedProperty=nodeProperty):Array.isArray(nodeProperty)?(bindingType=this.BindingType.EntireArray,this.resolvedProperty=nodeProperty):this.propertyName=propertyName;this.getValue=this.GetterByBindingType[bindingType],this.setValue=this.SetterByBindingTypeAndVersioning[bindingType][versioning]}else{var nodeName=parsedPath.nodeName;console.error("THREE.PropertyBinding: Trying to update property for track: "+nodeName+"."+propertyName+" but it wasn't found.",targetObject)}}else console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}),Object.assign(PropertyBinding.prototype,{_getValue_unbound:PropertyBinding.prototype.getValue,_setValue_unbound:PropertyBinding.prototype.setValue}),Object.assign(AnimationObjectGroup.prototype,{isAnimationObjectGroup:!0,add:function(){for(var objects=this._objects,nObjects=objects.length,nCachedObjects=this.nCachedObjects_,indicesByUUID=this._indicesByUUID,paths=this._paths,parsedPaths=this._parsedPaths,bindings=this._bindings,nBindings=bindings.length,knownObject=void 0,i=0,n=arguments.length;i!==n;++i){var object=arguments[i],uuid=object.uuid,index=indicesByUUID[uuid];
vendor: 27,250 bytes, line 1
1if(void 0===index){index=nObjects++,indicesByUUID[uuid]=index,objects.push(object);for(var j=0,m=nBindings;j!==m;++j)bindings[j].push(new PropertyBinding(object,paths[j],parsedPaths[j]))}else if(index<nCachedObjects){knownObject=objects[index];var firstActiveIndex=--nCachedObjects,lastCachedObject=objects[firstActiveIndex];indicesByUUID[lastCachedObject.uuid]=index,objects[index]=lastCachedObject,indicesByUUID[uuid]=firstActiveIndex,objects[firstActiveIndex]=object;for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath=bindings[j],lastCached=bindingsForPath[firstActiveIndex],binding=bindingsForPath[index];bindingsForPath[index]=lastCached,void 0===binding&&(binding=new PropertyBinding(object,paths[j],parsedPaths[j])),bindingsForPath[firstActiveIndex]=binding}}else objects[index]!==knownObject&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=nCachedObjects},remove:function(){for(var objects=this._objects,nCachedObjects=this.nCachedObjects_,indicesByUUID=this._indicesByUUID,bindings=this._bindings,nBindings=bindings.length,i=0,n=arguments.length;i!==n;++i){var object=arguments[i],uuid=object.uuid,index=indicesByUUID[uuid];if(void 0!==index&&index>=nCachedObjects){var lastCachedIndex=nCachedObjects++,firstActiveObject=objects[lastCachedIndex];indicesByUUID[firstActiveObject.uuid]=index,objects[index]=firstActiveObject,indicesByUUID[uuid]=lastCachedIndex,objects[lastCachedIndex]=object;for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath=bindings[j],firstActive=bindingsForPath[lastCachedIndex],binding=bindingsForPath[index];bindingsForPath[index]=firstActive,bindingsForPath[lastCachedIndex]=binding}}}this.nCachedObjects_=nCachedObjects},uncache:function(){for(var objects=this._objects,nObjects=objects.length,nCachedObjects=this.nCachedObjects_,indicesByUUID=this._indicesByUUID,bindings=this._bindings,nBindings=bindings.length,i=0,n=arguments.length;i!==n;++i){var object=arguments[i],uuid=object.uuid,index=indicesByUUID[uuid];if(void 0!==index)if(delete indicesByUUID[uuid],index<nCachedObjects){var firstActiveIndex=--nCachedObjects,lastCachedObject=objects[firstActiveIndex],lastIndex,lastObject=objects[lastIndex=--nObjects];indicesByUUID[lastCachedObject.uuid]=index,objects[index]=lastCachedObject,indicesByUUID[lastObject.uuid]=firstActiveIndex,objects[firstActiveIndex]=lastObject,objects.pop();for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath,lastCached=(bindingsForPath=bindings[j])[firstActiveIndex],last=bindingsForPath[lastIndex];bindingsForPath[index]=lastCached,bindingsForPath[firstActiveIndex]=last,bindingsForPath.pop()}}else{var lastIndex,lastObject;indicesByUUID[(lastObject=objects[lastIndex=--nObjects]).uuid]=index,objects[index]=lastObject,objects.pop();for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath;(bindingsForPath=bindings[j])[index]=bindingsForPath[lastIndex],bindingsForPath.pop()}}}this.nCachedObjects_=nCachedObjects},subscribe_:function(path,parsedPath){var indicesByPath=this._bindingsIndicesByPath,index=indicesByPath[path],bindings=this._bindings;if(void 0!==index)return bindings[index];var paths=this._paths,parsedPaths=this._parsedPaths,objects=this._objects,nObjects=objects.length,nCachedObjects=this.nCachedObjects_,bindingsForPath=new Array(nObjects);index=bindings.length,indicesByPath[path]=index,paths.push(path),parsedPaths.push(parsedPath),bindings.push(bindingsForPath);for(var i=nCachedObjects,n=objects.length;i!==n;++i){var object=objects[i];bindingsForPath[i]=new PropertyBinding(object,path,parsedPath)}return bindingsForPath},unsubscribe_:function(path){var indicesByPath=this._bindingsIndicesByPath,index=indicesByPath[path];if(void 0!==index){var paths=this._paths,parsedPaths=this._parsedPaths,bindings=this._bindings,lastBindingsIndex=bindings.length-1,lastBindings=bindings[lastBindingsIndex],lastBindingsPath;indicesByPath[path[lastBindingsIndex]]=index,bindings[index]=lastBindings,bindings.pop(),parsedPaths[index]=parsedPaths[lastBindingsIndex],parsedPaths.pop(),paths[index]=paths[lastBindingsIndex],paths.pop()}}}),Object.assign(AnimationAction.prototype,{play:function(){return this._mixer._activateAction(this),this},stop:function(){return this._mixer._deactivateAction(this),this.reset()},reset:function(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(time){return this._startTime=time,this},setLoop:function(mode,repetitions){return this.loop=mode,this.repetitions=repetitions,this},setEffectiveWeight:function(weight){return this.weight=weight,this._effectiveWeight=this.enabled?weight:0,this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(duration){return this._scheduleFading(duration,0,1)},fadeOut:function(duration){return this._scheduleFading(duration,1,0)},crossFadeFrom:function(fadeOutAction,duration,warp){if(fadeOutAction.fadeOut(duration),this.fadeIn(duration),warp){var fadeInDuration=this._clip.duration,fadeOutDuration=fadeOutAction._clip.duration,startEndRatio=fadeOutDuration/fadeInDuration,endStartRatio=fadeInDuration/fadeOutDuration;fadeOutAction.warp(1,startEndRatio,duration),this.warp(endStartRatio,1,duration)}return this},crossFadeTo:function(fadeInAction,duration,warp){return fadeInAction.crossFadeFrom(this,duration,warp)},stopFading:function(){var weightInterpolant=this._weightInterpolant;return null!==weightInterpolant&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(weightInterpolant)),this},setEffectiveTimeScale:function(timeScale){return this.timeScale=timeScale,this._effectiveTimeScale=this.paused?0:timeScale,this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(duration){return this.timeScale=this._clip.duration/duration,this.stopWarping()},syncWith:function(action){return this.time=action.time,this.timeScale=action.timeScale,this.stopWarping()},halt:function(duration){return this.warp(this._effectiveTimeScale,0,duration)},warp:function(startTimeScale,endTimeScale,duration){var mixer=this._mixer,now=mixer.time,interpolant=this._timeScaleInterpolant,timeScale=this.timeScale;null===interpolant&&(interpolant=mixer._lendControlInterpolant(),this._timeScaleInterpolant=interpolant);var times=interpolant.parameterPositions,values=interpolant.sampleValues;return times[0]=now,times[1]=now+duration,values[0]=startTimeScale/timeScale,values[1]=endTimeScale/timeScale,this},stopWarping:function(){var timeScaleInterpolant=this._timeScaleInterpolant;return null!==timeScaleInterpolant&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(timeScaleInterpolant)),this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(time,deltaTime,timeDirection,accuIndex){if(this.enabled){var startTime=this._startTime;if(null!==startTime){var timeRunning=(time-startTime)*timeDirection;if(timeRunning<0||0===timeDirection)return;this._startTime=null,deltaTime=timeDirection*timeRunning}deltaTime*=this._updateTimeScale(time);var clipTime=this._updateTime(deltaTime),weight=this._updateWeight(time);if(weight>0)for(var interpolants=this._interpolants,propertyMixers=this._propertyBindings,j=0,m=interpolants.length;j!==m;++j)interpolants[j].evaluate(clipTime),propertyMixers[j].accumulate(accuIndex,weight)}else this._updateWeight(time)},_updateWeight:function(time){var weight=0;if(this.enabled){weight=this.weight;var interpolant=this._weightInterpolant;if(null!==interpolant){var interpolantValue=interpolant.evaluate(time)[0];weight*=interpolantValue,time>interpolant.parameterPositions[1]&&(this.stopFading(),0===interpolantValue&&(this.enabled=!1))}}return this._effectiveWeight=weight,weight},_updateTimeScale:function(time){var timeScale=0;if(!this.paused){timeScale=this.timeScale;var interpolant=this._timeScaleInterpolant,interpolantValue;if(null!==interpolant)timeScale*=interpolant.evaluate(time)[0],time>interpolant.parameterPositions[1]&&(this.stopWarping(),0===timeScale?this.paused=!0:this.timeScale=timeScale)}return this._effectiveTimeScale=timeScale,timeScale},_updateTime:function(deltaTime){var time=this.time+deltaTime,duration=this._clip.duration,loop=this.loop,loopCount=this._loopCount,pingPong=2202===loop;if(0===deltaTime)return-1===loopCount?time:pingPong&&1==(1&loopCount)?duration-time:time;if(2200===loop){-1===loopCount&&(this._loopCount=0,this._setEndings(!0,!0,!1));handle_stop:{if(time>=duration)time=duration;else{if(!(time<0))break handle_stop;time=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:deltaTime<0?-1:1})}}else{if(-1===loopCount&&(deltaTime>=0?(loopCount=0,this._setEndings(!0,0===this.repetitions,pingPong)):this._setEndings(0===this.repetitions,!0,pingPong)),time>=duration||time<0){var loopDelta=Math.floor(time/duration);time-=duration*loopDelta,loopCount+=Math.abs(loopDelta);var pending=this.repetitions-loopCount;if(pending<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,time=deltaTime>0?duration:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:deltaTime>0?1:-1});else{if(1===pending){var atStart=deltaTime<0;this._setEndings(atStart,!atStart,pingPong)}else this._setEndings(!1,!1,pingPong);this._loopCount=loopCount,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:loopDelta})}}if(pingPong&&1==(1&loopCount))return this.time=time,duration-time}return this.time=time,time},_setEndings:function(atStart,atEnd,pingPong){var settings=this._interpolantSettings;pingPong?(settings.endingStart=2401,settings.endingEnd=2401):(settings.endingStart=atStart?this.zeroSlopeAtStart?2401:2400:2402,settings.endingEnd=atEnd?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(duration,weightNow,weightThen){var mixer=this._mixer,now=mixer.time,interpolant=this._weightInterpolant;null===interpolant&&(interpolant=mixer._lendControlInterpolant(),this._weightInterpolant=interpolant);var times=interpolant.parameterPositions,values=interpolant.sampleValues;return times[0]=now,values[0]=weightNow,times[1]=now+duration,values[1]=weightThen,this}}),AnimationMixer.prototype=Object.assign(Object.create(EventDispatcher.prototype),{constructor:AnimationMixer,_bindAction:function(action,prototypeAction){var root=action._localRoot||this._root,tracks=action._clip.tracks,nTracks=tracks.length,bindings=action._propertyBindings,interpolants=action._interpolants,rootUuid=root.uuid,bindingsByRoot=this._bindingsByRootAndName,bindingsByName=bindingsByRoot[rootUuid];void 0===bindingsByName&&(bindingsByName={},bindingsByRoot[rootUuid]=bindingsByName);for(var i=0;i!==nTracks;++i){var track=tracks[i],trackName=track.name,binding=bindingsByName[trackName];if(void 0!==binding)bindings[i]=binding;else{if(void 0!==(binding=bindings[i])){null===binding._cacheIndex&&(++binding.referenceCount,this._addInactiveBinding(binding,rootUuid,trackName));continue}var path=prototypeAction&&prototypeAction._propertyBindings[i].binding.parsedPath;++(binding=new PropertyMixer(PropertyBinding.create(root,trackName,path),track.ValueTypeName,track.getValueSize())).referenceCount,this._addInactiveBinding(binding,rootUuid,trackName),bindings[i]=binding}interpolants[i].resultBuffer=binding.buffer}},_activateAction:function(action){if(!this._isActiveAction(action)){if(null===action._cacheIndex){var rootUuid=(action._localRoot||this._root).uuid,clipUuid=action._clip.uuid,actionsForClip=this._actionsByClip[clipUuid];this._bindAction(action,actionsForClip&&actionsForClip.knownActions[0]),this._addInactiveAction(action,clipUuid,rootUuid)}for(var bindings=action._propertyBindings,i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];0==binding.useCount++&&(this._lendBinding(binding),binding.saveOriginalState())}this._lendAction(action)}},_deactivateAction:function(action){if(this._isActiveAction(action)){for(var bindings=action._propertyBindings,i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];0==--binding.useCount&&(binding.restoreOriginalState(),this._takeBackBinding(binding))}this._takeBackAction(action)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var scope=this;this.stats={actions:{get total(){return scope._actions.length},get inUse(){return scope._nActiveActions}},bindings:{get total(){return scope._bindings.length},get inUse(){return scope._nActiveBindings}},controlInterpolants:{get total(){return scope._controlInterpolants.length},get inUse(){return scope._nActiveControlInterpolants}}}},_isActiveAction:function(action){var index=action._cacheIndex;return null!==index&&index<this._nActiveActions},_addInactiveAction:function(action,clipUuid,rootUuid){var actions=this._actions,actionsByClip=this._actionsByClip,actionsForClip=actionsByClip[clipUuid];if(void 0===actionsForClip)actionsForClip={knownActions:[action],actionByRoot:{}},action._byClipCacheIndex=0,actionsByClip[clipUuid]=actionsForClip;else{var knownActions=actionsForClip.knownActions;action._byClipCacheIndex=knownActions.length,knownActions.push(action)}action._cacheIndex=actions.length,actions.push(action),actionsForClip.actionByRoot[rootUuid]=action},_removeInactiveAction:function(action){var actions=this._actions,lastInactiveAction=actions[actions.length-1],cacheIndex=action._cacheIndex;lastInactiveAction._cacheIndex=cacheIndex,actions[cacheIndex]=lastInactiveAction,actions.pop(),action._cacheIndex=null;var clipUuid=action._clip.uuid,actionsByClip=this._actionsByClip,actionsForClip=actionsByClip[clipUuid],knownActionsForClip=actionsForClip.knownActions,lastKnownAction=knownActionsForClip[knownActionsForClip.length-1],byClipCacheIndex=action._byClipCacheIndex,actionByRoot,rootUuid;lastKnownAction._byClipCacheIndex=byClipCacheIndex,knownActionsForClip[byClipCacheIndex]=lastKnownAction,knownActionsForClip.pop(),action._byClipCacheIndex=null,delete actionsForClip.actionByRoot[(action._localRoot||this._root).uuid],0===knownActionsForClip.length&&delete actionsByClip[clipUuid],this._removeInactiveBindingsForAction(action)},_removeInactiveBindingsForAction:function(action){for(var bindings=action._propertyBindings,i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];0==--binding.referenceCount&&this._removeInactiveBinding(binding)}},_lendAction:function(action){var actions=this._actions,prevIndex=action._cacheIndex,lastActiveIndex=this._nActiveActions++,firstInactiveAction=actions[lastActiveIndex];action._cacheIndex=lastActiveIndex,actions[lastActiveIndex]=action,firstInactiveAction._cacheIndex=prevIndex,actions[prevIndex]=firstInactiveAction},_takeBackAction:function(action){var actions=this._actions,prevIndex=action._cacheIndex,firstInactiveIndex=--this._nActiveActions,lastActiveAction=actions[firstInactiveIndex];action._cacheIndex=firstInactiveIndex,actions[firstInactiveIndex]=action,lastActiveAction._cacheIndex=prevIndex,actions[prevIndex]=lastActiveAction},_addInactiveBinding:function(binding,rootUuid,trackName){var bindingsByRoot=this._bindingsByRootAndName,bindingByName=bindingsByRoot[rootUuid],bindings=this._bindings;void 0===bindingByName&&(bindingByName={},bindingsByRoot[rootUuid]=bindingByName),bindingByName[trackName]=binding,binding._cacheIndex=bindings.length,bindings.push(binding)},_removeInactiveBinding:function(binding){var bindings=this._bindings,propBinding=binding.binding,rootUuid=propBinding.rootNode.uuid,trackName=propBinding.path,bindingsByRoot=this._bindingsByRootAndName,bindingByName=bindingsByRoot[rootUuid],lastInactiveBinding=bindings[bindings.length-1],cacheIndex=binding._cacheIndex;lastInactiveBinding._cacheIndex=cacheIndex,bindings[cacheIndex]=lastInactiveBinding,bindings.pop(),delete bindingByName[trackName];remove_empty_map:{for(var _ in bindingByName)break remove_empty_map;delete bindingsByRoot[rootUuid]}},_lendBinding:function(binding){var bindings=this._bindings,prevIndex=binding._cacheIndex,lastActiveIndex=this._nActiveBindings++,firstInactiveBinding=bindings[lastActiveIndex];binding._cacheIndex=lastActiveIndex,bindings[lastActiveIndex]=binding,firstInactiveBinding._cacheIndex=prevIndex,bindings[prevIndex]=firstInactiveBinding},_takeBackBinding:function(binding){var bindings=this._bindings,prevIndex=binding._cacheIndex,firstInactiveIndex=--this._nActiveBindings,lastActiveBinding=bindings[firstInactiveIndex];binding._cacheIndex=firstInactiveIndex,bindings[firstInactiveIndex]=binding,lastActiveBinding._cacheIndex=prevIndex,bindings[prevIndex]=lastActiveBinding},_lendControlInterpolant:function(){var interpolants=this._controlInterpolants,lastActiveIndex=this._nActiveControlInterpolants++,interpolant=interpolants[lastActiveIndex];return void 0===interpolant&&((interpolant=new LinearInterpolant(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer)).__cacheIndex=lastActiveIndex,interpolants[lastActiveIndex]=interpolant),interpolant},_takeBackControlInterpolant:function(interpolant){var interpolants=this._controlInterpolants,prevIndex=interpolant.__cacheIndex,firstInactiveIndex=--this._nActiveControlInterpolants,lastActiveInterpolant=interpolants[firstInactiveIndex];interpolant.__cacheIndex=firstInactiveIndex,interpolants[firstInactiveIndex]=interpolant,lastActiveInterpolant.__cacheIndex=prevIndex,interpolants[prevIndex]=lastActiveInterpolant},_controlInterpolantsResultBuffer:new Float32Array(1),clipAction:function(clip,optionalRoot){var root=optionalRoot||this._root,rootUuid=root.uuid,clipObject="string"==typeof clip?AnimationClip.findByName(root,clip):clip,clipUuid=null!==clipObject?clipObject.uuid:clip,actionsForClip=this._actionsByClip[clipUuid],prototypeAction=null;if(void 0!==actionsForClip){var existingAction=actionsForClip.actionByRoot[rootUuid];if(void 0!==existingAction)return existingAction;prototypeAction=actionsForClip.knownActions[0],null===clipObject&&(clipObject=prototypeAction._clip)}if(null===clipObject)return null;var newAction=new AnimationAction(this,clipObject,optionalRoot);return this._bindAction(newAction,prototypeAction),this._addInactiveAction(newAction,clipUuid,rootUuid),newAction},existingAction:function(clip,optionalRoot){var root=optionalRoot||this._root,rootUuid=root.uuid,clipObject="string"==typeof clip?AnimationClip.findByName(root,clip):clip,clipUuid=clipObject?clipObject.uuid:clip,actionsForClip=this._actionsByClip[clipUuid];return void 0!==actionsForClip&&actionsForClip.actionByRoot[rootUuid]||null},stopAllAction:function(){var actions=this._actions,nActions=this._nActiveActions,bindings=this._bindings,nBindings=this._nActiveBindings;this._nActiveActions=0,this._nActiveBindings=0;for(var i=0;i!==nActions;++i)actions[i].reset();for(var i=0;i!==nBindings;++i)bindings[i].useCount=0;return this},update:function(deltaTime){deltaTime*=this.timeScale;for(var actions=this._actions,nActions=this._nActiveActions,time=this.time+=deltaTime,timeDirection=Math.sign(deltaTime),accuIndex=this._accuIndex^=1,i=0;i!==nActions;++i){var action;actions[i]._update(time,deltaTime,timeDirection,accuIndex)}for(var bindings=this._bindings,nBindings=this._nActiveBindings,i=0;i!==nBindings;++i)bindings[i].apply(accuIndex);return this},getRoot:function(){return this._root},uncacheClip:function(clip){var actions=this._actions,clipUuid=clip.uuid,actionsByClip=this._actionsByClip,actionsForClip=actionsByClip[clipUuid];if(void 0!==actionsForClip){for(var actionsToRemove=actionsForClip.knownActions,i=0,n=actionsToRemove.length;i!==n;++i){var action=actionsToRemove[i];this._deactivateAction(action);var cacheIndex=action._cacheIndex,lastInactiveAction=actions[actions.length-1];action._cacheIndex=null,action._byClipCacheIndex=null,lastInactiveAction._cacheIndex=cacheIndex,actions[cacheIndex]=lastInactiveAction,actions.pop(),this._removeInactiveBindingsForAction(action)}delete actionsByClip[clipUuid]}},uncacheRoot:function(root){var rootUuid=root.uuid,actionsByClip=this._actionsByClip;for(var clipUuid in actionsByClip){var actionByRoot,action=actionsByClip[clipUuid].actionByRoot[rootUuid];void 0!==action&&(this._deactivateAction(action),this._removeInactiveAction(action))}var bindingsByRoot,bindingByName=this._bindingsByRootAndName[rootUuid];if(void 0!==bindingByName)for(var trackName in bindingByName){var binding=bindingByName[trackName];binding.restoreOriginalState(),this._removeInactiveBinding(binding)}},uncacheAction:function(clip,optionalRoot){var action=this.existingAction(clip,optionalRoot);null!==action&&(this._deactivateAction(action),this._removeInactiveAction(action))}}),Uniform.prototype.clone=function(){return new Uniform(void 0===this.value.clone?this.value:this.value.clone())},InstancedBufferGeometry.prototype=Object.assign(Object.create(BufferGeometry.prototype),{constructor:InstancedBufferGeometry,isInstancedBufferGeometry:!0,copy:function(source){return BufferGeometry.prototype.copy.call(this,source),this.maxInstancedCount=source.maxInstancedCount,this},clone:function(){return(new this.constructor).copy(this)}}),InstancedInterleavedBuffer.prototype=Object.assign(Object.create(InterleavedBuffer.prototype),{constructor:InstancedInterleavedBuffer,isInstancedInterleavedBuffer:!0,copy:function(source){return InterleavedBuffer.prototype.copy.call(this,source),this.meshPerAttribute=source.meshPerAttribute,this}}),InstancedBufferAttribute.prototype=Object.assign(Object.create(BufferAttribute.prototype),{constructor:InstancedBufferAttribute,isInstancedBufferAttribute:!0,copy:function(source){return BufferAttribute.prototype.copy.call(this,source),this.meshPerAttribute=source.meshPerAttribute,this}}),Object.assign(Raycaster.prototype,{linePrecision:1,set:function(origin,direction){this.ray.set(origin,direction)},setFromCamera:function(coords,camera){camera&&camera.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(camera.matrixWorld),this.ray.direction.set(coords.x,coords.y,.5).unproject(camera).sub(this.ray.origin).normalize()):camera&&camera.isOrthographicCamera?(this.ray.origin.set(coords.x,coords.y,(camera.near+camera.far)/(camera.near-camera.far)).unproject(camera),this.ray.direction.set(0,0,-1).transformDirection(camera.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(object,recursive,optionalTarget){var intersects=optionalTarget||[];return intersectObject(object,this,intersects,recursive),intersects.sort(ascSort),intersects},intersectObjects:function(objects,recursive,optionalTarget){var intersects=optionalTarget||[];if(!1===Array.isArray(objects))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),intersects;for(var i=0,l=objects.length;i<l;i++)intersectObject(objects[i],this,intersects,recursive);return intersects.sort(ascSort),intersects}}),Object.assign(Spherical.prototype,{set:function(radius,phi,theta){return this.radius=radius,this.phi=phi,this.theta=theta,this},clone:function(){return(new this.constructor).copy(this)},copy:function(other){return this.radius=other.radius,this.phi=other.phi,this.theta=other.theta,this},makeSafe:function(){var EPS=1e-6;return this.phi=Math.max(EPS,Math.min(Math.PI-EPS,this.phi)),this},setFromVector3:function(v){return this.setFromCartesianCoords(v.x,v.y,v.z)},setFromCartesianCoords:function(x,y,z){return this.radius=Math.sqrt(x*x+y*y+z*z),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(x,z),this.phi=Math.acos(_Math.clamp(y/this.radius,-1,1))),this}}),Object.assign(Cylindrical.prototype,{set:function(radius,theta,y){return this.radius=radius,this.theta=theta,this.y=y,this},clone:function(){return(new this.constructor).copy(this)},copy:function(other){return this.radius=other.radius,this.theta=other.theta,this.y=other.y,this},setFromVector3:function(v){return this.setFromCartesianCoords(v.x,v.y,v.z)},setFromCartesianCoords:function(x,y,z){return this.radius=Math.sqrt(x*x+z*z),this.theta=Math.atan2(x,z),this.y=y,this}}),Object.assign(Box2.prototype,{set:function(min,max){return this.min.copy(min),this.max.copy(max),this},setFromPoints:function(points){this.makeEmpty();for(var i=0,il=points.length;i<il;i++)this.expandByPoint(points[i]);return this},setFromCenterAndSize:function(){var v1=new Vector2;return function setFromCenterAndSize(center,size){var halfSize=v1.copy(size).multiplyScalar(.5);return this.min.copy(center).sub(halfSize),this.max.copy(center).add(halfSize),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(box){return this.min.copy(box.min),this.max.copy(box.max),this},makeEmpty:function(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(target){return void 0===target&&(console.warn("THREE.Box2: .getCenter() target is now required"),target=new Vector2),this.isEmpty()?target.set(0,0):target.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(target){return void 0===target&&(console.warn("THREE.Box2: .getSize() target is now required"),target=new Vector2),this.isEmpty()?target.set(0,0):target.subVectors(this.max,this.min)},expandByPoint:function(point){return this.min.min(point),this.max.max(point),this},expandByVector:function(vector){return this.min.sub(vector),this.max.add(vector),this},expandByScalar:function(scalar){return this.min.addScalar(-scalar),this.max.addScalar(scalar),this},containsPoint:function(point){return!(point.x<this.min.x||point.x>this.max.x||point.y<this.min.y||point.y>this.max.y)},containsBox:function(box){return this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y},getParameter:function(point,target){return void 0===target&&(console.warn("THREE.Box2: .getParameter() target is now required"),target=new Vector2),target.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(box){return!(box.max.x<this.min.x||box.min.x>this.max.x||box.max.y<this.min.y||box.min.y>this.max.y)},clampPoint:function(point,target){return void 0===target&&(console.warn("THREE.Box2: .clampPoint() target is now required"),target=new Vector2),target.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new Vector2;return function distanceToPoint(point){var clampedPoint;return v1.copy(point).clamp(this.min,this.max).sub(point).length()}}(),intersect:function(box){return this.min.max(box.min),this.max.min(box.max),this},union:function(box){return this.min.min(box.min),this.max.max(box.max),this},translate:function(offset){return this.min.add(offset),this.max.add(offset),this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}}),Object.assign(Line3.prototype,{set:function(start,end){return this.start.copy(start),this.end.copy(en
vendor: 4,470 bytes, line 1
1d),this},clone:function(){return(new this.constructor).copy(this)},copy:function(line){return this.start.copy(line.start),this.end.copy(line.end),this},getCenter:function(target){return void 0===target&&(console.warn("THREE.Line3: .getCenter() target is now required"),target=new Vector3),target.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(target){return void 0===target&&(console.warn("THREE.Line3: .delta() target is now required"),target=new Vector3),target.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,target){return void 0===target&&(console.warn("THREE.Line3: .at() target is now required"),target=new Vector3),this.delta(target).multiplyScalar(t).add(this.start)},closestPointToPointParameter:(startP=new Vector3,startEnd=new Vector3,function closestPointToPointParameter(point,clampToLine){startP.subVectors(point,this.start),startEnd.subVectors(this.end,this.start);var startEnd2=startEnd.dot(startEnd),startEnd_startP,t=startEnd.dot(startP)/startEnd2;return clampToLine&&(t=_Math.clamp(t,0,1)),t}),closestPointToPoint:function(point,clampToLine,target){var t=this.closestPointToPointParameter(point,clampToLine);return void 0===target&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),target=new Vector3),this.delta(target).multiplyScalar(t).add(this.start)},applyMatrix4:function(matrix){return this.start.applyMatrix4(matrix),this.end.applyMatrix4(matrix),this},equals:function(line){return line.start.equals(this.start)&&line.end.equals(this.end)}}),ImmediateRenderObject.prototype=Object.create(Object3D.prototype),ImmediateRenderObject.prototype.constructor=ImmediateRenderObject,ImmediateRenderObject.prototype.isImmediateRenderObject=!0,VertexNormalsHelper.prototype=Object.create(LineSegments.prototype),VertexNormalsHelper.prototype.constructor=VertexNormalsHelper,VertexNormalsHelper.prototype.update=function(){var v1=new Vector3,v2=new Vector3,normalMatrix=new Matrix3;return function update(){var keys=["a","b","c"];this.object.updateMatrixWorld(!0),normalMatrix.getNormalMatrix(this.object.matrixWorld);var matrixWorld=this.object.matrixWorld,position=this.geometry.attributes.position,objGeometry=this.object.geometry;if(objGeometry&&objGeometry.isGeometry)for(var vertices=objGeometry.vertices,faces=objGeometry.faces,idx=0,i=0,l=faces.length;i<l;i++)for(var face=faces[i],j=0,jl=face.vertexNormals.length;j<jl;j++){var vertex=vertices[face[keys[j]]],normal=face.vertexNormals[j];v1.copy(vertex).applyMatrix4(matrixWorld),v2.copy(normal).applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1),position.setXYZ(idx,v1.x,v1.y,v1.z),idx+=1,position.setXYZ(idx,v2.x,v2.y,v2.z),idx+=1}else if(objGeometry&&objGeometry.isBufferGeometry)for(var objPos=objGeometry.attributes.position,objNorm=objGeometry.attributes.normal,idx=0,j=0,jl=objPos.count;j<jl;j++)v1.set(objPos.getX(j),objPos.getY(j),objPos.getZ(j)).applyMatrix4(matrixWorld),v2.set(objNorm.getX(j),objNorm.getY(j),objNorm.getZ(j)),v2.applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1),position.setXYZ(idx,v1.x,v1.y,v1.z),idx+=1,position.setXYZ(idx,v2.x,v2.y,v2.z),idx+=1;position.needsUpdate=!0}}(),SpotLightHelper.prototype=Object.create(Object3D.prototype),SpotLightHelper.prototype.constructor=SpotLightHelper,SpotLightHelper.prototype.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},SpotLightHelper.prototype.update=function(){var vector=new Vector3;return function update(){this.light.updateMatrixWorld();var coneLength=this.light.distance?this.light.distance:1e3,coneWidth=coneLength*Math.tan(this.light.angle);this.cone.scale.set(coneWidth,coneWidth,coneLength),vector.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(vector),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}(),SkeletonHelper.prototype=Object.create(LineSegments.prototype),SkeletonHelper.prototype.constructor=SkeletonHelper,SkeletonHelper.prototype.updateMatrixWorld=function(){var vector=new Vector3,boneMatrix=new Matrix4,matrixWorldInv=new Matrix4;return function updateMatrixWorld(force){var bones=this.bones,geometry=this.geometry,position=geometry.getAttribute("position");matrixWorldInv.getInverse(this.root.matrixWorld);for(var i=0,j=0;i<bones.length;i++){var bone=bones[i];
vendor: 4,343 bytes, line 1
1bone.parent&&bone.parent.isBone&&(boneMatrix.multiplyMatrices(matrixWorldInv,bone.matrixWorld),vector.setFromMatrixPosition(boneMatrix),position.setXYZ(j,vector.x,vector.y,vector.z),boneMatrix.multiplyMatrices(matrixWorldInv,bone.parent.matrixWorld),vector.setFromMatrixPosition(boneMatrix),position.setXYZ(j+1,vector.x,vector.y,vector.z),j+=2)}geometry.getAttribute("position").needsUpdate=!0,Object3D.prototype.updateMatrixWorld.call(this,force)}}(),PointLightHelper.prototype=Object.create(Mesh.prototype),PointLightHelper.prototype.constructor=PointLightHelper,PointLightHelper.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose()},PointLightHelper.prototype.update=function(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)},RectAreaLightHelper.prototype=Object.create(Line.prototype),RectAreaLightHelper.prototype.constructor=RectAreaLightHelper,RectAreaLightHelper.prototype.update=function(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),void 0!==this.color)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);var c=this.material.color,max=Math.max(c.r,c.g,c.b);max>1&&c.multiplyScalar(1/max),this.children[0].material.color.copy(this.material.color)}},RectAreaLightHelper.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()},HemisphereLightHelper.prototype=Object.create(Object3D.prototype),HemisphereLightHelper.prototype.constructor=HemisphereLightHelper,HemisphereLightHelper.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},HemisphereLightHelper.prototype.update=function(){var vector=new Vector3,color1=new Color,color2=new Color;return function update(){var mesh=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var colors=mesh.geometry.getAttribute("color");color1.copy(this.light.color),color2.copy(this.light.groundColor);for(var i=0,l=colors.count;i<l;i++){var color=i<l/2?color1:color2;colors.setXYZ(i,color.r,color.g,color.b)}colors.needsUpdate=!0}mesh.lookAt(vector.setFromMatrixPosition(this.light.matrixWorld).negate())}}(),GridHelper.prototype=Object.create(LineSegments.prototype),GridHelper.prototype.constructor=GridHelper,PolarGridHelper.prototype=Object.create(LineSegments.prototype),PolarGridHelper.prototype.constructor=PolarGridHelper,FaceNormalsHelper.prototype=Object.create(LineSegments.prototype),FaceNormalsHelper.prototype.constructor=FaceNormalsHelper,FaceNormalsHelper.prototype.update=function(){var v1=new Vector3,v2=new Vector3,normalMatrix=new Matrix3;return function update(){this.object.updateMatrixWorld(!0),normalMatrix.getNormalMatrix(this.object.matrixWorld);for(var matrixWorld=this.object.matrixWorld,position=this.geometry.attributes.position,objGeometry=this.object.geometry,vertices=objGeometry.vertices,faces=objGeometry.faces,idx=0,i=0,l=faces.length;i<l;i++){var face=faces[i],normal=face.normal;v1.copy(vertices[face.a]).add(vertices[face.b]).add(vertices[face.c]).divideScalar(3).applyMatrix4(matrixWorld),v2.copy(normal).applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1),position.setXYZ(idx,v1.x,v1.y,v1.z),idx+=1,position.setXYZ(idx,v2.x,v2.y,v2.z),idx+=1}position.needsUpdate=!0}}(),DirectionalLightHelper.prototype=Object.create(Object3D.prototype),DirectionalLightHelper.prototype.constructor=DirectionalLightHelper,DirectionalLightHelper.prototype.dispose=function(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()},DirectionalLightHelper.prototype.update=function(){var v1=new Vector3,v2=new Vector3,v3=new Vector3;return function update(){v1.setFromMatrixPosition(this.light.matrixWorld),v2.setFromMatrixPosition(this.light.target.matrixWorld),v3.subVectors(v2,v1),this.lightPlane.lookAt(v2),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(v2),this.targetLine.scale.z
vendor: 11,366 bytes, line 1
1=v3.length()}}(),CameraHelper.prototype=Object.create(LineSegments.prototype),CameraHelper.prototype.constructor=CameraHelper,CameraHelper.prototype.update=function(){var geometry,pointMap,vector=new Vector3,camera=new Camera;function setPoint(point,x,y,z){vector.set(x,y,z).unproject(camera);var points=pointMap[point];if(void 0!==points)for(var position=geometry.getAttribute("position"),i=0,l=points.length;i<l;i++)position.setXYZ(points[i],vector.x,vector.y,vector.z)}return function update(){geometry=this.geometry,pointMap=this.pointMap;var w=1,h=1;camera.projectionMatrix.copy(this.camera.projectionMatrix),setPoint("c",0,0,-1),setPoint("t",0,0,1),setPoint("n1",-1,-1,-1),setPoint("n2",1,-1,-1),setPoint("n3",-1,1,-1),setPoint("n4",1,1,-1),setPoint("f1",-1,-1,1),setPoint("f2",1,-1,1),setPoint("f3",-1,1,1),setPoint("f4",1,1,1),setPoint("u1",.7,1.1,-1),setPoint("u2",-.7,1.1,-1),setPoint("u3",0,2,-1),setPoint("cf1",-1,0,1),setPoint("cf2",1,0,1),setPoint("cf3",0,-1,1),setPoint("cf4",0,1,1),setPoint("cn1",-1,0,-1),setPoint("cn2",1,0,-1),setPoint("cn3",0,-1,-1),setPoint("cn4",0,1,-1),geometry.getAttribute("position").needsUpdate=!0}}(),BoxHelper.prototype=Object.create(LineSegments.prototype),BoxHelper.prototype.constructor=BoxHelper,BoxHelper.prototype.update=function(){var box=new Box3;return function update(object){if(void 0!==object&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),void 0!==this.object&&box.setFromObject(this.object),!box.isEmpty()){var min=box.min,max=box.max,position=this.geometry.attributes.position,array=position.array;array[0]=max.x,array[1]=max.y,array[2]=max.z,array[3]=min.x,array[4]=max.y,array[5]=max.z,array[6]=min.x,array[7]=min.y,array[8]=max.z,array[9]=max.x,array[10]=min.y,array[11]=max.z,array[12]=max.x,array[13]=max.y,array[14]=min.z,array[15]=min.x,array[16]=max.y,array[17]=min.z,array[18]=min.x,array[19]=min.y,array[20]=min.z,array[21]=max.x,array[22]=min.y,array[23]=min.z,position.needsUpdate=!0,this.geometry.computeBoundingSphere()}}}(),BoxHelper.prototype.setFromObject=function(object){return this.object=object,this.update(),this},BoxHelper.prototype.copy=function(source){return LineSegments.prototype.copy.call(this,source),this.object=source.object,this},BoxHelper.prototype.clone=function(){return(new this.constructor).copy(this)},Box3Helper.prototype=Object.create(LineSegments.prototype),Box3Helper.prototype.constructor=Box3Helper,Box3Helper.prototype.updateMatrixWorld=function(force){var box=this.box;box.isEmpty()||(box.getCenter(this.position),box.getSize(this.scale),this.scale.multiplyScalar(.5),Object3D.prototype.updateMatrixWorld.call(this,force))},PlaneHelper.prototype=Object.create(Line.prototype),PlaneHelper.prototype.constructor=PlaneHelper,PlaneHelper.prototype.updateMatrixWorld=function(force){var scale=-this.plane.constant;Math.abs(scale)<1e-8&&(scale=1e-8),this.scale.set(.5*this.size,.5*this.size,scale),this.children[0].material.side=scale<0?1:0,this.lookAt(this.plane.normal),Object3D.prototype.updateMatrixWorld.call(this,force)},ArrowHelper.prototype=Object.create(Object3D.prototype),ArrowHelper.prototype.constructor=ArrowHelper,ArrowHelper.prototype.setDirection=(axis=new Vector3,function setDirection(dir){dir.y>.99999?this.quaternion.set(0,0,0,1):dir.y<-.99999?this.quaternion.set(1,0,0,0):(axis.set(dir.z,0,-dir.x).normalize(),radians=Math.acos(dir.y),this.quaternion.setFromAxisAngle(axis,radians))}),ArrowHelper.prototype.setLength=function(length,headLength,headWidth){void 0===headLength&&(headLength=.2*length),void 0===headWidth&&(headWidth=.2*headLength),this.line.scale.set(1,Math.max(0,length-headLength),1),this.line.updateMatrix(),this.cone.scale.set(headWidth,headLength,headWidth),this.cone.position.y=length,this.cone.updateMatrix()},ArrowHelper.prototype.setColor=function(color){this.line.material.color.copy(color),this.cone.material.color.copy(color)},ArrowHelper.prototype.copy=function(source){return Object3D.prototype.copy.call(this,source,!1),this.line.copy(source.line),this.cone.copy(source.cone),this},ArrowHelper.prototype.clone=function(){return(new this.constructor).copy(this)},AxesHelper.prototype=Object.create(LineSegments.prototype),AxesHelper.prototype.constructor=AxesHelper;var LineStrip=0,LinePieces=1;function MeshFaceMaterial(materials){return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."),materials}function MultiMaterial(materials){return void 0===materials&&(materials=[]),console.warn("THREE.MultiMaterial has been removed. Use an Array instead."),materials.isMultiMaterial=!0,materials.materials=materials,materials.clone=function(){return materials.slice()},materials}function PointCloud(geometry,material){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new Points(geometry,material)}function Particle(material){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new Sprite(material)}function ParticleSystem(geometry,material){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new Points(geometry,material)}function PointCloudMaterial(parameters){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new PointsMaterial(parameters)}function ParticleBasicMaterial(parameters){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new PointsMaterial(parameters)}function ParticleSystemMaterial(parameters){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new PointsMaterial(parameters)}function Vertex(x,y,z){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new Vector3(x,y,z)}function DynamicBufferAttribute(array,itemSize){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead."),new BufferAttribute(array,itemSize).setDynamic(!0)}function Int8Attribute(array,itemSize){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new Int8BufferAttribute(array,itemSize)}function Uint8Attribute(array,itemSize){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new Uint8BufferAttribute(array,itemSize)}function Uint8ClampedAttribute(array,itemSize){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new Uint8ClampedBufferAttribute(array,itemSize)}function Int16Attribute(array,itemSize){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new Int16BufferAttribute(array,itemSize)}function Uint16Attribute(array,itemSize){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new Uint16BufferAttribute(array,itemSize)}function Int32Attribute(array,itemSize){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new Int32BufferAttribute(array,itemSize)}function Uint32Attribute(array,itemSize){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new Uint32BufferAttribute(array,itemSize)}function Float32Attribute(array,itemSize){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new Float32BufferAttribute(array,itemSize)}function Float64Attribute(array,itemSize){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new Float64BufferAttribute(array,itemSize)}function ClosedSplineCurve3(points){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),CatmullRomCurve3.call(this,points),this.type="catmullrom",this.closed=!0}function SplineCurve3(points){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),CatmullRomCurve3.call(this,points),this.type="catmullrom"}function Spline(points){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."),CatmullRomCurve3.call(this,points),this.type="catmullrom"}function AxisHelper(size){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new AxesHelper(size)}function BoundingBoxHelper(object,color){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new BoxHelper(object,color)}function EdgesHelper(object,hex){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new LineSegments(new EdgesGeometry(object.geometry),new LineBasicMaterial({color:void 0!==hex?hex:16777215}))}function WireframeHelper(object,hex){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new LineSegments(new WireframeGeometry(object.geometry),new LineBasicMaterial({color:void 0!==hex?hex:16777215}))}function XHRLoader(manager){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new FileLoader(manager)}function BinaryTextureLoader(manager){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new DataTextureLoader(manager)}Curve.create=function(construct,getPoint){return console.log("THREE.Curve.create() has been deprecated"),construct.prototype=Object.create(Curve.prototype),construct.prototype.constructor=construct,construct.prototype.getPoint=getPoint,construct},Object.assign(CurvePath.prototype,{createPointsGeometry:function(divisions){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var pts=this.getPoints(divisions);return this.createGeometry(pts)},createSpacedPointsGeometry:function(divisions){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var pts=this.getSpacedPoints(divisions);return this.createGeometry(pts)},createGeometry:function(points){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var geometry=new Geometry,i=0,l=points.length;i<l;i++){var point=points[i];geometry.vertices.push(new Vector3(point.x,point.y,point.z||0))}return geometry}}),Object.assign(Path.prototype,{fromPoints:function(points){console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(points)}}),ClosedSplineCurve3.prototype=Object.create(CatmullRomCurve3.prototype),SplineCurve3.prototype=Object.create(CatmullRomCurve3.prototype),Spline.prototype=Object.create(CatmullRomCurve3.prototype),Object.assign(Spline.prototype,{initFromArray:function(){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},reparametrizeByArcLength:function(){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}}),GridHelper.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},SkeletonHelper.prototype.update=function(){console.error("THREE.SkeletonHelper: update(
1) no longer needs to be called.")},Object.assign(Loader.prototype,{extractUrlBase:function(url){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),LoaderUtils.extractUrlBase(url)}}),Object.assign(ObjectLoader.prototype,{setTexturePath:function(value){return console.warn("THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath()."),this.setResourcePath(value)}}),Object.assign(Box2.prototype,{center:function(optionalTarget){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(optionalTarget)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(box){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(box)},size:function(optionalTarget){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(optionalTarget)}}),Object.assign(Box3.prototype,{center:function(optionalTarget){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(optionalTarget)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(box){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(box)},isIntersectionSphere:function(sphere){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(sphere)},size:function(optionalTarget){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(optionalTarget)}}),Line3.prototype.center=function(optionalTarget){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(optionalTarget)},Object.assign(_Math,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(value){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),_Math.floorPowerOfTwo(value)},nextPowerOfTwo:function(value){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),_Math.ceilPowerOfTwo(value)}}),Object.assign(Matrix3.prototype,{flattenToArrayOffset:function(array,offset){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(array,offset)},multiplyVector3:function(vector){return console.warn("THREE.Matrix3: .multiplyVector3(
1) has been removed. Use vector.applyMatrix3( matrix ) instead."),vector.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBuffer:function(buffer){return console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(buffer)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}}),Object.assign(Matrix4.prototype,{extractPosition:function(m){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(m)},flattenToArrayOffset:function(array,offset){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(array,offset)},getPosition:function(){var v1;return function getPosition(){return void 0===v1&&(v1=new Vector3),console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),v1.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(q){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(q)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(vector){return console.warn("THREE.Matrix4: .multiplyVector3(
1) has been removed. Use vector.applyMatrix4( matrix ) instead."),vector.applyMatrix4(this)},multiplyVector4:function(vector){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),vector.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(v){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),v.transformDirection(this)},crossVector:function(vector){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),vector.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBuffer:function(buffer){return console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(buffer)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(left,right,bottom,top,near,far){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(left,right,top,bottom,near,far)}}),Plane.prototype.isIntersectionLine=function(line){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(line)},Quaternion.prototype.multiplyVector3=function(vector){return console.warn("THREE.Quaternion: .multiplyVector3(
1) has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),vector.applyQuaternion(this)},Object.assign(Ray.prototype,{isIntersectionBox:function(box){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(box)},isIntersectionPlane:function(plane){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(plane)},isIntersectionSphere:function(sphere){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(sphere)}}),Object.assign(Triangle.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(point,target){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(point,target)},midpoint:function(target){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(target)},normal:function(target){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(target)},plane:function(target){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(target)}}),Object.assign(Triangle,{barycoordFromPoint:function(point,a,b,c,target){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Triangle.getBarycoord(point,a,b,c,target)},normal:function(a,b,c,target){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Triangle.getNormal(a,b,c,target)}}),Object.assign(Shape.prototype,{extractAllPoints:function(divisions){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(divisions)},extrude:function(options){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new ExtrudeGeometry(this,options)},makeGeometry:function(options){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new ShapeGeometry(this,options)}}),Object.assign(Vector2.prototype,{fromAttribute:function(attribute,index,offset){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(attribute,index,offset)},distanceToManhattan:function(v){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(v)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(Vector3.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(m){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(m)},getScaleFromMatrix:function(m){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(m)},getColumnFromMatrix:function(index,matrix){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(matrix,index)},applyProjection:function(m){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(m)},fromAttribute:function(attribute,index,offset){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(attribute,index,offset)},distanceToManhattan:function(v){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(v)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(Vector4.prototype,{fromAttribute:function(attribute,index,offset){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(attribute,index,offset)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(Geometry.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}}),Object.assign(Object3D.prototype,{getChildByName:function(name){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(name)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(distance,axis){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(axis,distance)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")}}),Object.defineProperties(Object3D.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(value){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=value}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library n
1ow uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.defineProperties(LOD.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(Skeleton.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),SkinnedMesh.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(Curve.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(value){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=value}}),PerspectiveCamera.prototype.setLens=function(focalLength,filmGauge){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==filmGauge&&(this.filmGauge=filmGauge),this.setFocalLength(focalLength)},Object.defineProperties(Light.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(value){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=value}},shadowCameraLeft:{set:function(value){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=value}},shadowCameraRight:{set:function(value){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=value}},shadowCameraTop:{set:function(value){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=value}},shadowCameraBottom:{set:function(value){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=value}},shadowCameraNear:{set:function(value){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=value}},shadowCameraFar:{set:function(value){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=value}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(value){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=value}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(value){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=value}},shadowMapHeight:{set:function(value){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=value}}}),Object.defineProperties(BufferAttribute.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")}}),Object.assign(BufferGeometry.prototype,{addIndex:function(index){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(index)},addDrawCall:function(start,count,indexOffset){void 0!==indexOffset&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(start,count)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}}),Object.defineProperties(BufferGeometry.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.assign(ExtrudeBufferGeometry.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}}),Object.defineProperties(Uniform.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Material.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")}
vendor: 4,584 bytes, line 1
1,set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Color}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(value){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===value}}}),Object.defineProperties(MeshPhongMaterial.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(ShaderMaterial.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(value){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=value}}}),Object.assign(WebGLRenderer.prototype,{clearTarget:function(renderTarget,color,depth,stencil){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(renderTarget),this.clear(color,depth,stencil)},animate:function(callback){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(callback)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(boolean){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(boolean)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling(
1) has been removed.")}}),Object.defineProperties(WebGLRenderer.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=value}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=value}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(WebGLShadowMap.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(WebGLRenderTarget.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(value){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=value}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(value){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=value}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(value){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=value}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(value){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=value}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(value){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=value}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(value){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=value}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(value){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=value}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(value){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=value}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(value){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=value}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(value){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=value}}}),Object.defineProperties(WebVRManager.prototype,{standing:{set:function(){console.warn("THREE.WebVRManager: .standing has been removed.")}},userHeight:{set:function(){console.warn("THREE.WebVRManager: .userHeight has been removed.")}}}),Audio.prototype.load=function(file){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var scope=this,audioLoader;return(new AudioLoader).load(file,(function(buffer){scope.setBuffer(buffer)})),this},AudioAnalyser.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},CubeCamera.prototype.updateCubeMap=function(renderer,scene){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update(
1)."),this.update(renderer,scene)};var GeometryUtils={merge:function(geometry1,geometry2,materialIndexOffset){var matrix;console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead."),geometry2.isMesh&&(geometry2.matrixAutoUpdate&&geometry2.updateMatrix(),matrix=geometry2.matrix,geometry2=geometry2.geometry),geometry1.merge(geometry2,matrix,materialIndexOffset)},center:function(geometry){return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."),geometry.center()}};function Projector(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js."),this.projectVector=function(vector,camera){console.warn("THREE.Projector: .projectVector() is now vector.project()."),vector.project(camera)},this.unprojectVector=function(vector,camera){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),vector.unproject(camera)},this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}}function CanvasRenderer(){console.error("THREE.CanvasRenderer has been removed")}function JSONLoader(){console.error("THREE.JSONLoader has been removed.")}ImageUtils.crossOrigin=void 0,ImageUtils.loadTexture=function(url,mapping,onLoad,onError){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var loader=new TextureLoader;loader.setCrossOrigin(this.crossOrigin);var texture=loader.load(url,onLoad,void 0,onError);return mapping&&(texture.mapping=mapping),texture},ImageUtils.loadTextureCube=function(urls,mapping,onLoad,onError){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var loader=new CubeTextureLoader;loader.setCrossOrigin(this.crossOrigin);var texture=loader.load(urls,onLoad,void 0,onError);return mapping&&(texture.mapping=mapping),texture},ImageUtils.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},ImageUtils.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};var SceneUtils={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")}};function LensFlare(){console.error("THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js")}exports.WebGLRenderTargetCube=WebGLRenderTargetCube,exports.WebGLRenderTarget=WebGLRenderTarget,exports.WebGLRenderer=WebGLRenderer,exports.ShaderLib=ShaderLib,exports.UniformsLib=UniformsLib,exports.UniformsUtils=UniformsUtils,exports.ShaderChunk=Sha
1derChunk,exports.FogExp2=FogExp2,exports.Fog=Fog,exports.Scene=Scene,exports.Sprite=Sprite,exports.LOD=LOD,exports.SkinnedMesh=SkinnedMesh,exports.Skeleton=Skeleton,exports.Bone=Bone,exports.Mesh=Mesh,exports.LineSegments=LineSegments,exports.LineLoop=LineLoop,exports.Line=Line,exports.Points=Points,exports.Group=Group,exports.VideoTexture=VideoTexture,exports.DataTexture=DataTexture,exports.DataTexture3D=DataTexture3D,exports.CompressedTexture=CompressedTexture,exports.CubeTexture=CubeTexture,exports.CanvasTexture=CanvasTexture,exports.DepthTexture=DepthTexture,exports.Texture=Texture,exports.AnimationLoader=AnimationLoader,exports.CompressedTextureLoader=CompressedTextureLoader,exports.DataTextureLoader=DataTextureLoader,exports.CubeTextureLoader=CubeTextureLoader,exports.TextureLoader=TextureLoader,exports.ObjectLoader=ObjectLoader,exports.MaterialLoader=MaterialLoader,exports.BufferGeometryLoader=BufferGeometryLoader,exports.DefaultLoadingManager=DefaultLoadingManager,exports.LoadingManager=LoadingManager,exports.ImageLoader=ImageLoader,exports.ImageBitmapLoader=ImageBitmapLoader,exports.FontLoader=FontLoader,exports.FileLoader=FileLoader,exports.Loader=Loader,exports.LoaderUtils=LoaderUtils,exports.Cache=Cache,exports.AudioLoader=AudioLoader,exports.SpotLightShadow=SpotLightShadow,exports.SpotLight=SpotLight,exports.PointLight=PointLight,exports.RectAreaLight=RectAreaLight,exports.HemisphereLight=HemisphereLight,exports.DirectionalLightShadow=DirectionalLightShadow,exports.DirectionalLight=DirectionalLight,exports.AmbientLight=AmbientLight,exports.LightShadow=LightShadow,exports.Light=Light,exports.StereoCamera=StereoCamera,exports.PerspectiveCamera=PerspectiveCamera,exports.OrthographicCamera=OrthographicCamera,exports.CubeCamera=CubeCamera,exports.ArrayCamera=ArrayCamera,exports.Camera=Camera,exports.AudioListener=AudioListener,exports.PositionalAudio=PositionalAudio,exports.AudioContext=AudioContext,exports.AudioAnalyser=AudioAnalyser,exports.Audio=Audio,exports.VectorKeyframeTrack=VectorKeyframeTrack,exports.StringKeyframeTrack=StringKeyframeTrack,exports.QuaternionKeyframeTrack=QuaternionKeyframeTrack,exports.NumberKeyframeTrack=NumberKeyframeTrack,exports.ColorKeyframeTrack=ColorKeyframeTrack,exports.BooleanKeyframeTrack=BooleanKeyframeTrack,exports.PropertyMixer=PropertyMixer,exports.PropertyBinding=PropertyBinding,exports.KeyframeTrack=KeyframeTrack,exports.AnimationUtils=AnimationUtils,exports.AnimationObjectGroup=AnimationObjectGroup,exports.AnimationMixer=AnimationMixer,exports.AnimationClip=AnimationClip,exports.Uniform=Uniform,exports.InstancedBufferGeometry=InstancedBufferGeometry,exports.BufferGeometry=BufferGeometry,exports.Geometry=Geometry,exports.InterleavedBufferAttribute=InterleavedBufferAttribute,exports.InstancedInterleavedBuffer=InstancedInterleavedBuffer,exports.InterleavedBuffer=InterleavedBuffer,exports.InstancedBufferAttribute=InstancedBufferAttribute,exports.Face3=Face3,exports.Object3D=Object3D,exports.Raycaster=Raycaster,exports.Layers=Layers,exports.EventDispatcher=EventDispatcher,exports.Clock=Clock,exports.QuaternionLinearInterpolant=QuaternionLinearInterpolant,exports.LinearInterpolant=LinearInterpolant,exports.DiscreteInterpolant=DiscreteInterpolant,exports.CubicInterpolant=CubicInterpolant,exports.Interpolant=Interpolant,exports.Triangle=Triangle,exports.Math=_Math,exports.Spherical=Spherical,exports.Cylindrical=Cylindrical,exports.Plane=Plane,exports.Frustum=Frustum,exports.Sphere=Sphere,exports.Ray=Ray,exports.Matrix4=Matrix4,exports.Matrix3=Matrix3,exports.Box3=Box3,exports.Box2=Box2,exports.Line3=Line3,exports.Euler=Euler,exports.Vector4=Vector4,exports.Vector3=Vector3,exports.Vector2=Vector2,exports.Quaternion=Quaternion,exports.Color=Color,exports.ImmediateRenderObject=ImmediateRenderObject,exports.VertexNormalsHelper=VertexNormalsHelper,exports.SpotLightHelper=SpotLightHelper,exports.SkeletonHelper=SkeletonHelper,exports.PointLightHelper=PointLightHelper,exports.RectAreaLightHelper=RectAreaLightHelper,exports.HemisphereLightHelper=HemisphereLightHelper,exports.GridHelper=GridHelper,exports.PolarGridHelper=PolarGridHelper,exports.FaceNormalsHelper=FaceNormalsHelper,exports.DirectionalLightHelper=DirectionalLightHelper,exports.CameraHelper=CameraHelper,exports.BoxHelper=BoxHelper,exports.Box3Helper=Box3Helper,exports.PlaneHelper=PlaneHelper,exports.ArrowHelper=ArrowHelper,exports.AxesHelper=Axe
1sHelper,exports.Shape=Shape,exports.Path=Path,exports.ShapePath=ShapePath,exports.Font=Font,exports.CurvePath=CurvePath,exports.Curve=Curve,exports.ImageUtils=ImageUtils,exports.ShapeUtils=ShapeUtils,exports.WebGLUtils=WebGLUtils,exports.WireframeGeometry=WireframeGeometry,exports.ParametricGeometry=ParametricGeometry,exports.ParametricBufferGeometry=ParametricBufferGeometry,exports.TetrahedronGeometry=TetrahedronGeometry,exports.TetrahedronBufferGeometry=TetrahedronBufferGeometry,exports.OctahedronGeometry=OctahedronGeometry,exports.OctahedronBufferGeometry=OctahedronBufferGeometry,exports.IcosahedronGeometry=IcosahedronGeometry,exports.IcosahedronBufferGeometry=IcosahedronBufferGeometry,exports.DodecahedronGeometry=DodecahedronGeometry,exports.DodecahedronBufferGeometry=DodecahedronBufferGeometry,exports.PolyhedronGeometry=PolyhedronGeometry,exports.PolyhedronBufferGeometry=PolyhedronBufferGeometry,exports.TubeGeometry=TubeGeometry,exports.TubeBufferGeometry=TubeBufferGeometry,exports.TorusKnotGeometry=TorusKnotGeometry,exports.TorusKnotBufferGeometry=TorusKnotBufferGeometry,exports.TorusGeometry=TorusGeometry,exports.TorusBufferGeometry=TorusBufferGeometry,exports.TextGeometry=TextGeometry,exports.TextBufferGeometry=TextBufferGeometry,exports.SphereGeometry=SphereGeometry,exports.SphereBufferGeometry=SphereBufferGeometry,exports.RingGeometry=RingGeometry,exports.RingBufferGeometry=RingBufferGeometry,exports.PlaneGeometry=PlaneGeometry,exports.PlaneBufferGeometry=PlaneBufferGeometry,exports.LatheGeometry=LatheGeometry,exports.LatheBufferGeometry=LatheBufferGeometry,exports.ShapeGeometry=ShapeGeometry,exports.ShapeBufferGeometry=ShapeBufferGeometry,exports.ExtrudeGeometry=ExtrudeGeometry,exports.ExtrudeBufferGeometry=ExtrudeBufferGeometry,exports.EdgesGeometry=EdgesGeometry,exports.ConeGeometry=ConeGeometry,exports.ConeBufferGeometry=ConeBufferGeometry,exports.CylinderGeometry=CylinderGeometry,exports.CylinderBufferGeometry=CylinderBufferGeometry,exports.CircleGeometry=CircleGeometry,exports.CircleBufferGeometry=CircleBufferGeometry,exports.BoxGeometry=BoxGeometry,exports.BoxBufferGeometry=BoxBufferGeometry,exports.ShadowMaterial=ShadowMaterial,exports.SpriteMaterial=SpriteMaterial,exports.RawShaderMaterial=RawShaderMaterial,exports.ShaderMaterial=ShaderMaterial,exports.PointsMaterial=PointsMaterial,exports.MeshPhysicalMaterial=MeshPhysicalMaterial,exports.MeshStandardMaterial=MeshStandardMaterial,exports.MeshPhongMaterial=MeshPhongMaterial,exports.MeshToonMaterial=MeshToonMaterial,exports.MeshNormalMaterial=MeshNormalMaterial,exports.MeshLambertMaterial=MeshLambertMaterial,exports.MeshDepthMaterial=MeshDepthMaterial,exports.MeshDistanceMaterial=MeshDistanceMaterial,exports.MeshBasicMaterial=MeshBasicMaterial,exports.MeshMatcapMaterial=MeshMatcapMaterial,exports.LineDashedMaterial=LineDashedMaterial,exports.LineBasicMaterial=LineBasicMaterial,exports.Material=Material,exports.Float64BufferAttribute=Float64BufferAttribute,exports.Float32BufferAttribute=Float32BufferAttribute,exports.Uint32BufferAttribute=Uint32BufferAttribute,exports.Int32BufferAttribute=Int32BufferAttribute,exports.Uint16BufferAttribute=Uint16BufferAttribute,exports.Int16BufferAttribute=Int16BufferAttribute,exports.Uint8ClampedBufferAttribute=Uint8ClampedBufferAttribute,exports.Uint8BufferAttribute=Uint8BufferAttribute,exports.Int8BufferAttribute=Int8BufferAttribute,exports.BufferAttribute=BufferAttribute,exports.ArcCurve=ArcCurve,exports.CatmullRomCurve3=CatmullRomCurve3,exports.CubicBezierCurve=CubicBezierCurve,exports.CubicBezierCurve3=CubicBezierCurve3,exports.EllipseCurve=EllipseCurve,exports.LineCurve=LineCurve,exports.LineCurve3=LineCurve3,exports.QuadraticBezierCurve=QuadraticBezierCurve,exports.QuadraticBezierCurve3=QuadraticBezierCurve3,exports.SplineCurve=SplineCurve,exports.REVISION="100",exports.MOUSE=MOUSE,exports.CullFaceNone=0,exports.CullFaceBack=1,exports.CullFaceFront=2,exports.CullFaceFrontBack=3,exp
1orts.FrontFaceDirectionCW=0,exports.FrontFaceDirectionCCW=1,exports.BasicShadowMap=0,exports.PCFShadowMap=1,exports.PCFSoftShadowMap=2,exports.FrontSide=0,exports.BackSide=1,exports.DoubleSide=2,exports.FlatShading=1,exports.SmoothShading=2,exports.NoColors=0,exports.FaceColors=1,exports.VertexColors=2,exports.NoBlending=0,exports.NormalBlending=1,exports.AdditiveBlending=2,exports.SubtractiveBlending=3,exports.MultiplyBlending=4,exports.CustomBlending=5,exports.AddEquation=100,exports.SubtractEquation=101,exports.ReverseSubtractEquation=102,exports.MinEquation=103,exports.MaxEquation=104,exports.ZeroFactor=200,exports.OneFactor=201,exports.SrcColorFactor=202,exports.OneMinusSrcColorFactor=203,exports.SrcAlphaFactor=204,exports.OneMinusSrcAlphaFactor=205,exports.DstAlphaFactor=206,exports.OneMinusDstAlphaFactor=207,exports.DstColorFactor=208,exports.OneMinusDstColorFactor=209,exports.SrcAlphaSaturateFactor=210,exports.NeverDepth=0,exports.AlwaysDepth=1,exports.LessDepth=2,exports.LessEqualDepth=3,exports.EqualDepth=4,exports.GreaterEqualDepth=5,exports.GreaterDepth=6,exports.NotEqualDepth=7,exports.MultiplyOperation=0,exports.MixOperation=1,exports.AddOperation=2,exports.NoToneMapping=0,exports.LinearToneMapping=1,exports.ReinhardToneMapping=2,exports.Uncharted2ToneMapping=3,exports.CineonToneMapping=4,exports.ACESFilmicToneMapping=5,exports.UVMapping=300,exports.CubeReflectionMapping=301,exports.CubeRefractionMapping=302,exports.EquirectangularReflectionMapping=303,exports.EquirectangularRefractionMapping=304,exports.SphericalReflectionMapping=305,exports.CubeUVReflectionMapping=306,exports.CubeUVRefractionMapping=307,exports.RepeatWrapping=1e3,exports.ClampToEdgeWrapping=1001,exports.MirroredRepeatWrapping=1002,exports.NearestFilter=1003,exports.NearestMipMapNearestFilter=1004,exports.NearestMipMapLinearFilter=1005,exports.LinearFilter=1006,exports.LinearMipMapNearestFilter=1007,exports.LinearMipMapLinearFilter=1008,exports.UnsignedByteType=1009,exports.ByteType=1010,exports.ShortType=1011,exports.UnsignedShortType=1012,exports.IntType=1013,exports.UnsignedIntType=1014,exports.FloatType=1015,exports.HalfFloatType=1016,exports.UnsignedShort4444Type=1017,exports.UnsignedShort5551Type=1018,exports.UnsignedShort565Type=1019,exports.UnsignedInt248Type=1020,exports.AlphaFormat=1021,exports.RGBFormat=1022,exports.RGBAFormat=1023,exports.LuminanceFormat=1024,exports.LuminanceAlphaFormat=1025,exports.RGBEFormat=1023,exports.DepthFormat=1026,exports.DepthStencilFormat=1027,exports.RedFormat=1028,exports.RGB_S3TC_DXT1_Format=33776,exports.RGBA_S3TC_DXT1_Format=33777,exports.RGBA_S3TC_DXT3_Format=33778,exports.RGBA_S3TC_DXT5_Format=33779,exports.RGB_PVRTC_4BPPV1_Format=35840,exports.RGB_PVRTC_2BPPV1_Format=35841,exports.RGBA_PVRTC_4BPPV1_Format=35842,exports.RGBA_PVRTC_2BPPV1_Format=35843,exports.RGB_ETC1_Format=36196,exports.RGBA_ASTC_4x4_Format=37808,exports.RGBA_ASTC_5x4_Format=37809,exports.RGBA_ASTC_5x5_Format=37810,exports.RGBA_ASTC_6x5_Format=37811,exports.RGBA_ASTC_6x6_Format=37812,exports.RGBA_ASTC_8x5_Format=37813,exports.RGBA_ASTC_8x6_Format=37814,exports.RGBA_ASTC_8x8_Format=37815,exports.RGBA_ASTC_10x5_Format=37816,exports.RGBA_ASTC_10x6_Format=37817,exports.RGBA_ASTC_10x8_Format=37818,exports.RGBA_ASTC_10x10_Format=37819,exports.RGBA_ASTC_12x10_Format=37820,exports.RGBA_ASTC_12x12_Format=37821,exports.LoopOnce=2200,exports.LoopRepeat=2201,exports.LoopPingPong=2202,exports.InterpolateDiscrete=2300,exports.InterpolateLinear=2301,exports.InterpolateSmooth=2302,exports.ZeroCurvatureEnding=2400,exports.ZeroSlopeEnding=2401,exports.WrapAroundEnding=2402,exports.TrianglesDrawMode=0,exports.TriangleStripDrawMode=1,exports.TriangleFanDrawMode=2,exports.LinearEncoding=3e3,exports.sRGBEncoding=3001,exports.GammaEncoding=3007,exports.RGBEEncoding=3002,exports.LogLuvEncoding=3003,exports.RGBM7Encoding=3004,exports.RGBM16Encoding=3005,exports.RGBDEncoding=3006,exports.BasicDepthPacking=3200,exports.RGBADepthPacking=3201,exports.TangentSpaceNormalMap=0,exports.ObjectSpaceNormalMap=1,exports.CubeGeometry=BoxGeometry,exports.Face4=Face4,exports.LineStrip=0,exports.LinePieces=1,exports.MeshFaceMaterial=MeshFaceMaterial,exports.MultiMaterial=MultiMaterial,exports.PointCloud=PointCloud,exports.Particle=Particle,exports.ParticleSystem=ParticleSystem,exports.PointCloudMaterial=PointCloudMaterial,exports.ParticleBasicMaterial=ParticleBasicMaterial,exports.ParticleSystemMaterial=ParticleSystemMaterial,exports.Vertex=Vertex,exports.DynamicBufferAttribute=DynamicBufferAttribute,exports.Int8Attribute=Int8Attribute,exports.Uint8Attribute=Uint8Attribute,exports.Uint8ClampedAttribute=Uint8ClampedAttribute,exports.Int16Attribute=Int16Attribute,exports.Uint16Attribute=Uint16Attribute,exports.Int32Attribute=Int32Attribute,exports.Uint32Attribute=Uint32Attribute,exports.Float32Attribute=Float32Attribute,exports.Float64Attribute=Float64Attribute,exports.ClosedSplineCurve3=ClosedSplineCurve3,exports.SplineCurve3=SplineCurve3,exports.Spline=Spline,exports.AxisHelper=AxisHelper,exports.BoundingBoxHelper=BoundingBoxHelper,exports.EdgesHelper=EdgesHelper,exports.WireframeHelper=WireframeHelper,exports.XHRLoader=XHRLoader,exports.BinaryTextureLoader=BinaryTextureLoader,exports.GeometryUtils=GeometryUtils,exports.Projector=Projector,exports.CanvasRenderer=CanvasRenderer,exports.JSONLoader=JSONLoader,exports.SceneUtils=SceneUtils,exports.LensFlare=LensFlare,Object.defineProperty(exports,"__esModule",{value:!0})}
vendor: 3 bytes, line 1
1));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.