{"version":3,"sources":["node_modules/gl-vec2/epsilon.js","node_modules/gl-vec2/create.js","node_modules/gl-vec2/clone.js","node_modules/gl-vec2/fromValues.js","node_modules/gl-vec2/copy.js","node_modules/gl-vec2/set.js","node_modules/gl-vec2/equals.js","node_modules/gl-vec2/exactEquals.js","node_modules/gl-vec2/add.js","node_modules/gl-vec2/subtract.js","node_modules/gl-vec2/sub.js","node_modules/gl-vec2/multiply.js","node_modules/gl-vec2/mul.js","node_modules/gl-vec2/divide.js","node_modules/gl-vec2/div.js","node_modules/gl-vec2/inverse.js","node_modules/gl-vec2/min.js","node_modules/gl-vec2/max.js","node_modules/gl-vec2/rotate.js","node_modules/gl-vec2/floor.js","node_modules/gl-vec2/ceil.js","node_modules/gl-vec2/round.js","node_modules/gl-vec2/scale.js","node_modules/gl-vec2/scaleAndAdd.js","node_modules/gl-vec2/distance.js","node_modules/gl-vec2/dist.js","node_modules/gl-vec2/squaredDistance.js","node_modules/gl-vec2/sqrDist.js","node_modules/gl-vec2/length.js","node_modules/gl-vec2/len.js","node_modules/gl-vec2/squaredLength.js","node_modules/gl-vec2/sqrLen.js","node_modules/gl-vec2/negate.js","node_modules/gl-vec2/normalize.js","node_modules/gl-vec2/dot.js","node_modules/gl-vec2/cross.js","node_modules/gl-vec2/lerp.js","node_modules/gl-vec2/random.js","node_modules/gl-vec2/transformMat2.js","node_modules/gl-vec2/transformMat2d.js","node_modules/gl-vec2/transformMat3.js","node_modules/gl-vec2/transformMat4.js","node_modules/gl-vec2/forEach.js","node_modules/gl-vec2/limit.js","node_modules/gl-vec2/index.js","node_modules/inherits/inherits_browser.js","node_modules/events/events.js","node_modules/right-now/browser.js","node_modules/node-libs-browser/node_modules/process/browser.js","../src/performance-now.coffee","node_modules/raf/index.js","node_modules/raf-loop/index.js","node_modules/three/build/three.module.js","node_modules/three-orbit-controls/index.js","node_modules/simplex-noise/simplex-noise.js","node_modules/remap/index.js","node_modules/gsap/TweenLite.js","node_modules/gsap/TimelineLite.js","node_modules/gsap/TimelineMax.js","node_modules/gsap/TweenMaxBase.js","node_modules/gsap/CSSPlugin.js","node_modules/gsap/AttrPlugin.js","node_modules/gsap/RoundPropsPlugin.js","node_modules/gsap/DirectionalRotationPlugin.js","node_modules/gsap/BezierPlugin.js","node_modules/gsap/EasePack.js","node_modules/gsap/TweenMax.js","node_modules/gsap/index.js","node_modules/clamp/index.js","lib/GPUComputationRenderer.js","0","lib/slider.js","lib/Counter.js","node_modules/dom-matches/index.js","node_modules/dom-closest/index.js","lib/CTAButton.js","node_modules/dat-gui/vendor/dat.gui.js","node_modules/dat-gui/vendor/dat.color.js","node_modules/dat-gui/index.js","index.js"],"names":["EventEmitter","_events","_maxListeners","undefined","isFunction","arg","isNumber","isObject","isUndefined","module","exports","prototype","defaultMaxListeners","setMaxListeners","n","isNaN","TypeError","emit","type","er","handler","len","args","i","listeners","error","length","arguments","Error","err","context","call","Array","slice","apply","addListener","listener","m","newListener","push","warned","console","trace","on","once","fired","g","removeListener","list","position","splice","removeAllListeners","key","ret","listenerCount","evlistener","emitter","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","e","runClearTimeout","marker","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","run","Item","array","noop","nextTick","title","browser","env","argv","version","versions","off","prependListener","prependOnceListener","name","binding","cwd","chdir","dir","umask","EventDispatcher","Number","EPSILON","Math","pow","isInteger","value","isFinite","floor","sign","x","Function","Object","defineProperty","get","toString","match","assign","target","output","index","source","nextKey","hasOwnProperty","addEventListener","_listeners","indexOf","hasEventListener","removeEventListener","listenerArray","dispatchEvent","event","l","REVISION","MOUSE","LEFT","MIDDLE","RIGHT","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","FrontFaceDirectionCW","FrontFaceDirectionCCW","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","NoColors","FaceColors","VertexColors","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","Uncharted2ToneMapping","CineonToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","SphericalReflectionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipMapNearestFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","RedFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","TangentSpaceNormalMap","ObjectSpaceNormalMap","_Math","DEG2RAD","PI","RAD2DEG","generateUUID","lut","d0","random","d1","d2","d3","uuid","toUpperCase","clamp","min","max","euclideanModulo","mapLinear","a1","a2","b1","b2","lerp","y","t","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","log","LN2","floorPowerOfTwo","Vector2","Matrix4","elements","Quaternion","z","w","_x","_y","_z","_w","Vector3","Matrix3","defineProperties","set","isVector2","setScalar","scalar","setX","setY","setComponent","getComponent","clone","constructor","copy","v","add","warn","addVectors","addScalar","s","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","dot","cross","lengthSq","sqrt","manhattanLength","abs","normalize","angle","atan2","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","setLength","alpha","lerpVectors","v1","v2","equals","fromArray","offset","toArray","fromBufferAttribute","attribute","getX","getY","rotateAround","center","c","cos","sin","isMatrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","identity","me","copyPosition","extractBasis","xAxis","yAxis","zAxis","setFromMatrixColumn","makeBasis","extractRotation","scaleX","scaleY","scaleZ","makeRotationFromEuler","euler","isEuler","d","f","order","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","zero","one","q","compose","lookAt","eye","up","crossVectors","multiplyMatrices","premultiply","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","applyToBufferAttribute","count","getZ","applyMatrix4","setXYZ","determinant","transpose","tmp","setPosition","getInverse","throwOnDegenerate","t11","t12","t13","t14","det","msg","detInv","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","theta","makeRotationY","makeRotationZ","makeRotationAxis","axis","tx","ty","makeScale","makeShear","quaternion","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","sx","sy","sz","decompose","vector","matrix","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","left","right","top","bottom","near","far","makeOrthographic","h","p","slerp","qa","qb","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","sqrSin","tDir","onChangeCallback","isQuaternion","setFromEuler","update","c1","c2","c3","s1","s2","s3","setFromAxisAngle","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","setFromUnitVectors","r","vFrom","vTo","angleTo","acos","rotateTowards","step","inverse","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","onChange","callback","isVector3","setZ","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","project","camera","matrixWorldInverse","projectionMatrix","unproject","matrixWorld","transformDirection","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","normal","dz","setFromSpherical","setFromSphericalCoords","radius","phi","sinPhiRadius","setFromCylindrical","setFromCylindricalCoords","setFromMatrixPosition","setFromMatrixScale","isMatrix3","setFromMatrix4","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","rotate","translate","ImageUtils","getDataURL","image","canvas","HTMLCanvasElement","document","createElementNS","width","height","getContext","ImageData","putImageData","drawImage","toDataURL","textureId","Texture","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","onUpdate","Vector4","WebGLRenderTarget","options","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","WebGLRenderTargetCube","activeCubeFace","activeMipMapLevel","DataTexture","data","Box3","Infinity","Sphere","Plane","constant","Frustum","p0","p1","p2","p3","p4","p5","planes","create","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","metadata","generator","wrap","images","url","isArray","dispose","transformUv","uv","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","getW","isWebGLRenderTarget","setSize","isWebGLRenderTargetCube","isDataTexture","isBox3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","object","expandByObject","box","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","scope","traverse","node","geometry","isGeometry","vertices","isBufferGeometry","attributes","updateMatrixWorld","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","closestPoint","sphere","clampPoint","intersectsPlane","plane","intersectsTriangle","v0","f0","f1","f2","testAxis","extents","triangleNormal","satForAxes","axes","j","triangle","distanceToPoint","clampedPoint","getBoundingSphere","intersect","union","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","direction","delta","denominator","start","intersectsLine","startSign","endSign","end","coplanarPoint","m1","optionalNormalMatrix","normalMatrix","referencePoint","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","boundingSphere","computeBoundingSphere","intersectsSprite","sprite","negRadius","distance","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","UniformsUtils","merge","uniforms","merged","u","uniforms_src","uniforms_dst","parameter_src","isColor","ColorKeywords","Color","setRGB","setHex","setStyle","hex","setHSL","hue2rgb","style","handleAlpha","string","parseFloat","exec","color","components","parseInt","charAt","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","copySRGBToLinear","SRGBToLinear","copyLinearToSRGB","LinearToSRGB","convertSRGBToLinear","convertLinearToSRGB","getHex","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","hsl","addColors","color1","color2","lerpHSL","hslA","hslB","UniformsLib","diffuse","opacity","map","uvTransform","alphaMap","specularmap","specularMap","envmap","envMap","flipEnvMap","reflectivity","refractionRatio","maxMipLevel","aomap","aoMap","aoMapIntensity","lightmap","lightMap","lightMapIntensity","emissivemap","emissiveMap","bumpmap","bumpMap","bumpScale","normalmap","normalMap","normalScale","displacementmap","displacementMap","displacementScale","displacementBias","roughnessmap","roughnessMap","metalnessmap","metalnessMap","gradientmap","gradientMap","fog","fogDensity","fogNear","fogFar","fogColor","lights","ambientLightColor","directionalLights","properties","shadow","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotShadowMap","spotShadowMatrix","pointLights","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ShaderLib","basic","vertexShader","fragmentShader","lambert","emissive","phong","specular","shininess","standard","roughness","metalness","envMapIntensity","matcap","dashed","dashSize","totalSize","depth","background","t2D","cube","tCube","tFlip","equirect","tEquirect","distanceRGBA","referencePosition","nearDistance","farDistance","WebGLAnimation","isAnimating","animationLoop","onAnimationFrame","time","frame","requestAnimationFrame","stop","setAnimationLoop","setContext","WebGLAttributes","gl","buffers","WeakMap","isInterleavedBufferAttribute","remove","deleteBuffer","buffer","delete","bufferType","createBuffer","usage","dynamic","DYNAMIC_DRAW","STATIC_DRAW","bindBuffer","bufferData","onUploadCallback","FLOAT","Float32Array","Float64Array","Uint16Array","UNSIGNED_SHORT","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","Int32Array","INT","Int8Array","BYTE","Uint8Array","UNSIGNED_BYTE","bytesPerElement","BYTES_PER_ELEMENT","updateBuffer","updateRange","bufferSubData","subarray","Face3","materialIndex","vertexNormals","vertexColors","Euler","_order","DefaultOrder","Layers","mask","physical","clearCoat","clearCoatRoughness","RotationOrders","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","channel","enable","toggle","disable","test","layers","object3DId","Object3D","parent","children","DefaultUp","onRotationChange","onQuaternionChange","enumerable","modelViewMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","userData","isObject3D","onBeforeRender","onAfterRender","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","q1","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","updateWorldMatrix","isCamera","getObjectById","id","getObjectByProperty","getObjectByName","child","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverseVisible","traverseAncestors","force","updateParents","updateChildren","geometries","materials","shapes","serialize","library","element","JSON","stringify","isMesh","isLine","isPoints","parameters","shape","material","uuids","extractFromCache","cache","values","recursive","parse","geometryId","Geometry","colors","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","BufferAttribute","itemSize","normalized","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","DirectGeometry","normals","uvs","uvs2","groups","arrayMax","face","jl","computeBoundingBox","obj","fromBufferGeometry","indices","positions","uv2","tempNormals","tempUVs","tempUVs2","addFace","group","computeFaceNormals","cb","ab","fl","vA","vB","vC","computeVertexNormals","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","colors1","colors2","vertex","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","mergeVertices","verticesMap","unique","changes","precision","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","_id","sort","materialIndexSort","newUvs1","newUvs2","normalsHash","colorsHash","uvsHash","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","enabled","hash","k","kl","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","isBufferAttribute","setArray","setDynamic","copyAt","index1","index2","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","computeGroups","fromGeometry","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","bufferGeometryId","BufferGeometry","morphAttributes","drawRange","BoxGeometry","widthSegments","heightSegments","depthSegments","BoxBufferGeometry","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","addGroup","setIndex","addAttribute","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","getIndex","getAttribute","removeAttribute","clearGroups","setDrawRange","needsUpdate","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","pA","pB","pC","normalizeNormals","attribute1","attributeArray1","attribute2","attributeArray2","toNonIndexed","geometry2","array2","keys","morphAttribute","materialId","Material","blending","side","flatShading","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","premultipliedAlpha","overdraw","ShaderMaterial","defines","linewidth","wireframe","wireframeLinewidth","clipping","skinning","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","setValues","Ray","origin","Triangle","MeshBasicMaterial","combine","wireframeLinecap","wireframeLinejoin","Mesh","drawMode","updateMorphTargets","WebGLBackground","renderer","state","objects","clearColor","planeMesh","boxMesh","clearAlpha","setClear","getClearColor","setClearColor","getClearAlpha","setClearAlpha","render","renderList","scene","forceClear","autoClear","clear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","WebGLBufferRenderer","info","capabilities","mode","setMode","drawArrays","renderInstances","extension","isWebGL2","maxInstancedCount","WebGLCapabilities","maxAnisotropy","getMaxPrecision","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","WebGL2RenderingContext","maxPrecision","logarithmicDepthBuffer","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","maxCubemapSize","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_ATTRIBS","maxVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","vertexTextures","floatFragmentTextures","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","floatVertexTextures","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","viewMatrix","i4","init","enableLocalClipping","beginShadows","endShadows","setState","fromCache","nGlobal","lGlobal","clippingState","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","buffergeometry","memory","_bufferGeometry","geometryAttributes","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER","getWireframeAttribute","geometryIndex","WebGLIndexedBufferRenderer","drawElements","WebGLInfo","calls","triangles","lines","programs","autoReset","reset","instanceCount","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","LINE_LOOP","POINTS","absNumericalSort","WebGLMorphtargets","influencesList","morphInfluences","program","objectInfluences","morphTargetInfluences","influences","influence","getUniforms","setValue","WebGLObjects","updateList","CubeTexture","DataTexture3D","isMaterial","onBeforeCompile","newValue","currentValue","isRoot","emissiveIntensity","normalMapType","sizeAttenuation","gapSize","srcPlanes","dstPlanes","isShaderMaterial","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","segCenter","segDir","optionalPointOnRay","optionalPointOnSegment","segExtent","s0","sqrDist","extDet","a01","b0","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","getUV","barycoord","uv1","uv3","setFromPointsAndIndices","i0","i1","i2","getArea","getMidpoint","getPlane","result","vab","vac","vbc","vap","vbp","vcp","d4","vc","d5","d6","vb","va","isMeshBasicMaterial","setDrawMode","morphTargetDictionary","ml","String","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","intersectionPoint","intersectionPointWorld","checkIntersection","raycaster","checkBufferGeometryIntersection","intersection","intersects","groupMaterial","faceIndex","fvA","fvB","fvC","isMultiMaterial","faceMaterial","tl","targets","uvs_f","isDataTexture3D","emptyTexture","emptyTexture3d","emptyCubeTexture","UniformContainer","seq","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","allocTexUnits","allocTextureUnit","setValue1f","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2f","uniform2fv","setValue3fv","uniform3f","uniform3fv","setValue4fv","uniform4f","uniform4fv","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","setValue4fm","uniformMatrix4fv","setValueT1","unit","setTexture2D","setValueT3D1","setTexture3D","setValueT6","setTextureCube","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","getSingularSetter","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","updateCache","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","units","setValueT6a","getPureArraySetter","SingleUniform","activeInfo","PureArrayUniform","StructuredUniform","RePathPart","addUniform","container","uniformObject","parseUniform","path","pathLength","lastIndex","matchEnd","idIsIndex","subscript","next","WebGLUniforms","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","addLineNumbers","split","join","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","setOptional","upload","seqWithValue","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMapping","toneMappingName","generateExtensions","rendererExtensions","chunks","envMapCubeUV","objectSpaceNormalMap","filter","filterEmptyLine","generateDefines","fetchAttributeLocations","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","include","unrollLoops","snippet","unroll","WebGLProgram","code","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","gammaFactorDefine","prefixVertex","prefixFragment","customExtensions","customDefines","createProgram","isRawShaderMaterial","supportsVertexTextures","maxBones","useFog","fogExp","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","outputEncoding","mapEncoding","matcapEncoding","envMapEncoding","emissiveMapEncoding","depthPacking","isGLSL3ShaderMaterial","versionRegex","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","programLog","cachedUniforms","cachedAttributes","getProgramInfoLog","trim","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","prefix","deleteShader","getAttributes","destroy","deleteProgram","usedTimes","WebGLPrograms","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshMatcapMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","SpriteMaterial","parameterNames","getTextureEncodingFromMap","gammaOverrideLinear","getParameters","shadows","nClipPlanes","nClipIntersection","shaderID","isSkinnedMesh","allocateBones","skeleton","bones","nVertexUniforms","nVertexMatrices","currentRenderTarget","getRenderTarget","gammaOutput","gammaInput","envMapMode","isFogExp2","maxMorphTargets","maxMorphNormals","directional","spot","rectArea","hemi","shadowMap","getProgramCode","acquireProgram","pl","programInfo","releaseProgram","pop","WebGLProperties","painterSortStable","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","renderItem","WebGLRenderLists","lists","UniformsCache","light","halfWidth","halfHeight","WebGLLights","stateID","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","shadowsLength","ambient","vector3","matrix42","setup","intensity","isAmbientLight","isDirectionalLight","bias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderState","lightsArray","shadowsArray","setupLights","pushLight","pushShadow","shadowLight","WebGLRenderStates","renderStates","renderState","WebGLShadowMap","_renderer","_objects","_frustum","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_lightPositionWorld","_MorphingFlag","_SkinningFlag","_NumberOfMaterialVariants","_depthMaterials","_distanceMaterials","_materialCache","cubeDirections","cubeUps","cube2DViewPorts","useMorphing","useSkinning","depthMaterial","distanceMaterial","getDepthMaterial","lightPositionWorld","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","isMeshDistanceMaterial","renderObject","shadowCamera","renderBufferDirect","autoUpdate","_gl","faceCount","_state","BLEND","setTest","setScissorTest","vpWidth","vpHeight","pars","updateProjectionMatrix","isSpotLightShadow","shadowMatrix","setRenderTarget","vpDimensions","WebGLState","utils","colorBuffer","ColorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","enabledCapabilities","compressedTextureFormats","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","VERSION","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","texImage2D","RGBA","emptyTextures","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","setBlending","blendEquationSeparate","convert","blendFuncSeparate","FUNC_ADD","ONE","ONE_MINUS_SRC_ALPHA","blendFunc","ZERO","ONE_MINUS_SRC_COLOR","SRC_COLOR","SRC_ALPHA","setFlipSided","frontFace","CW","CCW","setCullFace","cullFace","CULL_FACE","BACK","FRONT","FRONT_AND_BACK","setPolygonOffset","factor","POLYGON_OFFSET_FILL","activeTexture","webglSlot","TEXTURE0","TEXTURE_2D","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","initAttributes","enableAttribute","disableUnusedAttributes","disableVertexAttribArray","getCompressedTextureFormats","formats","COMPRESSED_TEXTURE_FORMATS","useProgram","setMaterial","frontFaceCW","setLineWidth","lineWidth","SCISSOR_TEST","webglType","webglTexture","boundTexture","compressedTexImage2D","texImage3D","WebGLTextures","_videoTextures","_canvas","clampToMaxSize","maxSize","textureNeedsGenerateMipmaps","generateMipmap","__maxMipLevel","LOG2E","getInternalFormat","glFormat","glType","RED","R32F","HALF_FLOAT","R16F","R8","RGB","RGB32F","RGB16F","RGB8","RGBA32F","RGBA16F","RGBA8","filterFallback","LINEAR","onTextureDispose","deallocateTexture","textureProperties","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","isVideoTexture","onRenderTargetDispose","renderTarget","deallocateRenderTarget","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","slot","updateVideoTexture","__version","complete","uploadTexture","setTextureParameters","textureType","isPowerOfTwoImage","TEXTURE_WRAP_S","TEXTURE_WRAP_T","CLAMP_TO_EDGE","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","TEXTURE_3D","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","textureNeedsPowerOfTwo","makePowerOfTwo","HTMLImageElement","ImageBitmap","glInternalFormat","mipmap","isDepthTexture","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DEPTH_STENCIL","isCompressedTexture","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthRenderbuffer","isCube","setupDepthTexture","webglDepthTexture","createRenderbuffer","isCompressed","cubeImage","setTextureCubeDynamic","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","WebGLUtils","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","HALF_FLOAT_OES","ALPHA","LUMINANCE","LUMINANCE_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","MIN","MAX","MIN_EXT","MAX_EXT","UNSIGNED_INT_24_8","UNSIGNED_INT_24_8_WEBGL","Group","Camera","projectionMatrixInverse","PerspectiveCamera","fov","aspect","zoom","focus","view","filmGauge","filmOffset","ArrayCamera","cameras","WebVRManager","device","frameData","poseTarget","controllers","standingMatrix","standingMatrixInverse","frameOfReferenceType","window","VRFrameData","onVRDisplayPresentChange","tempQuaternion","tempPosition","cameraL","bounds","cameraR","cameraVR","currentSize","currentPixelRatio","isPresenting","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","animation","triggers","findGamepad","gamepads","navigator","getGamepads","gamepad","startsWith","getController","controller","getDevice","setDevice","setFrameOfReferenceType","setPoseTarget","getCamera","userHeight","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","pose","poseObject","orientation","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","updateControllers","hasPosition","buttonId","buttons","pressed","getStandingMatrix","submitFrame","WebXRManager","session","frameOfReference","inputSources","onSessionEvent","inputSource","onSessionEnd","setFramebuffer","updateCamera","XRDevice","setCompatibleXRDevice","setSession","baseLayer","XRWebGLLayer","requestFrameOfReference","then","getInputSources","onAnimationFrameCallback","getDevicePose","views","getViewport","getViewMatrix","inputPose","getInputPose","targetRay","transformMatrix","pointerMatrix","THREE","WebGLRenderer","_context","_alpha","_depth","_stencil","_antialias","antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","currentRenderList","currentRenderState","domElement","sortObjects","toneMappingExposure","toneMappingWhitePoint","_this","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","_isContextLost","_framebuffer","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentGeometryProgram","_currentCamera","_currentArrayCamera","_currentViewport","_currentScissor","_currentScissorTest","_usedTextureUnits","_width","_height","_pixelRatio","_viewport","_scissor","_scissorTest","_clipping","_clippingEnabled","_localClippingEnabled","_vector3","getTargetPixelRatio","contextAttributes","onContextLost","onContextRestore","message","initGLContext","vr","preventDefault","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReference","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","vertexAttribPointer","normalArray","uvArray","colorArray","setProgram","updateBuffers","rangeFactor","setupVertexAttributes","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","compile","isLight","initMaterial","renderObjects","overrideMaterial","isArrayCamera","camera2","isImmediateRenderObject","renderObjectImmediate","materialProperties","lightsHash","lightsStateHash","programChange","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","isMeshPhongMaterial","isMeshStandardMaterial","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","refreshUniformsFog","isFog","density","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","refreshUniformsStandard","isMeshMatcapMaterial","refreshUniformsMatcap","isMeshDepthMaterial","refreshUniformsDepth","refreshUniformsDistance","isMeshNormalMaterial","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","projectObject","opaqueObjects","transparentObjects","textureUnit","setTexture","readRenderTargetPixels","restore","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","FogExp2","Fog","Scene","InterleavedBuffer","InterleavedBufferAttribute","interleavedBuffer","Sprite","float32Array","LOD","levels","Skeleton","boneInverses","calculateInverses","Bone","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","initBones","bind","normalizeSkinWeights","linecap","linejoin","Line","LineSegments","LineLoop","Points","VideoTexture","video","CompressedTexture","CanvasTexture","DepthTexture","WireframeGeometry","o","ol","edge","edges","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","detail","PolyhedronBufferGeometry","vertexBuffer","uvBuffer","subdivideFace","cols","aj","bj","rows","pushVertex","getVertexByIndex","correctUV","azimuth","subdivide","appplyRadius","generateUVs","inclination","correctUVs","centroid","azi","correctSeam","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","DodecahedronGeometry","DodecahedronBufferGeometry","TubeGeometry","tubularSegments","radialSegments","closed","taper","bufferGeometry","TubeBufferGeometry","tangents","binormals","frames","computeFrenetFrames","P","generateSegment","getPointAt","N","B","generateBufferData","generateIndices","TorusKnotGeometry","tube","heightScale","TorusKnotBufferGeometry","P1","P2","T","calculatePositionOnCurve","cu","su","quOverP","cs","TorusGeometry","arc","TorusBufferGeometry","isGroup","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","setViewOffset","fullWidth","fullHeight","offsetX","offsetY","clearViewOffset","skew","isInterleavedBuffer","intersectPoint","worldScale","mvPosition","alignedPosition","rotatedPosition","viewWorldMatrix","transformVertex","vertexPosition","addLevel","getObjectForDistance","matrixPosition","bone","isBone","offsetMatrix","identityMatrix","getBoneByName","gbone","pos","rotq","scl","sw","vec","skinWeight","computeLineDistances","positionAttribute","linePrecision","localPrecision","localPrecisionSq","vStart","vEnd","interSegment","interRay","distSq","nbVertices","threshold","params","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","readyState","HAVE_CURRENT_DATA","isCanvasTexture","Earcut","triangulate","holeIndices","dim","hasHoles","invSize","outerLen","outerNode","linkedList","eliminateHoles","earcutLinked","clockwise","last","signedArea","insertNode","removeNode","filterPoints","again","steiner","area","prev","ear","pass","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","zOrder","nextZ","prevZ","locallyInside","isValidDiagonal","splitPolygon","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","mx","my","tanMin","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","q2","inside","Node","an","bp","sum","ShapeUtils","contour","isClockWise","pts","triangulateShape","holes","removeDupEndPts","addContour","holeIndex","forEach","ExtrudeGeometry","ExtrudeBufferGeometry","verticesArray","addShape","placeholder","curveSegments","steps","bevelEnabled","bevelThickness","bevelSize","bevelSegments","extrudePath","uvgen","UVGenerator","WorldUVGenerator","amount","extrudePts","splineTube","binormal","position2","ahole","hl","extrudeByPath","getSpacedPoints","shapePoints","extractPoints","reverse","scalePt2","pt","bs","vert","vlen","flen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","sf","v_trans_lensq","direction_eq","contourMovements","holesMovements","oneHoleMovements","verticesMovements","sidewalls","layeroffset","sl","slen1","slen2","f4","f3","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","buildLidFaces","buildSideFaces","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","TextGeometry","text","TextBufferGeometry","font","isFont","generateShapes","SphereGeometry","phiStart","phiLength","thetaStart","thetaLength","SphereBufferGeometry","thetaEnd","grid","verticesRow","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","segment","radiusStep","thetaSegmentLevel","LatheGeometry","segments","LatheBufferGeometry","base","inverseSegments","n1","n2","ShapeGeometry","ShapeBufferGeometry","shapeHole","indexOffset","shapeVertices","shapeHoles","toJSON$1","EdgesGeometry","thresholdAngle","thresholdDot","sourceVertices","face1","face2","CylinderGeometry","radiusTop","radiusBottom","openEnded","CylinderBufferGeometry","indexArray","generateCap","centerIndexStart","centerIndexEnd","cosTheta","sinTheta","generateTorso","slope","indexRow","ConeGeometry","ConeBufferGeometry","CircleGeometry","CircleBufferGeometry","Geometries","freeze","RawShaderMaterial","createElement","fillStyle","fillRect","Materials","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","transform","DefaultLoadingManager","loading","FileLoader","manager","CompressedTextureLoader","_parser","DataTextureLoader","ImageLoader","CubeTextureLoader","TextureLoader","Curve","arcLengthDivisions","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","ArcCurve","aRadius","CubicPoly","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","t2","calc","load","cached","dataUriRegex","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","toLowerCase","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","header","open","callbacks","status","withCredentials","overrideMimeType","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","loader","loadTexture","texDatas","loaded","mipmapCount","isCubemap","texData","crossOrigin","onImageLoad","onImageError","substr","src","setCrossOrigin","urls","isJPEG","search","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","current","updateArcLengths","arcLengths","targetArcLength","comparison","lengthBefore","getTangent","pt1","getTangentAt","mat","MAX_VALUE","tz","fromJSON","json","isEllipseCurve","deltaAngle","twoPi","samePoints","isArcCurve","pz","CatmullRomCurve3","curveType","CatmullRom","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezier","CubicBezierCurve","v3","CubicBezierCurve3","LineCurve","LineCurve3","QuadraticBezierCurve","QuadraticBezierCurve3","SplineCurve","isCatmullRomCurve3","intPoint","weight","isCubicBezierCurve","isCubicBezierCurve3","isLineCurve","tangent","isLineCurve3","isQuadraticBezierCurve","isQuadraticBezierCurve3","isSplineCurve","Curves","CurvePath","curves","autoClose","Path","currentPoint","Shape","Light","HemisphereLight","LightShadow","SpotLightShadow","SpotLight","power","PointLight","OrthographicCamera","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","segmentLength","lens","cacheLengths","sums","resolution","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","npts","absarc","absellipse","ellipse","firstPoint","lastPoint","getPointsHoles","holesPts","isOrthographicCamera","zoomW","zoomH","scaleW","scaleH","AnimationUtils","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","times","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","valueSize","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","LinearInterpolant","DiscreteInterpolant","KeyframeTrack","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","duration","tracks","resetDuration","getTrackTypeForValueTypeName","typeName","parseKeyframeTrack","trackType","MaterialLoader","BufferGeometryLoader","evaluate","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","settings","DefaultSettings_","getSettings_","copySampleValue_","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","offset1","offset0","weight1","weight0","track","getInterpolation","ValueTypeName","InterpolantFactoryMethodDiscrete","getValueSize","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","factoryMethod","createInterpolant","shift","timeOffset","timeScale","startTime","endTime","nKeys","validate","valid","prevTime","currTime","optimize","smoothInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","jsonTracks","frameTime","fps","clip","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","pattern","parts","animationMorphTargets","clips","parseAnimation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","setTextures","getTexture","shading","typedArray","TYPED_ARRAYS","drawcalls","offsets","Loader","Handlers","handlers","regex","onLoadStart","onLoadProgress","onLoadComplete","initMaterials","texturePath","createMaterial","BlendingMode","textureLoader","materialLoader","fullPath","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","JSONLoader","ObjectLoader","setResourcePath","resourcePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","nUvLayers","parseSkin","influencesPerVertex","parseMorphing","dstVertices","srcVertices","morphColors","parseAnimations","outputAnimations","morphAnimationClips","substring","setTexturePath","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","geometryShapes","loadImage","currentUrl","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","ImageBitmapLoader","createImageBitmap","fetch","ShapePath","subPaths","currentPath","Font","createPaths","chars","line_height","yMax","yMin","underlineThickness","paths","char","createPath","glyph","glyphs","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","_cachedOutline","action","ha","FontLoader","setOptions","res","blob","imageBitmap","catch","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","betterShapeHoles","tmpPoints","tmpHoles","newShapes","newShapeHoles","mainIdx","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","AudioContext","webkitAudioContext","AudioLoader","StereoCamera","eyeSep","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","AudioListener","gain","createGain","connect","destination","Audio","getInput","autoplay","loop","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","PositionalAudio","panner","createPanner","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getOutput","PropertyMixer","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","bufferCopy","decodeAudioData","audioBuffer","instance","eyeRight","eyeLeft","xmin","xmax","eyeSepOnProjection","ymax","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","setValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","setNodeSource","audioNode","setMediaElementSource","mediaElement","createMediaElementSource","setBuffer","play","createBufferSource","onended","onEnded","pause","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","setDirectionalCone","coneInnerAngle","coneOuterAngle","coneOuterGain","getFrequencyData","getByteFrequencyData","getAverageFrequency","accumulate","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","lineGeometry","coneGeometry","RESERVED_CHARS_RE","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","rootNode","findNode","nodeName","AnimationObjectGroup","nCachedObjects_","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","inUse","bindingsPerObject","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","interpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","AnimationMixer","root","_root","_initMemoryManager","_accuIndex","Uniform","InstancedBufferGeometry","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","PointCloud","ascSort","intersectObject","Clock","autoStart","oldTime","elapsedTime","running","Spherical","Cylindrical","Box2","Line3","ImmediateRenderObject","VertexNormalsHelper","nNormals","objGeometry","SpotLightHelper","cone","getBoneList","boneList","SkeletonHelper","PointLightHelper","sphereSize","RectAreaLightHelper","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","FaceNormalsHelper","DirectionalLightHelper","lightPlane","targetLine","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","BoxHelper","Box3Helper","PlaneHelper","positions2","ArrowHelper","headLength","headWidth","setDirection","AxesHelper","Face4","firstValidIndex","bindings","unbind","isAnimationObjectGroup","sanitizeNodeName","reservedRe","RegExp","wordChar","wordCharOrDot","directoryRe","nodeRe","objectRe","propertyRe","trackRe","supportedObjectNames","matches","results","objectName","objectIndex","propertyIndex","lastDot","searchNodeSubtree","childNode","subTreeNode","_getValue_unavailable","_setValue_unavailable","BindingType","Direct","EntireArray","ArrayElement","HasFromToArray","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","GetterByBindingType","resolvedProperty","SetterByBindingTypeAndVersioning","setValue_direct","targetObject","setValue_array","dest","setValue_arrayElement","setValue_fromArray","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","halt","startTimeScale","endTimeScale","now","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_update","deltaTime","timeDirection","timeRunning","_updateTimeScale","clipTime","_updateTime","_updateWeight","propertyMixers","interpolantValue","loopCount","pingPong","_setEndings","handle_stop","loopDelta","pending","atStart","atEnd","weightNow","weightThen","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","remove_empty_map","_","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","setFromCamera","coords","intersectObjects","performance","Date","getElapsedTime","getDelta","newTime","other","makeSafe","setFromCartesianCoords","distanceSq","closestPointToPointParameter","startP","startEnd","clampToLine","startEnd2","objPos","objNorm","coneLength","coneWidth","boneMatrix","matrixWorldInv","setPoint","setColor","LineStrip","LinePieces","MeshFaceMaterial","MultiMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","ClosedSplineCurve3","SplineCurve3","Spline","AxisHelper","BoundingBoxHelper","EdgesHelper","WireframeHelper","XHRLoader","BinaryTextureLoader","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","initFromArray","getControlPointsArray","reparametrizeByArcLength","setColors","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","midpoint","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","copyIndicesArray","addIndex","addDrawCall","clearDrawCalls","computeOffsets","getArrays","addShapeList","wrapAround","wrapRGB","metal","clearTarget","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","shadowMapCullFace","renderReverseSided","renderSingleSided","standing","getData","updateCubeMap","GeometryUtils","geometry1","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","SceneUtils","createMultiMaterialObject","detach","attach","LensFlare","_gsScope","global","TweenLite","moduleName","_exports","_doc","_globals","GreenSockGlobals","_namespace","_ticker","_tickerActive","ns","gs","_slice","_emptyFunc","_isArray","_defLookup","Definition","dependencies","sc","gsClass","_classes","check","cur","cl","missing","_gsDefine","_class","globals","_baseParams","Ease","extraParams","_func","_type","_power","_params","_easeMap","_easeReg","register","ease","names","types","na","ta","easing","getRatio","_calcEnd","pw","linear","Linear","easeIn","swing","Quad","easeInOut","_eventTarget","useParam","priority","wake","pr","_reqAnimFrame","_cancelAnimFrame","cancelAnimationFrame","_getTime","getTime","_lastUpdate","useRAF","_self","_fps","_req","_gap","_nextTime","_useRAF","_lagThreshold","_adjustedLag","_tick","manual","elapsed","overlap","dispatch","tick","lagSmoothing","adjustedLag","sleep","seamless","visibilityState","Ticker","events","Animation","vars","_duration","_totalDuration","_delay","delay","_timeScale","_active","immediateRender","_reversed","reversed","_rootTimeline","useFrames","_rootFramesTimeline","_time","ticker","_dirty","_gc","_initted","_paused","_totalTime","_rawPrevTime","_next","_last","_onUpdate","_timeline","timeline","_checkTimeout","unref","suppressEvents","atTime","resume","totalTime","restart","includeDelay","totalDuration","invalidate","_enabled","isActive","rawTime","ignoreTimeline","_remove","_kill","kill","_uncache","includeSelf","tween","_swapSelfInParams","_callback","callbackScope","eventCallback","smoothChildTiming","uncapped","_pauseTime","_lazyTweens","_lazyRender","progress","totalProgress","ratio","_sortChildren","includeRepeats","pauseTime","raw","SimpleTimeline","autoRemoveChildren","_first","_recent","insert","align","stagger","prevTween","st","_prev","skipDisable","selector","isSelector","targ","jquery","nodeType","overwrite","_overwrite","_overwriteLookup","defaultOverwrite","_targets","_propLookup","_siblings","_register","_applyOverwrite","_isSelector","_firstPT","_overwrittenProps","_startAt","_notifyPluginsOfEnabled","_lazy","defaultEase","_ease","autoSleep","$","jQuery","querySelectorAll","getElementById","_lazyLookup","_numbersExp","_relExp","_setRatio","val","_tween","_target","fp","_blobDif","startNums","endNums","num","nonNumbers","currentNum","charIndex","_applyPT","setRatio","_addPropTween","prop","overwriteProp","mod","funcParam","stringFilter","getterName","isRelative","pg","defaultStringFilter","_internals","lazyTweens","blobDif","_plugins","_tweenLookup","tweenLookup","_tweenLookupNum","_reservedProps","reservedProps","onComplete","onCompleteParams","onCompleteScope","runBackwards","onUpdateParams","onUpdateScope","onStartParams","onStartScope","onReverseComplete","onReverseCompleteParams","onReverseCompleteScope","onRepeat","onRepeatParams","onRepeatScope","easeParams","yoyo","repeatDelay","autoCSS","lazy","onOverwrite","yoyoEase","none","all","auto","concurrent","allOnStart","preexisting","_nextGCFrame","lazyRender","_updateRoot","tweens","scrub","_gsTweenID","_onOverwrite","overwrittenTween","overwritingTween","killedProps","r1","r2","props","siblings","changed","curTween","globalStart","overlaps","oCount","zeroDur","_checkOverlap","reference","ts","_init","initPlugins","startVars","op","dur","immediate","config","_easeType","_easePower","_initProps","_onPluginEvent","propLookup","overwrittenProps","plugin","css","_autoCSS","_onInitTween","_priority","_overwriteProps","_onInitAllProps","_onDisable","_onEnable","isComplete","rawPrevTime","prevRawPrevTime","simultaneousOverwrite","killProps","record","killed","firstPT","_tempKill","fromTo","fromVars","toVars","delayedCall","getTweensOf","onlyActive","killTweensOf","killDelayedCallsTo","TweenPlugin","_propName","_super","API","_addTween","lookup","_mod","_roundProps","pt2","first","activate","plugins","propName","overwriteProps","initAll","Plugin","_gsQueue","nonGlobals","com","greensock","core","Power0","Power1","Power2","Power3","Power4","TimelineLite","_labels","TweenLiteInternals","_copy","_applyCycle","alt","cycle","_pauseCallback","pauseCallback","_forcingPlayhead","_hasPause","Engine","TweenMax","staggerTo","onCompleteAll","onCompleteAllParams","onCompleteAllScope","staggerFrom","staggerFromTo","_parseTimeOrLabel","exportRoot","ignoreDelayedCalls","hasNegativeStart","curTime","beforeRawTime","addLabel","removeLabel","append","offsetOrLabel","insertMultiple","appendMultiple","label","addPause","getLabelTime","timeOrLabel","appendIfAbsent","ignore","clippedDuration","recent","gotoAndPlay","gotoAndStop","internalForce","pauseTween","totalDur","prevStart","prevTimeScale","prevPaused","_hasPausedChild","_cycle","_repeatDelay","getChildren","nested","timelines","ignoreBeforeTime","cnt","disabled","_contains","shiftChildren","adjustLabels","labels","_calculatingDuration","usesFrames","wrapRepeats","_repeat","TimelineMax","_yoyo","_easeNone","addCallback","removeCallback","removePause","tweenTo","isFromTo","tweenFromTo","fromPosition","toPosition","cycleDuration","prevTotalTime","prevCycle","_locked","backwards","recTotalTime","recCycle","recRawPrevTime","recTime","getActive","getLabelAfter","getLabelsArray","getLabelBefore","currentLabel","_blankArray","_yoyoEase","updateTo","curRatio","inv","endValue","allTo","finalComplete","fromCycle","allFrom","allFromTo","isTweening","_getChildrenOf","includeTimelines","getAllTweens","killAll","delayedCalls","isDC","allTrue","killChildTweensOf","curParent","parentNode","_changePause","pauseAll","resumeAll","globalTimeScale","TweenMaxBase","CSSPlugin","_hasPriority","_suffixMap","_cs","_specialProps","defaultTransformPerspective","defaultSkewType","defaultSmoothOrigin","suffixMap","fontSize","padding","margin","perspective","lineHeight","_numExp","_autoRound","_reqSafariFix","_isSafari","_isFirefox","_isSafariLT6","_ieVers","_index","_relNumExp","_valuesExp","_NaNExp","_suffixExp","_opacityExp","_opacityValExp","_alphaFilterExp","_rgbhslExp","_capsExp","_camelExp","_urlExp","_camelFunc","_horizExp","_ieGetMatrixExp","_ieSetMatrixExp","_commasOutsideParenExp","_complexExp","_DEG2RAD","_RAD2DEG","_forcePT","_dummyElement","_createElement","_tempDiv","_tempImg","_agent","userAgent","_supportsOpacity","$1","cssText","_getIEOpacity","currentStyle","_log","_prefixCSS","_prefix","_checkPropPrefix","_getComputedStyle","defaultView","getComputedStyle","_getStyle","dflt","rv","getPropertyValue","_convertToPixels","convertToPixels","sfx","recurse","horiz","pix","neg","precise","clientWidth","clientHeight","appendChild","body","_gsCache","removeChild","cacheWidths","_calculateOffset","calculateOffset","_getAllStyles","tr","_transformPropCSS","_transformProp","_getTransform","skewX","_supports3D","rotationX","rotationY","_cssDif","forceLookup","difs","mpt","MiniPropTween","firstMPT","_dimensions","_margins","_getDimension","getCTM","_isSVG","getBBox","offsetWidth","offsetHeight","_parsePosition","recObj","oxp","oyp","oxr","oyr","ox","oy","_parseChange","_parseVal","_parseAngle","directionalEnd","dif","cap","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","fuchsia","olive","yellow","orange","gray","purple","green","red","pink","cyan","_hue","m2","_parseColor","parseColor","toHSL","wasHSL","_formatColors","temp","_colorExp","parsed","colorStringFilter","combined","_getFormatter","clr","collapsible","multi","dColor","formatter","dVals","pfx","delim","numVals","dSfx","vals","_getEdgeParser","cssp","_setPluginRatio","str","proxy","autoRotate","xs0","xs1","CSSPropTween","_parseToProxy","shallow","bpt","xp","_transform","oldForce","rxp","_addNonTweeningNumericPT","_parseComplex","parseComplex","clrs","ba","xi","ni","bv","ev","bnums","enums","bn","hasAlpha","cv","useHSL","ea","autoRound","appendXtra","xfirst","pad","SpecialProp","defaultValue","keyword","_registerComplexSpecialProp","defaults","_registerPluginProp","pluginName","pluginClass","_cssRegister","kwd","bi","ei","registerSpecialProp","onInitTween","useSVGTransformAttr","_transformProps","_useSVGTransformAttr","svg","rect","_transformOriginProp","Transform","force3D","defaultForce3D","_SVGElement","SVGElement","_createSVG","reg","setAttributeNS","_docElement","documentElement","_forceSVGTransformAttr","chrome","getBoundingClientRect","_parseSVGOrigin","local","decoratee","absolute","smoothOrigin","skipRecord","tm","xOrigin","yOrigin","xOriginOld","yOriginOld","_gsTransform","_getMatrix","hasAttribute","_identity2DMatrix","xOffset","yOffset","setAttribute","_getBBoxHack","swapIfPossible","bbox","ownerSVGElement","oldParent","oldSibling","nextSibling","oldCSS","display","_originalGetBBox","insertBefore","_getBBox","force2D","isDefault","dec","_removeProp","baseVal","consolidate","getTransform","rec","invX","zOrigin","t3","skewType","_setIETransformRatio","ang","xPercent","yPercent","mult","marg","ieOffsetX","ieOffsetY","_setTransformRatio","set3DTransformRatio","setTransformRatio","isSVG","skewY","parsingProp","_lastParsedTransform","scaleFunc","swapFunc","originalGSTransform","has3D","hasChange","dr","endRotations","parseTransform","orig","rotationZ","transformOrigin","svgOrigin","transformPerspective","directionalRotation","shortRotation","shortRotationX","shortRotationY","_transformType","ea1","es2","bs2","es","en","esfx","bsfx","rel","hn","vn","em","pct","backgroundPositionX","backgroundPositionY","clipTop","clipRight","clipBottom","clipLeft","bw","_setIEOpacityRatio","skip","xn1","isAutoAlpha","removeProperty","_setClassNameRatio","_gsClassPT","difData","cnpt","cnptLookup","_classNamePT","_setClearPropsRatio","clearTransform","transformParse","_vars","zIndex","tpt","threeD","_addLazySet","className","WebkitBackfaceVisibility","_linkCSSP","sp","isStr","strictUnits","xs2","xn2","xs3","xn3","xs4","xn4","xs5","_enableTransforms","lazySet","autoAlpha","visibility","_getChildStyles","childNodes","cascadeTo","AttrPlugin","RoundPropsPlugin","_getRoundFunc","_roundLinkedList","rp","roundProps","rpt","_add","DirectionalRotationPlugin","finals","useRadians","_r1","_r2","_r3","_corProps","Segment","da","ca","_correlate","cubicToQuadratic","q3","q4","mab","mbc","mcd","mabc","mbcd","m8","_calculateControlPoints","curviness","quad","correlate","seg","mm","cp2","ii","cp1","_parseAnchors","prepend","bezierThrough","quadratic","unshift","_parseBezierData","inc","soft","_addCubicLengths","bez","_parseLengthData","curLS","BezierPlugin","_props","_timeRes","timeResolution","isFunc","second","orientToBezier","_autoRotate","_beziers","_segCount","ld","_length","_lengths","_segments","_l1","_li","_s1","_si","_l2","_curSeg","_s2","_prec","_initialRotations","_startRatio","curIndex","curSeg","notStart","ar","conv","quadraticToCubic","pluginValues","SteppedEase","ExpoScaleEase","RoughEase","_createElastic","_2PI","_HALF_PI","_create","C","_wrap","EaseOut","EaseIn","EaseInOut","aliases","easeOut","EasePoint","gap","_createBack","overshoot","_p1","_p2","Back","SlowMo","linearRatio","yoyoMode","_p","_p3","immediateStart","exp","bump","pnt","randomize","template","strength","invert","def","amplitude","period","find","Elastic","Bounce","Circ","Expo","Sine","_autoActivated","GPUComputationRenderer","sizeX","sizeY","variables","currentTextureIndex","passThruUniforms","passThruShader","createShaderMaterial","addResolutionDefine","materialShader","toFixed","computeFragmentShader","addVariable","variableName","initialValueTexture","variable","renderTargets","setVariableDependencies","createRenderTarget","renderTexture","depVar","found","compute","nextTextureIndex","dl","doRenderTarget","getAlternateRenderTarget","sizeXTexture","sizeYTexture","input","Slider","el","handleEl","querySelector","insideEl","onmousedown","onmousemove","onmouseup","_value","down","pageX","pageY","Counter","innerHTML","classList","inner","numDigits","sequenceEls","sequenceEl","span","setInterval","activeEl","setDigit","CTAButton","onclick","requestProcess","parentElement","dat","gui","dom","doc","link","href","getElementsByTagName","inject","injected","ARR_EACH","ARR_SLICE","BREAK","extend","each","toCall","itr","defer","fnc","isNull","isString","isBoolean","Controller","property","initialValue","__onChange","__onFinishChange","onFinishChange","updateDisplay","isModified","EVENT_MAP","EVENT_MAP_INV","CSS_VALUE_PIXELS","cssValueToPixels","makeSelectable","elem","selectable","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","makeFullscreen","horizontal","vertical","fakeEvent","eventType","aux","evt","createEvent","clientX","clientY","initMouseEvent","bubbles","cancelable","clickCount","initKeyboardEvent","initKeyEvent","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","bool","attachEvent","detachEvent","addClass","classes","removeClass","hasClass","getWidth","getHeight","getOffset","offsetParent","offsetLeft","offsetTop","activeElement","OptionController","superclass","__select","opt","desiredValue","selectedIndex","toReturn","NumberController","numDecimals","__min","__max","__step","__impliedStep","LN10","__precision","NumberControllerBox","__truncationSuspended","prev_y","attempted","__input","onMouseDrag","onMouseUp","onBlur","onMouseDown","blur","roundToDecimal","decimals","tenTo","NumberControllerSlider","styleSheet","o2","__background","__foreground","useDefaultStyles","FunctionController","__button","fire","BooleanController","__prev","__checkbox","checked","interpret","INTERPRETATIONS","litmus","conversions","THREE_CHAR_HEX","read","original","space","write","SIX_CHAR_HEX","CSS_RGB","CSS_RGBA","HEX","conversionName","RGB_ARRAY","RGBA_ARRAY","RGBA_OBJ","RGB_OBJ","HSVA_OBJ","HSV_OBJ","family","conversion","GUI","saveDialogueContents","controllerFactory","ColorController","CenteredDiv","CSS_NAMESPACE","SAVE_DIALOGUE","auto_place_container","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","auto_place_virgin","hide","hideable_guis","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","autoPlace","DEFAULT_WIDTH","resizable","hideable","preset","scrollable","use_local_storage","localStorage","getItem","getLocalStorageHash","setPresetSelectIndex","__preset_select","revert","setWidth","title_row_name","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","useLocalStorage","saveToLocalStorage","setItem","CLASS_MAIN","saved_gui","CLASS_CLOSE_BUTTON","createTextNode","title_row","addRow","getSaveObject","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","addResizeHandle","pmouseX","dragStart","CLASS_DRAG","drag","dragStop","__resize_handle","marginLeft","cursor","firstElementChild","resetWidth","factoryArgs","before","__li","recallSavedValue","li","CLASS_CONTROLLER_ROW","augmentController","__gui","nextElementSibling","listen","method","pc","pb","returned","stopPropagation","borderLeftColor","__color","markPresetModified","liBefore","matched_index","controller_map","remembered","preset_map","location","__save_row","getCurrentPreset","useInitialValues","saved_values","addPresetOption","setSelected","modified","toggleHide","CLASS_TOO_TALL","which","addColor","addFolder","new_gui_params","folders","close","innerHeight","remember","addSaveMenu","div","firstChild","gears","button","button2","button3","select","saveLocally","explain","localStorageCheckBox","showHideExplain","newConstructorTextArea","show","save","presetName","prompt","saveAs","folder","updateDisplays","controllerArray","factory","StringController","__temp","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","value_field","fieldDown","setSV","unbindSV","__state","toOriginal","unbindH","setH","scrollLeft","scrollTop","backgroundColor","boxShadow","border","borderRadius","borderRight","marginRight","linearGradient","textAlign","fontWeight","textShadow","mismatch","COMPONENTS","component","flip","_flip","marginTop","vendors","vendor","math","defineRGBComponent","componentHexIndex","recalculateRGB","defineHSVComponent","recalculateHSV","component_from_hex","hsv_to_rgb","rgb_to_hsv","rgb_to_hex","tmpComponent","hi","NaN","hex_with_component","componentIndex","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","backgroundElement","WebkitTransition","webkitTransform","layout","innerWidth","require","GPGPUComputationRenderer","OrbitControls","SIZE","userAccount","balance","App","mouse","vec2","engine","particles","simplex","SimplexNoise","sphereGroup","sphereRadius","winSize","useOrtho","rotationSpeed","slider","counter","_sendAmount","_pSendAmount","_sendAmountVelocity","_sendAmountForParticle","sendAmount","setupScene","resize","birthThreshold","initialPointDensity","setupGUI","cog","defaultDeformAmplitude","computationPosition","deformAmplitude","needsPulse","newRadius","originalConfig","curlInfluence","computationVelocity","uniformAlpha","loadFromHash","controls","devicePixelRatio","geom","positionArr","uvArr","fillFibonacciSphere","uvx","uvy","bufferAttrs","pointsFS","pointsVS","texturePosition","textureVelocity","hueRange","hueOffset","hueSaturation","hueBrightness","birthThresholdBand","sendAmountDelta","pointScale","intro","circle","setupGPGPU","enableDamping","maxSpeed","posArray","velArray","velocities","gpuCompute","originalPositions","fillTextures","velVar","computeVelocity","posVar","computePosition","positionVariable","velocityVariable","curlSpeed","originPoint","noise2D","newSendAmountForParticle","sendAmountForParticleDelta","refresh","vFOV","arr","samples","increment","dumpHashProperty","param","hot","app","accept","materialName","ui","propertyNameEl","iterateUI","folderName","_ui","innerText","appendTo"],"mappings":"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","file":"dai-swap.725707cd.map","sourceRoot":"..","sourcesContent":["module.exports = 0.000001\n","module.exports = create\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\nfunction create() {\n var out = new Float32Array(2)\n out[0] = 0\n out[1] = 0\n return out\n}","module.exports = clone\n\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {vec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\nfunction clone(a) {\n var out = new Float32Array(2)\n out[0] = a[0]\n out[1] = a[1]\n return out\n}","module.exports = fromValues\n\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\nfunction fromValues(x, y) {\n var out = new Float32Array(2)\n out[0] = x\n out[1] = y\n return out\n}","module.exports = copy\n\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the source vector\n * @returns {vec2} out\n */\nfunction copy(out, a) {\n out[0] = a[0]\n out[1] = a[1]\n return out\n}","module.exports = set\n\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\nfunction set(out, x, y) {\n out[0] = x\n out[1] = y\n return out\n}","module.exports = equals\n\nvar EPSILON = require('./epsilon')\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {vec2} a The first vector.\n * @param {vec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nfunction equals(a, b) {\n var a0 = a[0]\n var a1 = a[1]\n var b0 = b[0]\n var b1 = b[1]\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)))\n}\n","module.exports = exactEquals\n\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {vec2} a The first vector.\n * @param {vec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1]\n}\n","module.exports = add\n\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nfunction add(out, a, b) {\n out[0] = a[0] + b[0]\n out[1] = a[1] + b[1]\n return out\n}","module.exports = subtract\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0]\n out[1] = a[1] - b[1]\n return out\n}","module.exports = require('./subtract')\n","module.exports = multiply\n\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nfunction multiply(out, a, b) {\n out[0] = a[0] * b[0]\n out[1] = a[1] * b[1]\n return out\n}","module.exports = require('./multiply')\n","module.exports = divide\n\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nfunction divide(out, a, b) {\n out[0] = a[0] / b[0]\n out[1] = a[1] / b[1]\n return out\n}","module.exports = require('./divide')\n","module.exports = inverse\n\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to invert\n * @returns {vec2} out\n */\nfunction inverse(out, a) {\n out[0] = 1.0 / a[0]\n out[1] = 1.0 / a[1]\n return out\n}\n","module.exports = min\n\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nfunction min(out, a, b) {\n out[0] = Math.min(a[0], b[0])\n out[1] = Math.min(a[1], b[1])\n return out\n}","module.exports = max\n\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nfunction max(out, a, b) {\n out[0] = Math.max(a[0], b[0])\n out[1] = Math.max(a[1], b[1])\n return out\n}","module.exports = rotate\n\n/**\n * Rotates a vec2 by an angle\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to rotate\n * @param {Number} angle the angle of rotation (in radians)\n * @returns {vec2} out\n */\nfunction rotate(out, a, angle) {\n var c = Math.cos(angle),\n s = Math.sin(angle)\n var x = a[0],\n y = a[1]\n\n out[0] = x * c - y * s\n out[1] = x * s + y * c\n\n return out\n}\n\n","module.exports = floor\n\n/**\n * Math.floor the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to floor\n * @returns {vec2} out\n */\nfunction floor(out, a) {\n out[0] = Math.floor(a[0])\n out[1] = Math.floor(a[1])\n return out\n}\n","module.exports = ceil\n\n/**\n * Math.ceil the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to ceil\n * @returns {vec2} out\n */\nfunction ceil(out, a) {\n out[0] = Math.ceil(a[0])\n out[1] = Math.ceil(a[1])\n return out\n}\n","module.exports = round\n\n/**\n * Math.round the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to round\n * @returns {vec2} out\n */\nfunction round(out, a) {\n out[0] = Math.round(a[0])\n out[1] = Math.round(a[1])\n return out\n}\n","module.exports = scale\n\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\nfunction scale(out, a, b) {\n out[0] = a[0] * b\n out[1] = a[1] * b\n return out\n}","module.exports = scaleAndAdd\n\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\nfunction scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale)\n out[1] = a[1] + (b[1] * scale)\n return out\n}","module.exports = distance\n\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} distance between a and b\n */\nfunction distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1]\n return Math.sqrt(x*x + y*y)\n}","module.exports = require('./distance')\n","module.exports = squaredDistance\n\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\nfunction squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1]\n return x*x + y*y\n}","module.exports = require('./squaredDistance')\n","module.exports = length\n\n/**\n * Calculates the length of a vec2\n *\n * @param {vec2} a vector to calculate length of\n * @returns {Number} length of a\n */\nfunction length(a) {\n var x = a[0],\n y = a[1]\n return Math.sqrt(x*x + y*y)\n}","module.exports = require('./length')\n","module.exports = squaredLength\n\n/**\n * Calculates the squared length of a vec2\n *\n * @param {vec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nfunction squaredLength(a) {\n var x = a[0],\n y = a[1]\n return x*x + y*y\n}","module.exports = require('./squaredLength')\n","module.exports = negate\n\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to negate\n * @returns {vec2} out\n */\nfunction negate(out, a) {\n out[0] = -a[0]\n out[1] = -a[1]\n return out\n}","module.exports = normalize\n\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to normalize\n * @returns {vec2} out\n */\nfunction normalize(out, a) {\n var x = a[0],\n y = a[1]\n var len = x*x + y*y\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len)\n out[0] = a[0] * len\n out[1] = a[1] * len\n }\n return out\n}","module.exports = dot\n\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} dot product of a and b\n */\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1]\n}","module.exports = cross\n\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec3} out\n */\nfunction cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0]\n out[0] = out[1] = 0\n out[2] = z\n return out\n}","module.exports = lerp\n\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec2} out\n */\nfunction lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1]\n out[0] = ax + t * (b[0] - ax)\n out[1] = ay + t * (b[1] - ay)\n return out\n}","module.exports = random\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\nfunction random(out, scale) {\n scale = scale || 1.0\n var r = Math.random() * 2.0 * Math.PI\n out[0] = Math.cos(r) * scale\n out[1] = Math.sin(r) * scale\n return out\n}","module.exports = transformMat2\n\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2} m matrix to transform with\n * @returns {vec2} out\n */\nfunction transformMat2(out, a, m) {\n var x = a[0],\n y = a[1]\n out[0] = m[0] * x + m[2] * y\n out[1] = m[1] * x + m[3] * y\n return out\n}","module.exports = transformMat2d\n\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2d} m matrix to transform with\n * @returns {vec2} out\n */\nfunction transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1]\n out[0] = m[0] * x + m[2] * y + m[4]\n out[1] = m[1] * x + m[3] * y + m[5]\n return out\n}","module.exports = transformMat3\n\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat3} m matrix to transform with\n * @returns {vec2} out\n */\nfunction transformMat3(out, a, m) {\n var x = a[0],\n y = a[1]\n out[0] = m[0] * x + m[3] * y + m[6]\n out[1] = m[1] * x + m[4] * y + m[7]\n return out\n}","module.exports = transformMat4\n\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec2} out\n */\nfunction transformMat4(out, a, m) {\n var x = a[0], \n y = a[1]\n out[0] = m[0] * x + m[4] * y + m[12]\n out[1] = m[1] * x + m[5] * y + m[13]\n return out\n}","module.exports = forEach\n\nvar vec = require('./create')()\n\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nfunction forEach(a, stride, offset, count, fn, arg) {\n var i, l\n if(!stride) {\n stride = 2\n }\n\n if(!offset) {\n offset = 0\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length)\n } else {\n l = a.length\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]\n vec[1] = a[i+1]\n fn(vec, vec, arg)\n a[i] = vec[0]\n a[i+1] = vec[1]\n }\n \n return a\n}","module.exports = limit;\n\n/**\n * Limit the magnitude of this vector to the value used for the `max`\n * parameter.\n *\n * @param {vec2} the vector to limit\n * @param {Number} max the maximum magnitude for the vector\n * @returns {vec2} out\n */\nfunction limit(out, a, max) {\n var mSq = a[0] * a[0] + a[1] * a[1];\n\n if (mSq > max * max) {\n var n = Math.sqrt(mSq);\n out[0] = a[0] / n * max;\n out[1] = a[1] / n * max;\n } else {\n out[0] = a[0];\n out[1] = a[1];\n }\n\n return out;\n}\n","module.exports = {\n EPSILON: require('./epsilon')\n , create: require('./create')\n , clone: require('./clone')\n , fromValues: require('./fromValues')\n , copy: require('./copy')\n , set: require('./set')\n , equals: require('./equals')\n , exactEquals: require('./exactEquals')\n , add: require('./add')\n , subtract: require('./subtract')\n , sub: require('./sub')\n , multiply: require('./multiply')\n , mul: require('./mul')\n , divide: require('./divide')\n , div: require('./div')\n , inverse: require('./inverse')\n , min: require('./min')\n , max: require('./max')\n , rotate: require('./rotate')\n , floor: require('./floor')\n , ceil: require('./ceil')\n , round: require('./round')\n , scale: require('./scale')\n , scaleAndAdd: require('./scaleAndAdd')\n , distance: require('./distance')\n , dist: require('./dist')\n , squaredDistance: require('./squaredDistance')\n , sqrDist: require('./sqrDist')\n , length: require('./length')\n , len: require('./len')\n , squaredLength: require('./squaredLength')\n , sqrLen: require('./sqrLen')\n , negate: require('./negate')\n , normalize: require('./normalize')\n , dot: require('./dot')\n , cross: require('./cross')\n , lerp: require('./lerp')\n , random: require('./random')\n , transformMat2: require('./transformMat2')\n , transformMat2d: require('./transformMat2d')\n , transformMat3: require('./transformMat3')\n , transformMat4: require('./transformMat4')\n , forEach: require('./forEach')\n , limit: require('./limit')\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","module.exports =\n global.performance &&\n global.performance.now ? function now() {\n return performance.now()\n } : Date.now || function now() {\n return +new Date\n }\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","if performance? and performance.now\n module.exports = -> performance.now()\nelse if process? and process.hrtime\n module.exports = -> (getNanoSeconds() - nodeLoadTime) / 1e6\n hrtime = process.hrtime\n getNanoSeconds = ->\n hr = hrtime()\n hr[0] * 1e9 + hr[1]\n moduleLoadTime = getNanoSeconds()\n upTime = process.uptime() * 1e9\n nodeLoadTime = moduleLoadTime - upTime\nelse if Date.now\n module.exports = -> Date.now() - loadTime\n loadTime = Date.now()\nelse\n module.exports = -> new Date().getTime() - loadTime\n loadTime = new Date().getTime()\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","var inherits = require('inherits')\nvar EventEmitter = require('events').EventEmitter\nvar now = require('right-now')\nvar raf = require('raf')\n\nmodule.exports = Engine\nfunction Engine(fn) {\n if (!(this instanceof Engine)) \n return new Engine(fn)\n this.running = false\n this.last = now()\n this._frame = 0\n this._tick = this.tick.bind(this)\n\n if (fn)\n this.on('tick', fn)\n}\n\ninherits(Engine, EventEmitter)\n\nEngine.prototype.start = function() {\n if (this.running) \n return\n this.running = true\n this.last = now()\n this._frame = raf(this._tick)\n return this\n}\n\nEngine.prototype.stop = function() {\n this.running = false\n if (this._frame !== 0)\n raf.cancel(this._frame)\n this._frame = 0\n return this\n}\n\nEngine.prototype.tick = function() {\n this._frame = raf(this._tick)\n var time = now()\n var dt = time - this.last\n this.emit('tick', dt)\n this.last = time\n}","// Polyfills\n\nif ( Number.EPSILON === undefined ) {\n\n\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n}\n\nif ( Number.isInteger === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\tNumber.isInteger = function ( value ) {\n\n\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t};\n\n}\n\n//\n\nif ( Math.sign === undefined ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\tMath.sign = function ( x ) {\n\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t};\n\n}\n\nif ( 'name' in Function.prototype === false ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\tget: function () {\n\n\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t}\n\n\t} );\n\n}\n\nif ( Object.assign === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t( function () {\n\n\t\tObject.assign = function ( target ) {\n\n\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t}\n\n\t\t\tvar output = Object( target );\n\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t};\n\n\t} )();\n\n}\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tvar listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tvar listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nvar REVISION = '97';\nvar MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\nvar CullFaceNone = 0;\nvar CullFaceBack = 1;\nvar CullFaceFront = 2;\nvar CullFaceFrontBack = 3;\nvar FrontFaceDirectionCW = 0;\nvar FrontFaceDirectionCCW = 1;\nvar BasicShadowMap = 0;\nvar PCFShadowMap = 1;\nvar PCFSoftShadowMap = 2;\nvar FrontSide = 0;\nvar BackSide = 1;\nvar DoubleSide = 2;\nvar FlatShading = 1;\nvar SmoothShading = 2;\nvar NoColors = 0;\nvar FaceColors = 1;\nvar VertexColors = 2;\nvar NoBlending = 0;\nvar NormalBlending = 1;\nvar AdditiveBlending = 2;\nvar SubtractiveBlending = 3;\nvar MultiplyBlending = 4;\nvar CustomBlending = 5;\nvar AddEquation = 100;\nvar SubtractEquation = 101;\nvar ReverseSubtractEquation = 102;\nvar MinEquation = 103;\nvar MaxEquation = 104;\nvar ZeroFactor = 200;\nvar OneFactor = 201;\nvar SrcColorFactor = 202;\nvar OneMinusSrcColorFactor = 203;\nvar SrcAlphaFactor = 204;\nvar OneMinusSrcAlphaFactor = 205;\nvar DstAlphaFactor = 206;\nvar OneMinusDstAlphaFactor = 207;\nvar DstColorFactor = 208;\nvar OneMinusDstColorFactor = 209;\nvar SrcAlphaSaturateFactor = 210;\nvar NeverDepth = 0;\nvar AlwaysDepth = 1;\nvar LessDepth = 2;\nvar LessEqualDepth = 3;\nvar EqualDepth = 4;\nvar GreaterEqualDepth = 5;\nvar GreaterDepth = 6;\nvar NotEqualDepth = 7;\nvar MultiplyOperation = 0;\nvar MixOperation = 1;\nvar AddOperation = 2;\nvar NoToneMapping = 0;\nvar LinearToneMapping = 1;\nvar ReinhardToneMapping = 2;\nvar Uncharted2ToneMapping = 3;\nvar CineonToneMapping = 4;\nvar UVMapping = 300;\nvar CubeReflectionMapping = 301;\nvar CubeRefractionMapping = 302;\nvar EquirectangularReflectionMapping = 303;\nvar EquirectangularRefractionMapping = 304;\nvar SphericalReflectionMapping = 305;\nvar CubeUVReflectionMapping = 306;\nvar CubeUVRefractionMapping = 307;\nvar RepeatWrapping = 1000;\nvar ClampToEdgeWrapping = 1001;\nvar MirroredRepeatWrapping = 1002;\nvar NearestFilter = 1003;\nvar NearestMipMapNearestFilter = 1004;\nvar NearestMipMapLinearFilter = 1005;\nvar LinearFilter = 1006;\nvar LinearMipMapNearestFilter = 1007;\nvar LinearMipMapLinearFilter = 1008;\nvar UnsignedByteType = 1009;\nvar ByteType = 1010;\nvar ShortType = 1011;\nvar UnsignedShortType = 1012;\nvar IntType = 1013;\nvar UnsignedIntType = 1014;\nvar FloatType = 1015;\nvar HalfFloatType = 1016;\nvar UnsignedShort4444Type = 1017;\nvar UnsignedShort5551Type = 1018;\nvar UnsignedShort565Type = 1019;\nvar UnsignedInt248Type = 1020;\nvar AlphaFormat = 1021;\nvar RGBFormat = 1022;\nvar RGBAFormat = 1023;\nvar LuminanceFormat = 1024;\nvar LuminanceAlphaFormat = 1025;\nvar RGBEFormat = RGBAFormat;\nvar DepthFormat = 1026;\nvar DepthStencilFormat = 1027;\nvar RedFormat = 1028;\nvar RGB_S3TC_DXT1_Format = 33776;\nvar RGBA_S3TC_DXT1_Format = 33777;\nvar RGBA_S3TC_DXT3_Format = 33778;\nvar RGBA_S3TC_DXT5_Format = 33779;\nvar RGB_PVRTC_4BPPV1_Format = 35840;\nvar RGB_PVRTC_2BPPV1_Format = 35841;\nvar RGBA_PVRTC_4BPPV1_Format = 35842;\nvar RGBA_PVRTC_2BPPV1_Format = 35843;\nvar RGB_ETC1_Format = 36196;\nvar RGBA_ASTC_4x4_Format = 37808;\nvar RGBA_ASTC_5x4_Format = 37809;\nvar RGBA_ASTC_5x5_Format = 37810;\nvar RGBA_ASTC_6x5_Format = 37811;\nvar RGBA_ASTC_6x6_Format = 37812;\nvar RGBA_ASTC_8x5_Format = 37813;\nvar RGBA_ASTC_8x6_Format = 37814;\nvar RGBA_ASTC_8x8_Format = 37815;\nvar RGBA_ASTC_10x5_Format = 37816;\nvar RGBA_ASTC_10x6_Format = 37817;\nvar RGBA_ASTC_10x8_Format = 37818;\nvar RGBA_ASTC_10x10_Format = 37819;\nvar RGBA_ASTC_12x10_Format = 37820;\nvar RGBA_ASTC_12x12_Format = 37821;\nvar LoopOnce = 2200;\nvar LoopRepeat = 2201;\nvar LoopPingPong = 2202;\nvar InterpolateDiscrete = 2300;\nvar InterpolateLinear = 2301;\nvar InterpolateSmooth = 2302;\nvar ZeroCurvatureEnding = 2400;\nvar ZeroSlopeEnding = 2401;\nvar WrapAroundEnding = 2402;\nvar TrianglesDrawMode = 0;\nvar TriangleStripDrawMode = 1;\nvar TriangleFanDrawMode = 2;\nvar LinearEncoding = 3000;\nvar sRGBEncoding = 3001;\nvar GammaEncoding = 3007;\nvar RGBEEncoding = 3002;\nvar LogLuvEncoding = 3003;\nvar RGBM7Encoding = 3004;\nvar RGBM16Encoding = 3005;\nvar RGBDEncoding = 3006;\nvar BasicDepthPacking = 3200;\nvar RGBADepthPacking = 3201;\nvar TangentSpaceNormalMap = 0;\nvar ObjectSpaceNormalMap = 1;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar _Math = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: ( function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tvar lut = [];\n\n\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t\t}\n\n\t\treturn function generateUUID() {\n\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\tvar uuid = lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\treturn uuid.toUpperCase();\n\n\t\t};\n\n\t} )(),\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range to range \n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * _Math.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * _Math.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author philogb / http://blog.thejit.org/\n * @author egraether / http://egraether.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nfunction Vector2( x, y ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\n}\n\nObject.defineProperties( Vector2.prototype, {\n\n\t\"width\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t},\n\n\t\"height\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tisVector2: true,\n\n\tset: function ( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector2();\n\t\tvar max = new Vector2();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t},\n\n\tcross: function ( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tangle: function () {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\treturn angle;\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t},\n\n\trotateAround: function ( center, angle ) {\n\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tvar x = this.x - center.x;\n\t\tvar y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Matrix4() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix4.prototype, {\n\n\tisMatrix4: true,\n\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t},\n\n\tcopyPosition: function ( m ) {\n\n\t\tvar te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\textractRotation: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function extractRotation( m ) {\n\n\t\t\t// this method does not support reflection matrices\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\t\tte[ 3 ] = 0;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\t\tte[ 7 ] = 0;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakeRotationFromEuler: function ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationFromQuaternion: function () {\n\n\t\tvar zero = new Vector3( 0, 0, 0 );\n\t\tvar one = new Vector3( 1, 1, 1 );\n\n\t\treturn function makeRotationFromQuaternion( q ) {\n\n\t\t\treturn this.compose( zero, q, one );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar x = new Vector3();\n\t\tvar y = new Vector3();\n\t\tvar z = new Vector3();\n\n\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tz.subVectors( eye, target );\n\n\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\tz.z = 1;\n\n\t\t\t}\n\n\t\t\tz.normalize();\n\t\t\tx.crossVectors( up, z );\n\n\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t}\n\n\t\t\tx.normalize();\n\t\t\ty.crossVectors( z, x );\n\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar te = this.elements;\n\t\tvar tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tsetPosition: function ( v ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 12 ] = v.x;\n\t\tte[ 13 ] = v.y;\n\t\tte[ 14 ] = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tvar te = this.elements,\n\t\t\tme = m.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( v ) {\n\n\t\tvar te = this.elements;\n\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxScaleOnAxis: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t},\n\n\tmakeTranslation: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationX: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationY: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationZ: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tvar c = Math.cos( angle );\n\t\tvar s = Math.sin( angle );\n\t\tvar t = 1 - c;\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\tvar tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\t return this;\n\n\t},\n\n\tmakeScale: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeShear: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tcompose: function ( position, quaternion, scale ) {\n\n\t\tvar te = this.elements;\n\n\t\tvar x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tvar x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tvar sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t te[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t te[ 1 ] = ( xy + wz ) * sx;\n\t te[ 2 ] = ( xz - wy ) * sx;\n\t te[ 3 ] = 0;\n\n\t te[ 4 ] = ( xy - wz ) * sy;\n\t te[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t te[ 6 ] = ( yz + wx ) * sy;\n\t te[ 7 ] = 0;\n\n\t te[ 8 ] = ( xz + wy ) * sz;\n\t te[ 9 ] = ( yz - wx ) * sz;\n\t te[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t te[ 11 ] = 0;\n\n\t te[ 12 ] = position.x;\n\t te[ 13 ] = position.y;\n\t te[ 14 ] = position.z;\n\t te[ 15 ] = 1;\n\n\t return this;\n\n\t},\n\n\tdecompose: function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tvar det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\tmatrix.copy( this );\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\n\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\t\tvar x = 2 * near / ( right - left );\n\t\tvar y = 2 * near / ( top - bottom );\n\n\t\tvar a = ( right + left ) / ( right - left );\n\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\tvar c = - ( far + near ) / ( far - near );\n\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t},\n\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\tvar te = this.elements;\n\t\tvar w = 1.0 / ( right - left );\n\t\tvar h = 1.0 / ( top - bottom );\n\t\tvar p = 1.0 / ( far - near );\n\n\t\tvar x = ( right + left ) * w;\n\t\tvar y = ( top + bottom ) * h;\n\t\tvar z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Quaternion( x, y, z, w ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quaternion, {\n\n\tslerp: function ( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t},\n\n\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tvar s = 1 - t,\n\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tvar tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n} );\n\nObject.defineProperties( Quaternion.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tw: {\n\n\t\tget: function () {\n\n\t\t\treturn this._w;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Quaternion.prototype, {\n\n\tisQuaternion: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t},\n\n\tcopy: function ( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromEuler: function ( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tvar cos = Math.cos;\n\t\tvar sin = Math.sin;\n\n\t\tvar c1 = cos( x / 2 );\n\t\tvar c2 = cos( y / 2 );\n\t\tvar c3 = cos( z / 2 );\n\n\t\tvar s1 = sin( x / 2 );\n\t\tvar s2 = sin( y / 2 );\n\t\tvar s3 = sin( z / 2 );\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t}\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33,\n\t\t\ts;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromUnitVectors: function () {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tvar v1 = new Vector3();\n\t\tvar r;\n\n\t\tvar EPS = 0.000001;\n\n\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\tif ( r < EPS ) {\n\n\t\t\t\tr = 0;\n\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t}\n\n\t\t\tthis._x = v1.x;\n\t\t\tthis._y = v1.y;\n\t\t\tthis._z = v1.z;\n\t\t\tthis._w = r;\n\n\t\t\treturn this.normalize();\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( _Math.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t},\n\n\trotateTowards: function ( q, step ) {\n\n\t\tvar angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tvar t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t},\n\n\tinverse: function () {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t},\n\n\tconjugate: function () {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\tvar l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t},\n\n\tpremultiply: function ( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t},\n\n\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tslerp: function ( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tvar s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\treturn this.normalize();\n\n\t\t}\n\n\t\tvar sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector3( x, y, z ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyVectors: function ( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyEuler: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyAxisAngle: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tvar ix = qw * x + qy * z - qz * y;\n\t\tvar iy = qw * y + qz * x - qx * z;\n\t\tvar iz = qw * z + qx * y - qy * x;\n\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t},\n\n\tproject: function ( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t},\n\n\tunproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function unproject( camera ) {\n\n\t\t\treturn this.applyMatrix4( matrix.getInverse( camera.projectionMatrix ) ).applyMatrix4( camera.matrixWorld );\n\n\t\t};\n\n\t}(),\n\n\ttransformDirection: function ( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector3();\n\t\tvar max = new Vector3();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t},\n\n\t// TODO lengthSquared?\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tcross: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t},\n\n\tcrossVectors: function ( a, b ) {\n\n\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t},\n\n\tprojectOnVector: function ( vector ) {\n\n\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( v1 );\n\n\t\t};\n\n\t}(),\n\n\treflect: function () {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function reflect( normal ) {\n\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( v ) {\n\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t},\n\n\tsetFromSpherical: function ( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t},\n\n\tsetFromSphericalCoords: function ( radius, phi, theta ) {\n\n\t\tvar sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t},\n\n\tsetFromCylindricalCoords: function ( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixScale: function ( m ) {\n\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n * @author tschw\n */\n\nfunction Matrix3() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0,\n\t\t0, 1, 0,\n\t\t0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix3.prototype, {\n\n\tisMatrix3: true,\n\n\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix4: function ( m ) {\n\n\t\tvar me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix3( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t},\n\n\tgetInverse: function ( matrix, throwOnDegenerate ) {\n\n\t\tif ( matrix && matrix.isMatrix4 ) {\n\n\t\t\tconsole.error( \"THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.\" );\n\n\t\t}\n\n\t\tvar me = matrix.elements,\n\t\t\tte = this.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar tmp, m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tgetNormalMatrix: function ( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n\n\t},\n\n\ttransposeIntoArray: function ( r ) {\n\n\t\tvar m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tvar c = Math.cos( rotation );\n\t\tvar s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t},\n\n\tscale: function ( sx, sy ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t},\n\n\trotate: function ( theta ) {\n\n\t\tvar c = Math.cos( theta );\n\t\tvar s = Math.sin( theta );\n\n\t\tvar te = this.elements;\n\n\t\tvar a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tvar a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( tx, ty ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n */\n\nvar ImageUtils = {\n\n\tgetDataURL: function ( image ) {\n\n\t\tvar canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n */\n\nvar textureId = 0;\n\nfunction Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image !== undefined ? image : Texture.DEFAULT_IMAGE;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING;\n\n\tthis.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping;\n\tthis.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping;\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter;\n\n\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\n\n\tthis.format = format !== undefined ? format : RGBAFormat;\n\tthis.type = type !== undefined ? type : UnsignedByteType;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding !== undefined ? encoding : LinearEncoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tvar output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tvar image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = _Math.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tvar url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( var i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\turl.push( ImageUtils.getDataURL( image[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = ImageUtils.getDataURL( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector4( x, y, z, w ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\tthis.w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Vector4.prototype, {\n\n\tisVector4: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tsetAxisAngleFromQuaternion: function ( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tvar s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetAxisAngleFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar angle, x, y, z,\t\t// variables for result\n\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tvar xx = ( m11 + 1 ) / 2;\n\t\t\tvar yy = ( m22 + 1 ) / 2;\n\t\t\tvar zz = ( m33 + 1 ) / 2;\n\t\t\tvar xy = ( m12 + m21 ) / 4;\n\t\t\tvar xz = ( m13 + m31 ) / 4;\n\t\t\tvar yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t ( m13 - m31 ) * ( m13 - m31 ) +\n\t\t ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min, max;\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tif ( min === undefined ) {\n\n\t\t\t\tmin = new Vector4();\n\t\t\t\tmax = new Vector4();\n\n\t\t\t}\n\n\t\t\tmin.set( minVal, minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author szimek / https://github.com/szimek/\n * @author alteredq / http://alteredqualia.com/\n * @author Marius Kintel / https://github.com/kintel\n */\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tif ( options.minFilter === undefined ) options.minFilter = LinearFilter;\n\n\tthis.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : true;\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com\n */\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\n\tthis.activeMipMapLevel = 0;\n\n}\n\nWebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;\n\nWebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data, width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n}\n\nObject.assign( Box3.prototype, {\n\n\tisBox3: true,\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromArray: function ( array ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tvar x = array[ i ];\n\t\t\tvar y = array[ i + 1 ];\n\t\t\tvar z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tvar x = attribute.getX( i );\n\t\t\tvar y = attribute.getY( i );\n\t\t\tvar z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\texpandByObject: function () {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tvar scope, i, l;\n\n\t\tvar v1 = new Vector3();\n\n\t\tfunction traverse( node ) {\n\n\t\t\tvar geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function expandByObject( object ) {\n\n\t\t\tscope = this;\n\n\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\tobject.traverse( traverse );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t},\n\n\tintersectsSphere: ( function () {\n\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t};\n\n\t} )(),\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tvar min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t},\n\n\tintersectsTriangle: ( function () {\n\n\t\t// triangle centered vertices\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\t// triangle edge vectors\n\t\tvar f0 = new Vector3();\n\t\tvar f1 = new Vector3();\n\t\tvar f2 = new Vector3();\n\n\t\tvar testAxis = new Vector3();\n\n\t\tvar center = new Vector3();\n\t\tvar extents = new Vector3();\n\n\t\tvar triangleNormal = new Vector3();\n\n\t\tfunction satForAxes( axes ) {\n\n\t\t\tvar i, j;\n\n\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( center );\n\t\t\textents.subVectors( this.max, center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\tv0.subVectors( triangle.a, center );\n\t\t\tv1.subVectors( triangle.b, center );\n\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\tf0.subVectors( v1, v0 );\n\t\t\tf1.subVectors( v2, v1 );\n\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tvar axes = [\n\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\treturn satForAxes( axes );\n\n\t\t};\n\n\t} )(),\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tgetBoundingSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\ttarget = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar points = [\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3()\n\t\t];\n\n\t\treturn function applyMatrix4( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Sphere( center, radius ) {\n\n\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n}\n\nObject.assign( Sphere.prototype, {\n\n\tset: function ( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\tvar center = this.center;\n\n\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t} else {\n\n\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t}\n\n\t\t\tvar maxRadiusSq = 0;\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t},\n\n\tempty: function () {\n\n\t\treturn ( this.radius <= 0 );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t},\n\n\tgetBoundingBox: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Plane( normal, constant ) {\n\n\t// normal is assumed to be normalized\n\n\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n}\n\nObject.assign( Plane.prototype, {\n\n\tset: function ( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponents: function ( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCoplanarPoints: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function setFromCoplanarPoints( a, b, c ) {\n\n\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\n\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t},\n\n\tdistanceToSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t},\n\n\tprojectPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t},\n\n\tintersectLine: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectLine( line, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar direction = line.delta( v1 );\n\n\t\t\tvar denominator = this.normal.dot( direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\treturn target.copy( line.start );\n\n\t\t\t\t}\n\n\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t};\n\n\t}(),\n\n\tintersectsLine: function ( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tvar startSign = this.distanceToPoint( line.start );\n\t\tvar endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t},\n\n\tcoplanarPoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar m1 = new Matrix3();\n\n\t\treturn function applyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\n\n\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\n\n\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / http://clara.io\n */\n\nfunction Frustum( p0, p1, p2, p3, p4, p5 ) {\n\n\tthis.planes = [\n\n\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t];\n\n}\n\nObject.assign( Frustum.prototype, {\n\n\tset: function ( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tvar planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( frustum ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix: function ( m ) {\n\n\t\tvar planes = this.planes;\n\t\tvar me = m.elements;\n\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\tintersectsObject: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsObject( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere )\n\t\t\t\t.applyMatrix4( object.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSprite: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsSprite( sprite ) {\n\n\t\t\tsphere.center.set( 0, 0, 0 );\n\t\t\tsphere.radius = 0.7071067811865476;\n\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar planes = this.planes;\n\t\tvar center = sphere.center;\n\t\tvar negRadius = - sphere.radius;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tvar distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tintersectsBox: function () {\n\n\t\tvar p = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tvar plane = planes[ i ];\n\n\t\t\t\t// corner at max distance\n\n\t\t\t\tp.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\tp.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\tp.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tif ( plane.distanceToPoint( p ) < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n} );\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\n\nvar 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\\n\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"\\nvec3 transformed = vec3( position );\\n\";\n\nvar beginnormal_vertex = \"\\nvec3 objectNormal = vec3( normal );\\n\";\n\nvar 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 ) {\\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;\\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\\tconst 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}\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\";\n\nvar color_pars_vertex = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\";\n\nvar 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}\\n\";\n\nvar 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);\\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\\n\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = normalMatrix * objectNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\";\n\nvar encodings_fragment = \" gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\n\nvar 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}\\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;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = -mvPosition.z;\\n#endif\\n\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar 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#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\\n\";\n\nvar lights_pars_begin = \"uniform vec3 ambientLightColor;\\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\\n\";\n\nvar 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\\n\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\n\nvar 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)\\n\";\n\nvar 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\\n\";\n\nvar 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\\treflectedLight.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}\\n\";\n\nvar 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\\n\";\n\nvar 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_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#ifndef STANDARD\\n\\t\\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#endif\\n#endif\\n\";\n\nvar 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\\n\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n#endif\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar 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\\n\";\n\nvar map_particle_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform mat3 uvTransform;\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\\n\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar 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\\n\";\n\nvar 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\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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 );\\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\\n\";\n\nvar 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\\n\";\n\nvar 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}\\n\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\n\nvar project_vertex = \"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\ngl_Position = projectionMatrix * mvPosition;\\n\";\n\nvar dithering_fragment = \"#if defined( DITHERING )\\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar 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\\n\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\\n\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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}\\n\";\n\nvar 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\";\n\nvar 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\\n\";\n\nvar 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\\n\";\n\nvar 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#endif\\n\";\n\nvar 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\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar 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}\\n\";\n\nvar 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\";\n\nvar 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\\n\";\n\nvar 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\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n#endif\\n\";\n\nvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tgl_FragColor = texture2D( t2D, vUv );\\n}\\n\";\n\nvar background_vert = \"varying vec2 vUv;\\nvoid main() {\\n\\tvUv = uv;\\n\\tgl_Position = vec4( position, 1.0 );\\n\\tgl_Position.z = 1.0;\\n}\\n\";\n\nvar cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\nvar cube_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\\n\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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}\\n\";\n\nvar depth_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\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\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\nvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshbasic_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar 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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include \\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 \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar 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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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;\\n\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\\n\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar 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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar 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 \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\n\";\n\nvar 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 \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n}\\n\";\n\nvar shadow_vert = \"#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_frag: background_frag,\n\tbackground_vert: background_vert,\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshmatcap_frag: meshmatcap_frag,\n\tmeshmatcap_vert: meshmatcap_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert,\n\tsprite_frag: sprite_frag,\n\tsprite_vert: sprite_vert\n};\n\n/**\n * Uniform Utilities\n */\n\nvar UniformsUtils = {\n\n\tmerge: function ( uniforms ) {\n\n\t\tvar merged = {};\n\n\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\tvar tmp = this.clone( uniforms[ u ] );\n\n\t\t\tfor ( var p in tmp ) {\n\n\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn merged;\n\n\t},\n\n\tclone: function ( uniforms_src ) {\n\n\t\tvar uniforms_dst = {};\n\n\t\tfor ( var u in uniforms_src ) {\n\n\t\t\tuniforms_dst[ u ] = {};\n\n\t\t\tfor ( var p in uniforms_src[ u ] ) {\n\n\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\n\n\t\t\t\tif ( parameter_src && ( parameter_src.isColor ||\n\t\t\t\t\tparameter_src.isMatrix3 || parameter_src.isMatrix4 ||\n\t\t\t\t\tparameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||\n\t\t\t\t\tparameter_src.isTexture ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\n\n\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn uniforms_dst;\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nfunction Color( r, g, b ) {\n\n\tif ( g === undefined && b === undefined ) {\n\n\t\t// r is THREE.Color, hex or string\n\t\treturn this.set( r );\n\n\t}\n\n\treturn this.setRGB( r, g, b );\n\n}\n\nObject.assign( Color.prototype, {\n\n\tisColor: true,\n\n\tr: 1, g: 1, b: 1,\n\n\tset: function ( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetHex: function ( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t},\n\n\tsetRGB: function ( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t},\n\n\tsetHSL: function () {\n\n\t\tfunction hue2rgb( p, q, t ) {\n\n\t\t\tif ( t < 0 ) t += 1;\n\t\t\tif ( t > 1 ) t -= 1;\n\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\t\tif ( t < 1 / 2 ) return q;\n\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\t\treturn p;\n\n\t\t}\n\n\t\treturn function setHSL( h, s, l ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\th = _Math.euclideanModulo( h, 1 );\n\t\t\ts = _Math.clamp( s, 0, 1 );\n\t\t\tl = _Math.clamp( l, 0, 1 );\n\n\t\t\tif ( s === 0 ) {\n\n\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t} else {\n\n\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\tvar q = ( 2 * l ) - p;\n\n\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetStyle: function ( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tvar color;\n\t\t\tvar name = m[ 1 ];\n\t\t\tvar components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tvar hex = m[ 1 ];\n\t\t\tvar size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\t// color keywords\n\t\t\tvar hex = ColorKeywords[ style ];\n\n\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t// red\n\t\t\t\tthis.setHex( hex );\n\n\t\t\t} else {\n\n\t\t\t\t// unknown color\n\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t},\n\n\tcopy: function ( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t},\n\n\tcopyGammaToLinear: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopyLinearToGamma: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t},\n\n\tconvertGammaToLinear: function ( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToGamma: function ( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopySRGBToLinear: function () {\n\n\t\tfunction SRGBToLinear( c ) {\n\n\t\t\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t\t}\n\n\t\treturn function copySRGBToLinear( color ) {\n\n\t\t\tthis.r = SRGBToLinear( color.r );\n\t\t\tthis.g = SRGBToLinear( color.g );\n\t\t\tthis.b = SRGBToLinear( color.b );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcopyLinearToSRGB: function () {\n\n\t\tfunction LinearToSRGB( c ) {\n\n\t\t\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n\t\t}\n\n\t\treturn function copyLinearToSRGB( color ) {\n\n\t\t\tthis.r = LinearToSRGB( color.r );\n\t\t\tthis.g = LinearToSRGB( color.g );\n\t\t\tthis.b = LinearToSRGB( color.b );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tconvertSRGBToLinear: function () {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToSRGB: function () {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t},\n\n\tgetHex: function () {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t},\n\n\tgetHexString: function () {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t},\n\n\tgetHSL: function ( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tvar max = Math.max( r, g, b );\n\t\tvar min = Math.min( r, g, b );\n\n\t\tvar hue, saturation;\n\t\tvar lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tvar delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t},\n\n\tgetStyle: function () {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t},\n\n\toffsetHSL: function () {\n\n\t\tvar hsl = {};\n\n\t\treturn function ( h, s, l ) {\n\n\t\t\tthis.getHSL( hsl );\n\n\t\t\thsl.h += h; hsl.s += s; hsl.l += l;\n\n\t\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t},\n\n\taddColors: function ( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t},\n\n\tlerp: function ( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpHSL: function () {\n\n\t\tvar hslA = { h: 0, s: 0, l: 0 };\n\t\tvar hslB = { h: 0, s: 0, l: 0 };\n\n\t\treturn function lerpHSL( color, alpha ) {\n\n\t\t\tthis.getHSL( hslA );\n\t\t\tcolor.getHSL( hslB );\n\n\t\t\tvar h = _Math.lerp( hslA.h, hslB.h, alpha );\n\t\t\tvar s = _Math.lerp( hslA.s, hslB.s, alpha );\n\t\t\tvar l = _Math.lerp( hslA.l, hslB.l, alpha );\n\n\t\t\tthis.setHSL( h, s, l );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn this.getHex();\n\n\t}\n\n} );\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nvar UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n */\n\nvar ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 0.5 },\n\t\t\t\tmetalness: { value: 0.5 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearCoat: { value: 0 },\n\t\t\tclearCoatRoughness: { value: 0 }\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAnimation() {\n\n\tvar context = null;\n\tvar isAnimating = false;\n\tvar animationLoop = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tif ( isAnimating === false ) return;\n\n\t\tanimationLoop( time, frame );\n\n\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAttributes( gl ) {\n\n\tvar buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\tvar buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tvar type = gl.FLOAT;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( attribute.dynamic === false ) {\n\n\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else if ( updateRange.count === 0 ) {\n\n\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\n\n\t\t} else {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Face3( a, b, c, normal, color, materialIndex ) {\n\n\tthis.a = a;\n\tthis.b = b;\n\tthis.c = c;\n\n\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\tthis.color = ( color && color.isColor ) ? color : new Color();\n\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\n\n}\n\nObject.assign( Face3.prototype, {\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Euler( x, y, z, order ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._order = order || Euler.DefaultOrder;\n\n}\n\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nEuler.DefaultOrder = 'XYZ';\n\nObject.defineProperties( Euler.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\torder: {\n\n\t\tget: function () {\n\n\t\t\treturn this._order;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._order = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Euler.prototype, {\n\n\tisEuler: true,\n\n\tset: function ( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t},\n\n\tcopy: function ( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\tvar clamp = _Math.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements;\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._y = 0;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromQuaternion: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t};\n\n\t}(),\n\n\tsetFromVector3: function ( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t},\n\n\treorder: function () {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\tvar q = new Quaternion();\n\n\t\treturn function reorder( newOrder ) {\n\n\t\t\tq.setFromEuler( this );\n\n\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t},\n\n\tfromArray: function ( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t},\n\n\ttoVector3: function ( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Layers() {\n\n\tthis.mask = 1 | 0;\n\n}\n\nObject.assign( Layers.prototype, {\n\n\tset: function ( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t},\n\n\tenable: function ( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t},\n\n\ttoggle: function ( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t},\n\n\tdisable: function ( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t},\n\n\ttest: function ( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author elephantatwork / www.elephantatwork.ch\n */\n\nvar object3DId = 0;\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tvar position = new Vector3();\n\tvar rotation = new Euler();\n\tvar quaternion = new Quaternion();\n\tvar scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation.onChange( onRotationChange );\n\tquaternion.onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function () {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateOnWorldAxis: function () {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\ttranslateOnAxis: function () {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function translateX( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function translateY( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function translateZ( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function () {\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function worldToLocal( vector ) {\n\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tvar q1 = new Quaternion();\n\t\tvar m1 = new Matrix4();\n\t\tvar target = new Vector3();\n\t\tvar position = new Vector3();\n\n\t\treturn function lookAt( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\ttarget.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\ttarget.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tvar parent = this.parent;\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\tposition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tif ( this.isCamera ) {\n\n\t\t\t\tm1.lookAt( position, target, this.up );\n\n\t\t\t} else {\n\n\t\t\t\tm1.lookAt( target, position, this.up );\n\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\n\n\t\t\tif ( parent ) {\n\n\t\t\t\tm1.extractRotation( parent.matrixWorld );\n\t\t\t\tq1.setFromRotationMatrix( m1 );\n\t\t\t\tthis.quaternion.premultiply( q1.inverse() );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tobject.dispatchEvent( { type: 'added' } );\n\n\t\t\tthis.children.push( object );\n\n\t\t} else {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( { type: 'removed' } );\n\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tvar child = this.children[ i ];\n\t\t\tvar object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar scale = new Vector3();\n\n\t\treturn function getWorldQuaternion( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\t\ttarget = new Quaternion();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, target, scale );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldScale: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldScale( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, target );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\tvar e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t},\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tvar parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tvar parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tvar output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tvar object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tvar parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tvar shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tvar uuids = [];\n\n\t\t\t\tfor ( var i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tvar geometries = extractFromCache( meta.geometries );\n\t\t\tvar materials = extractFromCache( meta.materials );\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\t\t\tvar shapes = extractFromCache( meta.shapes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive ) {\n\n\t\tif ( recursive === undefined ) recursive = true;\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tvar child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author bhouston / http://clara.io\n */\n\nvar geometryId = 0; // Geometry uses even numbers as Id\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tvar scope = this;\n\n\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\tvar attributes = geometry.attributes;\n\n\t\tvar positions = attributes.position.array;\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tvar tempNormals = [];\n\t\tvar tempUVs = [];\n\t\tvar tempUVs2 = [];\n\n\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tvar start = group.start;\n\t\t\t\tvar count = group.count;\n\n\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tvar center = this.boundingSphere.center;\n\t\tvar radius = this.boundingSphere.radius;\n\n\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tvar matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tvar face = this.faces[ f ];\n\n\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\tvar v, vl, f, fl, face, vertices;\n\n\t\tvertices = new Array( this.vertices.length );\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tvar f, fl, face;\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\tvar i, il, f, fl, face;\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tvar tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar normalMatrix,\n\t\t\tvertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\tif ( uv === undefined ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t}\n\n\t\t\tuvs1.push( uvCopy );\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function () {\n\n\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tvar unique = [], changes = [];\n\n\t\tvar v, key;\n\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\tvar i, il, face;\n\t\tvar indices, j, jl;\n\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tv = this.vertices[ i ];\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tvar faceIndicesToRemove = [];\n\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tface = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tvar diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tvar faces = this.faces;\n\t\tvar length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tvar newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tvar vertices = [];\n\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tvar faces = [];\n\t\tvar normals = [];\n\t\tvar normalsHash = {};\n\t\tvar colors = [];\n\t\tvar colorsHash = {};\n\t\tvar uvs = [];\n\t\tvar uvsHash = {};\n\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\n\t\t\tvar hasMaterial = true;\n\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tvar faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar i, il, j, jl, k, kl;\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tvar vertices = source.vertices;\n\n\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tvar colors = source.colors;\n\n\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tvar faces = source.faces;\n\n\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphTargets = source.morphTargets;\n\n\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tvar morphNormals = source.morphNormals;\n\n\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tvar morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tvar skinWeights = source.skinWeights;\n\n\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tvar skinIndices = source.skinIndices;\n\n\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tvar lineDistances = source.lineDistances;\n\n\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tvar color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectGeometry() {\n\n\tthis.vertices = [];\n\tthis.normals = [];\n\tthis.colors = [];\n\tthis.uvs = [];\n\tthis.uvs2 = [];\n\n\tthis.groups = [];\n\n\tthis.morphTargets = {};\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\t// this.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.verticesNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nObject.assign( DirectGeometry.prototype, {\n\n\tcomputeGroups: function ( geometry ) {\n\n\t\tvar group;\n\t\tvar groups = [];\n\t\tvar materialIndex = undefined;\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tvar faces = geometry.faces;\n\t\tvar vertices = geometry.vertices;\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tvar morphTargets = geometry.morphTargets;\n\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\tvar morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tvar morphNormals = geometry.morphNormals;\n\t\tvar morphNormalsLength = morphNormals.length;\n\n\t\tvar morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tvar skinIndices = geometry.skinIndices;\n\t\tvar skinWeights = geometry.skinWeights;\n\n\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tvar max = array[ 0 ];\n\n\tfor ( var i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: bufferGeometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n\tthis.userData = {};\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t},\n\n\taddAttribute: function ( name, attribute ) {\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\treturn this.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tremoveAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tmatrix.applyToBufferAttribute( position );\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tvar normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormalMatrix.applyToBufferAttribute( normal );\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tvar positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tvar colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tvar lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tvar position = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tvar attribute;\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( var name in geometry.morphTargets ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ i ];\n\n\t\t\t\tvar attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tvar skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tvar skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tvar box = new Box3();\n\t\tvar vector = new Vector3();\n\n\t\treturn function computeBoundingSphere() {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position ) {\n\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\tbox.setFromBufferAttribute( position );\n\t\t\t\tbox.getCenter( center );\n\n\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.x = position.getX( i );\n\t\t\t\t\tvector.y = position.getY( i );\n\t\t\t\t\tvector.z = position.getZ( i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tvar index = this.index;\n\t\tvar attributes = this.attributes;\n\n\t\tif ( attributes.position ) {\n\n\t\t\tvar positions = attributes.position.array;\n\n\t\t\tif ( attributes.normal === undefined ) {\n\n\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tvar array = attributes.normal.array;\n\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\tarray[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar normals = attributes.normal.array;\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tvar indices = index.array;\n\n\t\t\t\tfor ( var i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tvar attribute1 = attributes[ key ];\n\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tvar vector = new Vector3();\n\n\t\treturn function normalizeNormals() {\n\n\t\t\tvar normals = this.attributes.normal;\n\n\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\tvector.normalize();\n\n\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoNonIndexed: function () {\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar geometry2 = new BufferGeometry();\n\n\t\tvar indices = this.index.array;\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tvar index = 0, index2 = 0;\n\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tvar index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: array\n\t\t\t};\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\n\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: attribute.normalized\n\t\t\t};\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tvar boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar name, i, l;\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tvar index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone() );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tvar attributes = source.attributes;\n\n\t\tfor ( name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tvar morphAttributes = source.morphAttributes;\n\n\t\tfor ( name in morphAttributes ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// groups\n\n\t\tvar groups = source.groups;\n\n\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// BoxGeometry\n\nfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'BoxGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\tthis.mergeVertices();\n\n}\n\nBoxGeometry.prototype = Object.create( Geometry.prototype );\nBoxGeometry.prototype.constructor = BoxGeometry;\n\n// BoxBufferGeometry\n\nfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'BoxBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tvar scope = this;\n\n\twidth = width || 1;\n\theight = height || 1;\n\tdepth = depth || 1;\n\n\t// segments\n\n\twidthSegments = Math.floor( widthSegments ) || 1;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar numberOfVertices = 0;\n\tvar groupStart = 0;\n\n\t// build each side of the box geometry\n\n\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\tvar segmentWidth = width / gridX;\n\t\tvar segmentHeight = height / gridY;\n\n\t\tvar widthHalf = width / 2;\n\t\tvar heightHalf = height / 2;\n\t\tvar depthHalf = depth / 2;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar vertexCounter = 0;\n\t\tvar groupCount = 0;\n\n\t\tvar ix, iy;\n\n\t\tvar vector = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = 0;\n\t\t\t\tvector[ v ] = 0;\n\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// uvs\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t// counters\n\n\t\t\t\tvertexCounter += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\t// 1. you need three indices to draw a single face\n\t\t// 2. a single segment consists of two faces\n\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// increase counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t\t// update total number of vertices\n\n\t\tnumberOfVertices += vertexCounter;\n\n\t}\n\n}\n\nBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PlaneGeometry\n\nfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PlaneGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\tthis.mergeVertices();\n\n}\n\nPlaneGeometry.prototype = Object.create( Geometry.prototype );\nPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n// PlaneBufferGeometry\n\nfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PlaneBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\twidth = width || 1;\n\theight = height || 1;\n\n\tvar width_half = width / 2;\n\tvar height_half = height / 2;\n\n\tvar gridX = Math.floor( widthSegments ) || 1;\n\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\tvar gridX1 = gridX + 1;\n\tvar gridY1 = gridY + 1;\n\n\tvar segment_width = width / gridX;\n\tvar segment_height = height / gridY;\n\n\tvar ix, iy;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\tvar y = iy * segment_height - height_half;\n\n\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\tvar x = ix * segment_width - width_half;\n\n\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\tuvs.push( ix / gridX );\n\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\tvar a = ix + gridX1 * iy;\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nvar materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\tthis.lights = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\tthis.visible = true;\n\n\tthis.userData = {};\n\n\tthis.needsUpdate = true;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function () {},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( var key in values ) {\n\n\t\t\tvar newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\t\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.overdraw = source.overdraw;\n\n\t\tthis.visible = source.visible;\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.clipShadows = source.clipShadows;\n\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\tdstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tvar n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\n\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = UniformsUtils.clone( source.uniforms );\n\n\tthis.defines = Object.assign( {}, source.defines );\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = source.extensions;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tvar data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.uniforms = {};\n\n\tfor ( var name in this.uniforms ) {\n\n\t\tvar uniform = this.uniforms[ name ];\n\t\tvar value = uniform.value;\n\n\t\tif ( value.isTexture ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t};\n\n\t\t} else if ( value.isColor ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'c',\n\t\t\t\tvalue: value.getHex()\n\t\t\t};\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value.isVector3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\tvalue: value\n\t\t\t};\n\n\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t}\n\n\t}\n\n\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\treturn data;\n\n};\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n}\n\nObject.assign( Ray.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t},\n\n\tlookAt: function ( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\trecast: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function recast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tvar directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t},\n\n\tdistanceSqToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn v1.distanceToSquared( point );\n\n\t\t};\n\n\t}(),\n\n\tdistanceSqToSegment: function () {\n\n\t\tvar segCenter = new Vector3();\n\t\tvar segDir = new Vector3();\n\t\tvar diff = new Vector3();\n\n\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\tvar c = diff.lengthSq();\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t};\n\n\t}(),\n\n\tintersectSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\tvar tca = v1.dot( this.direction );\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tvar t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tvar t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t},\n\n\tintersectPlane: function ( plane, target ) {\n\n\t\tvar t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t},\n\n\tintersectBox: function ( box, target ) {\n\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tvar invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tvar origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t},\n\n\tintersectsBox: ( function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t};\n\n\t} )(),\n\n\tintersectTriangle: function () {\n\n\t\t// Compute the offset origin, edges, and normal.\n\t\tvar diff = new Vector3();\n\t\tvar edge1 = new Vector3();\n\t\tvar edge2 = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\tedge1.subVectors( b, a );\n\t\t\tedge2.subVectors( c, a );\n\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\tvar sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tdiff.subVectors( this.origin, a );\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix4: function ( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Triangle( a, b, c ) {\n\n\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n}\n\nObject.assign( Triangle, {\n\n\tgetNormal: function () {\n\n\t\tvar v0 = new Vector3();\n\n\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\tv0.subVectors( a, b );\n\t\t\ttarget.cross( v0 );\n\n\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t};\n\n\t}(),\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tgetBarycoord: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\tv0.subVectors( c, a );\n\t\t\tv1.subVectors( b, a );\n\t\t\tv2.subVectors( point, a );\n\n\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t};\n\n\t}(),\n\n\tgetUV: function () {\n\n\t\tvar barycoord = new Vector3();\n\n\t\treturn function getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\t\tthis.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\ttarget.set( 0, 0 );\n\t\t\ttarget.addScaledVector( uv1, barycoord.x );\n\t\t\ttarget.addScaledVector( uv2, barycoord.y );\n\t\t\ttarget.addScaledVector( uv3, barycoord.z );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}()\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tset: function ( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t},\n\n\tgetArea: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getArea() {\n\n\t\t\tv0.subVectors( this.c, this.b );\n\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t};\n\n\t}(),\n\n\tgetMidpoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t},\n\n\tgetNormal: function ( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t},\n\n\tgetPlane: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t},\n\n\tgetBarycoord: function ( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t},\n\n\tgetUV: function ( point, uv1, uv2, uv3, result ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, result );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar vab = new Vector3();\n\t\tvar vac = new Vector3();\n\t\tvar vbc = new Vector3();\n\t\tvar vap = new Vector3();\n\t\tvar vbp = new Vector3();\n\t\tvar vcp = new Vector3();\n\n\t\treturn function closestPointToPoint( p, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar a = this.a, b = this.b, c = this.c;\n\t\t\tvar v, w;\n\n\t\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t\tvab.subVectors( b, a );\n\t\t\tvac.subVectors( c, a );\n\t\t\tvap.subVectors( p, a );\n\t\t\tvar d1 = vab.dot( vap );\n\t\t\tvar d2 = vac.dot( vap );\n\t\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\t\treturn target.copy( a );\n\n\t\t\t}\n\n\t\t\tvbp.subVectors( p, b );\n\t\t\tvar d3 = vab.dot( vbp );\n\t\t\tvar d4 = vac.dot( vbp );\n\t\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\t\treturn target.copy( b );\n\n\t\t\t}\n\n\t\t\tvar vc = d1 * d4 - d3 * d2;\n\t\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\t\treturn target.copy( a ).addScaledVector( vab, v );\n\n\t\t\t}\n\n\t\t\tvcp.subVectors( p, c );\n\t\t\tvar d5 = vab.dot( vcp );\n\t\t\tvar d6 = vac.dot( vcp );\n\t\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\t\treturn target.copy( c );\n\n\t\t\t}\n\n\t\t\tvar vb = d5 * d2 - d1 * d6;\n\t\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\t\treturn target.copy( a ).addScaledVector( vac, w );\n\n\t\t\t}\n\n\t\t\tvar va = d3 * d6 - d5 * d4;\n\t\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t\tvbc.subVectors( c, b );\n\t\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\t\treturn target.copy( b ).addScaledVector( vbc, w ); // edge region of BC\n\n\t\t\t}\n\n\t\t\t// face region\n\t\t\tvar denom = 1 / ( va + vb + vc );\n\t\t\t// u = va * denom\n\t\t\tv = vb * denom;\n\t\t\tw = vc * denom;\n\t\t\treturn target.copy( a ).addScaledVector( vab, v ).addScaledVector( vac, w );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: \n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author jonobr1 / http://jonobr1.com/\n */\n\nfunction Mesh( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\tthis.drawMode = TrianglesDrawMode;\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tsetDrawMode: function ( value ) {\n\n\t\tthis.drawMode = value;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.drawMode = source.drawMode;\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tvar geometry = this.geometry;\n\t\tvar m, ml, name;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\tvar keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tvar morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tname = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {\n\n\t\t\t\t\tname = morphTargets[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\tvar vA = new Vector3();\n\t\tvar vB = new Vector3();\n\t\tvar vC = new Vector3();\n\n\t\tvar tempA = new Vector3();\n\t\tvar tempB = new Vector3();\n\t\tvar tempC = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tvar intersectionPoint = new Vector3();\n\t\tvar intersectionPointWorld = new Vector3();\n\n\t\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\t\tvar intersect;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t\t} else {\n\n\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t\t}\n\n\t\t\tif ( intersect === null ) return null;\n\n\t\t\tintersectionPointWorld.copy( point );\n\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\t\treturn {\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectionPointWorld.clone(),\n\t\t\t\tobject: object\n\t\t\t};\n\n\t\t}\n\n\t\tfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, uv, a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( position, a );\n\t\t\tvB.fromBufferAttribute( position, b );\n\t\t\tvC.fromBufferAttribute( position, c );\n\n\t\t\tvar intersection = checkIntersection( object, material, raycaster, ray, vA, vB, vC, intersectionPoint );\n\n\t\t\tif ( intersection ) {\n\n\t\t\t\tif ( uv ) {\n\n\t\t\t\t\tuvA.fromBufferAttribute( uv, a );\n\t\t\t\t\tuvB.fromBufferAttribute( uv, b );\n\t\t\t\t\tuvC.fromBufferAttribute( uv, c );\n\n\t\t\t\t\tintersection.uv = Triangle.getUV( intersectionPoint, vA, vB, vC, uvA, uvB, uvC, new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t\tvar face = new Face3( a, b, c );\n\t\t\t\tTriangle.getNormal( vA, vB, vC, face.normal );\n\n\t\t\t\tintersection.face = face;\n\n\t\t\t}\n\n\t\t\treturn intersection;\n\n\t\t}\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar material = this.material;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\tif ( material === undefined ) return;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t// Check boundingBox before continuing\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t}\n\n\t\t\tvar intersection;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar a, b, c;\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\tvar groups = geometry.groups;\n\t\t\t\tvar drawRange = geometry.drawRange;\n\t\t\t\tvar i, j, il, jl;\n\t\t\t\tvar group, groupMaterial;\n\t\t\t\tvar start, end;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tgroup = groups[ i ];\n\t\t\t\t\t\t\tgroupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\t\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tgroup = groups[ i ];\n\t\t\t\t\t\t\tgroupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\t\ta = j;\n\t\t\t\t\t\t\t\tb = j + 1;\n\t\t\t\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\t\t\t\tend = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\ta = i;\n\t\t\t\t\t\t\tb = i + 1;\n\t\t\t\t\t\t\tc = i + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar fvA, fvB, fvC;\n\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar uvs;\n\n\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tvar face = faces[ f ];\n\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\tfvA = vertices[ face.a ];\n\t\t\t\t\tfvB = vertices[ face.b ];\n\t\t\t\t\tfvC = vertices[ face.c ];\n\n\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\n\n\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\n\n\t\t\t\t\t\tvA.set( 0, 0, 0 );\n\t\t\t\t\t\tvB.set( 0, 0, 0 );\n\t\t\t\t\t\tvC.set( 0, 0, 0 );\n\n\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\n\n\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\n\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\n\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvA.add( fvA );\n\t\t\t\t\t\tvB.add( fvB );\n\t\t\t\t\t\tvC.add( fvC );\n\n\t\t\t\t\t\tfvA = vA;\n\t\t\t\t\t\tfvB = vB;\n\t\t\t\t\t\tfvC = vC;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\n\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\tintersection.uv = Triangle.getUV( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC, new Vector2() );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBackground( renderer, state, objects, premultipliedAlpha ) {\n\n\tvar clearColor = new Color( 0x000000 );\n\tvar clearAlpha = 0;\n\n\tvar planeMesh;\n\tvar boxMesh;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tvar background = scene.background;\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tuniforms: UniformsUtils.clone( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tuniforms: UniformsUtils.clone( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.removeAttribute( 'normal' );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\trenderList.push( planeMesh, planeMesh.geometry, planeMesh.material, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha !== undefined ? alpha : 1;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension;\n\n\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\textension = gl;\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ capabilities.isWebGL2 ? 'drawArraysInstanced' : 'drawArraysInstancedANGLE' ]( mode, start, count, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tvar maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tvar isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;\n\n\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tvar maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tvar vertexTextures = maxVertexTextures > 0;\n\tvar floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' );\n\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures\n\n\t};\n\n}\n\n/**\n * @author tschw\n */\n\nfunction WebGLClipping() {\n\n\tvar scope = this,\n\n\t\tglobalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false,\n\n\t\tplane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tvar enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) {\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4,\n\n\t\t\t\tdstArray = cache.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\n\n\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tcache.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tvar nPlanes = planes !== null ? planes.length : 0,\n\t\t\tdstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLExtensions( gl ) {\n\n\tvar extensions = {};\n\n\treturn {\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ];\n\n\t\t\t}\n\n\t\t\tvar extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLGeometries( gl, attributes, info ) {\n\n\tvar geometries = {};\n\tvar wireframeAttributes = {};\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tvar geometry = event.target;\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( var name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tvar attribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tvar index = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( var name in morphAttributes ) {\n\n\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) return attribute;\n\n\t\tvar indices = [];\n\n\t\tvar geometryIndex = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t// console.time( 'wireframe' );\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tvar array = geometryIndex.array;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tvar a = i + 0;\n\t\t\t\tvar b = i + 1;\n\t\t\t\tvar c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// console.timeEnd( 'wireframe' );\n\n\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\treturn attribute;\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tvar type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension;\n\n\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\textension = gl;\n\n\t\t} else {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ capabilities.isWebGL2 ? 'drawElementsInstanced' : 'drawElementsInstancedANGLE' ]( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLInfo( gl ) {\n\n\tvar memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tvar render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\tinstanceCount = instanceCount || 1;\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.TRIANGLE_STRIP:\n\t\t\tcase gl.TRIANGLE_FAN:\n\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tvar influencesList = {};\n\tvar morphInfluences = new Float32Array( 8 );\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\tvar length = objectInfluences.length;\n\n\t\tvar influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t// Remove current morphAttributes\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\t// Add morphAttributes\n\n\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence ) {\n\n\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\tif ( value ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLObjects( geometries, info ) {\n\n\tvar updateList = {};\n\n\tfunction update( object ) {\n\n\t\tvar frame = info.render.frame;\n\n\t\tvar geometry = object.geometry;\n\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\n/**\n * @author Artur Trzesiok\n */\n\nfunction DataTexture3D( data, width, height, depth ) {\n\n\t// We're going to add .setXXX() methods for setting properties later.\n\t// Users can still set in DataTexture3D directly.\n\t//\n\t//\tvar texture = new THREE.DataTexture3D( data, width, height, depth );\n\t// \ttexture.anisotropy = 16;\n\t//\n\t// See #14839\n\n\tTexture.call( this, null );\n\n\tthis.image = { data: data, width: width, height: height, depth: depth };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n}\n\nDataTexture3D.prototype = Object.create( Texture.prototype );\nDataTexture3D.prototype.constructor = DataTexture3D;\nDataTexture3D.prototype.isDataTexture3D = true;\n\n/**\n * @author tschw\n * @author Mugen87 / https://github.com/Mugen87\n * @author mrdoob / http://mrdoob.com/\n *\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [renderer] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'renderer' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (renderer factorizations):\n *\n * .upload( gl, seq, values, renderer )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (renderer factorizations):\n *\n * .setValue( gl, name, value )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .set( gl, obj, prop )\n *\n * \t\tsets uniform from object and property with same name than uniform\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nvar emptyTexture = new Texture();\nvar emptyTexture3d = new DataTexture3D();\nvar emptyCubeTexture = new CubeTexture();\n\n// --- Base for inner nodes (including the root) ---\n\nfunction UniformContainer() {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nvar arrayCacheF32 = [];\nvar arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nvar mat4array = new Float32Array( 16 );\nvar mat3array = new Float32Array( 9 );\nvar mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tvar firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tvar n = nBlocks * blockSize,\n\t\tr = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( var i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( var i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( renderer, n ) {\n\n\tvar r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i )\n\t\tr[ i ] = renderer.allocTextureUnit();\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValue1f( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\nfunction setValue1i( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValue2fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValue3fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValue4fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValue2fm( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValue3fm( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValue4fm( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar unit = renderer.allocTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\trenderer.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar unit = renderer.allocTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\trenderer.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar unit = renderer.allocTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\trenderer.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValue2iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValue3iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValue4iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1f; // FLOAT\n\t\tcase 0x8b50: return setValue2fv; // _VEC2\n\t\tcase 0x8b51: return setValue3fv; // _VEC3\n\t\tcase 0x8b52: return setValue4fv; // _VEC4\n\n\t\tcase 0x8b5a: return setValue2fm; // _MAT2\n\t\tcase 0x8b5b: return setValue3fm; // _MAT3\n\t\tcase 0x8b5c: return setValue4fm; // _MAT4\n\n\t\tcase 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES\n\t\tcase 0x8B5F: return setValueT3D1; // SAMPLER_3D\n\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// Array of scalars\n\nfunction setValue1fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform1fv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\nfunction setValue1iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform1iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 2 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniform2fv( this.addr, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueV3a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 3 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniform3fv( this.addr, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueV4a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 4 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniform4fv( this.addr, data );\n\n\tthis.updateCache( data );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 4 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueM3a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 9 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueM4a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 16 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n\tthis.updateCache( data );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1a( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar n = v.length;\n\n\tvar units = allocTexUnits( renderer, n );\n\n\tif ( arraysEqual( cache, units ) === false ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6a( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar n = v.length;\n\n\tvar units = allocTexUnits( renderer, n );\n\n\tif ( arraysEqual( cache, units ) === false ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1fv; // FLOAT\n\t\tcase 0x8b50: return setValueV2a; // _VEC2\n\t\tcase 0x8b51: return setValueV3a; // _VEC3\n\t\tcase 0x8b52: return setValueV4a; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2a; // _MAT2\n\t\tcase 0x8b5b: return setValueM3a; // _MAT3\n\t\tcase 0x8b5c: return setValueM4a; // _MAT4\n\n\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\n\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tvar cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tUniformContainer.call( this ); // mix-in\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, renderer ) {\n\n\tvar seq = this.seq;\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], renderer );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tvar path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tvar match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\tid = match[ 1 ],\n\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program, renderer ) {\n\n\tUniformContainer.call( this );\n\n\tthis.renderer = renderer;\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\tvar u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tvar v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tvar r = [];\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction addLineNumbers( string ) {\n\n\tvar lines = string.split( '\\n' );\n\n\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tvar shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t}\n\n\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t}\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn shader;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar programIdCount = 0;\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t}\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tvar toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase Uncharted2ToneMapping:\n\t\t\ttoneMappingName = 'Uncharted2';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\textensions = extensions || {};\n\n\tvar chunks = [\n\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || ( parameters.normalMap && ! parameters.objectSpaceNormalMap ) || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tvar chunks = [];\n\n\tfor ( var name in defines ) {\n\n\t\tvar value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tvar attributes = {};\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\tvar info = gl.getActiveAttrib( program, i );\n\t\tvar name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\nfunction parseIncludes( string ) {\n\n\tvar pattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\n\tfunction replace( match, include ) {\n\n\t\tvar replace = ShaderChunk[ include ];\n\n\t\tif ( replace === undefined ) {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t\treturn parseIncludes( replace );\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction unrollLoops( string ) {\n\n\tvar pattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\tfunction replace( match, start, end, snippet ) {\n\n\t\tvar unroll = '';\n\n\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t}\n\n\t\treturn unroll;\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction WebGLProgram( renderer, extensions, code, material, shader, parameters, capabilities ) {\n\n\tvar gl = renderer.context;\n\n\tvar defines = material.defines;\n\n\tvar vertexShader = shader.vertexShader;\n\tvar fragmentShader = shader.fragmentShader;\n\n\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t}\n\n\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t\tcase EquirectangularReflectionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\n\t\t\t\tbreak;\n\n\t\t\tcase SphericalReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t// console.log( 'building new program ' );\n\n\t//\n\n\tvar customExtensions = capabilities.isWebGL2 ? '' : generateExtensions( material.extensions, parameters, extensions );\n\n\tvar customDefines = generateDefines( defines );\n\n\t//\n\n\tvar program = gl.createProgram();\n\n\tvar prefixVertex, prefixFragment;\n\n\tif ( material.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && ( capabilities.isWebGL2 || extensions.get( 'EXT_frag_depth' ) ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && ( capabilities.isWebGL2 || extensions.get( 'EXT_frag_depth' ) ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\tparameters.envMap && ( capabilities.isWebGL2 || extensions.get( 'EXT_shader_texture_lod' ) ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.matcapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ?\n\t\t\t\tShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcapEncoding ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = parseIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = parseIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( capabilities.isWebGL2 && ! material.isRawShaderMaterial ) {\n\n\t\tvar isGLSL3ShaderMaterial = false;\n\n\t\tvar versionRegex = /^\\s*#version\\s+300\\s+es\\s*\\n/;\n\n\t\tif ( material.isShaderMaterial &&\n\t\t\tvertexShader.match( versionRegex ) !== null &&\n\t\t\tfragmentShader.match( versionRegex ) !== null ) {\n\n\t\t\tisGLSL3ShaderMaterial = true;\n\n\t\t\tvertexShader = vertexShader.replace( versionRegex, '' );\n\t\t\tfragmentShader = fragmentShader.replace( versionRegex, '' );\n\n\t\t}\n\n\t\t// GLSL 3.0 conversion\n\t\tprefixVertex = [\n\t\t\t'#version 300 es\\n',\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#version 300 es\\n',\n\t\t\t'#define varying in',\n\t\t\tisGLSL3ShaderMaterial ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\tisGLSL3ShaderMaterial ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tvar vertexGlsl = prefixVertex + vertexShader;\n\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( material.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tvar programLog = gl.getProgramInfoLog( program ).trim();\n\tvar vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\tvar runnable = true;\n\tvar haveDiagnostics = true;\n\n\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\trunnable = false;\n\n\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t} else if ( programLog !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\thaveDiagnostics = false;\n\n\t}\n\n\tif ( haveDiagnostics ) {\n\n\t\tthis.diagnostics = {\n\n\t\t\trunnable: runnable,\n\t\t\tmaterial: material,\n\n\t\t\tprogramLog: programLog,\n\n\t\t\tvertexShader: {\n\n\t\t\t\tlog: vertexLog,\n\t\t\t\tprefix: prefixVertex\n\n\t\t\t},\n\n\t\t\tfragmentShader: {\n\n\t\t\t\tlog: fragmentLog,\n\t\t\t\tprefix: prefixFragment\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// clean up\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tvar cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tvar cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t// DEPRECATED\n\n\tObject.defineProperties( this, {\n\n\t\tuniforms: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\treturn this.getUniforms();\n\n\t\t\t}\n\t\t},\n\n\t\tattributes: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\treturn this.getAttributes();\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\n\t//\n\n\tthis.name = shader.name;\n\tthis.id = programIdCount ++;\n\tthis.code = code;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\tvar programs = [];\n\n\tvar shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'phong',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tvar parameterNames = [\n\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"matcapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\n\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"objectSpaceNormalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\"\n\t];\n\n\n\tfunction allocateBones( object ) {\n\n\t\tvar skeleton = object.skeleton;\n\t\tvar bones = skeleton.bones;\n\n\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\n\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tvar maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\n\n\t\tvar encoding;\n\n\t\tif ( ! map ) {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t} else if ( map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t}\n\n\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\n\t\tif ( encoding === LinearEncoding && gammaOverrideLinear ) {\n\n\t\t\tencoding = GammaEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tthis.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) {\n\n\t\tvar shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tvar maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\n\t\tvar precision = capabilities.precision;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\tvar parameters = {\n\n\t\t\tshaderID: shaderID,\n\n\t\t\tprecision: precision,\n\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\n\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap, renderer.gammaInput ),\n\t\t\tenvMap: !! material.envMap,\n\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexColors: material.vertexColors,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t};\n\n\t\treturn parameters;\n\n\t};\n\n\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\tvar array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( material.fragmentShader );\n\t\t\tarray.push( material.vertexShader );\n\n\t\t}\n\n\t\tif ( material.defines !== undefined ) {\n\n\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t}\n\n\t\tarray.push( material.onBeforeCompile.toString() );\n\n\t\tarray.push( renderer.gammaOutput );\n\n\t\treturn array.join();\n\n\t};\n\n\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\tvar program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tvar programInfo = programs[ p ];\n\n\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\tprogram = programInfo;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters, capabilities );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t};\n\n\tthis.releaseProgram = function ( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tvar i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t};\n\n\t// Exposed for resource monitoring & error feedback via renderer.info:\n\tthis.programs = programs;\n\n}\n\n/**\n * @author fordacious / fordacious.github.io\n */\n\nfunction WebGLProperties() {\n\n\tvar properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tvar map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program && b.program && a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tvar renderItems = [];\n\tvar renderItemsIndex = 0;\n\n\tvar opaque = [];\n\tvar transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction push( object, geometry, material, z, group ) {\n\n\t\tvar renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: material.program,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = material.program;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\trenderItemsIndex ++;\n\n\t}\n\n\tfunction sort() {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );\n\n\t}\n\n\treturn {\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tvar lists = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\t\tvar list = lists[ hash ];\n\n\t\tif ( list === undefined ) {\n\n\t\t\t// console.log( 'THREE.WebGLRenderLists:', hash );\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists[ hash ] = list;\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction UniformsCache() {\n\n\tvar lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tvar uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nvar count = 0;\n\nfunction WebGLLights() {\n\n\tvar cache = new UniformsCache();\n\n\tvar state = {\n\n\t\tid: count ++,\n\n\t\thash: {\n\t\t\tstateID: - 1,\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\t\t\tshadowsLength: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tdirectional: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\tpoint: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tvar vector3 = new Vector3();\n\tvar matrix4 = new Matrix4();\n\tvar matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tvar r = 0, g = 0, b = 0;\n\n\t\tvar directionalLength = 0;\n\t\tvar pointLength = 0;\n\t\tvar spotLength = 0;\n\t\tvar rectAreaLength = 0;\n\t\tvar hemiLength = 0;\n\n\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\n\t\t\tvar color = light.color;\n\t\t\tvar intensity = light.intensity;\n\t\t\tvar distance = light.distance;\n\n\t\t\tvar shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tuniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tuniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t}\n\n\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tstate.directional.length = directionalLength;\n\t\tstate.spot.length = spotLength;\n\t\tstate.rectArea.length = rectAreaLength;\n\t\tstate.point.length = pointLength;\n\t\tstate.hemi.length = hemiLength;\n\n\t\tstate.hash.stateID = state.id;\n\t\tstate.hash.directionalLength = directionalLength;\n\t\tstate.hash.pointLength = pointLength;\n\t\tstate.hash.spotLength = spotLength;\n\t\tstate.hash.rectAreaLength = rectAreaLength;\n\t\tstate.hash.hemiLength = hemiLength;\n\t\tstate.hash.shadowsLength = shadows.length;\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLRenderState() {\n\n\tvar lights = new WebGLLights();\n\n\tvar lightsArray = [];\n\tvar shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tvar state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates() {\n\n\tvar renderStates = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar renderState;\n\n\t\tif ( renderStates[ scene.id ] === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState();\n\t\t\trenderStates[ scene.id ] = {};\n\t\t\trenderStates[ scene.id ][ camera.id ] = renderState;\n\n\t\t} else {\n\n\t\t\tif ( renderStates[ scene.id ][ camera.id ] === undefined ) {\n\n\t\t\t\trenderState = new WebGLRenderState();\n\t\t\t\trenderStates[ scene.id ][ camera.id ] = renderState;\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates[ scene.id ][ camera.id ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / https://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * skinning: ,\n * morphTargets: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tvar _frustum = new Frustum(),\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_shadowMapSize = new Vector2(),\n\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t_lookTarget = new Vector3(),\n\t\t_lightPositionWorld = new Vector3(),\n\n\t\t_MorphingFlag = 1,\n\t\t_SkinningFlag = 2,\n\n\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t_materialCache = {};\n\n\tvar shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tvar cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tvar cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n\tvar cube2DViewPorts = [\n\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\tnew Vector4(), new Vector4(), new Vector4()\n\t];\n\n\t// init\n\n\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\tvar depthMaterial = new MeshDepthMaterial( {\n\n\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_depthMaterials[ i ] = depthMaterial;\n\n\t\t//\n\n\t\tvar distanceMaterial = new MeshDistanceMaterial( {\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_distanceMaterials[ i ] = distanceMaterial;\n\n\t}\n\n\t//\n\n\tvar scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\t// TODO Clean up (needed in case of contextlost)\n\t\tvar _gl = _renderer.context;\n\t\tvar _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.disable( _gl.BLEND );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tvar faceCount;\n\n\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\t\t\tvar shadow = light.shadow;\n\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t// following orientation:\n\t\t\t\t//\n\t\t\t\t// xzXZ\n\t\t\t\t// y Y\n\t\t\t\t//\n\t\t\t\t// X - Positive x direction\n\t\t\t\t// x - Negative x direction\n\t\t\t\t// Y - Positive y direction\n\t\t\t\t// y - Negative y direction\n\t\t\t\t// Z - Positive z direction\n\t\t\t\t// z - Negative z direction\n\n\t\t\t\t// positive X\n\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative X\n\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Z\n\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative Z\n\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Y\n\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t// negative Y\n\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\tshadow.update( light );\n\n\t\t\t}\n\n\t\t\tvar shadowMap = shadow.map;\n\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tfaceCount = 6;\n\n\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t} else {\n\n\t\t\t\tfaceCount = 1;\n\n\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t// compute shadow matrix\n\n\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t);\n\n\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t_renderer.clear();\n\n\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t// run a single pass if not\n\n\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t}\n\n\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t};\n\n\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tvar result = null;\n\n\t\tvar materialVariants = _depthMaterials;\n\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\tif ( isPointLight ) {\n\n\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( ! customMaterial ) {\n\n\t\t\tvar useMorphing = false;\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t}\n\n\t\t\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\tvar variantIndex = 0;\n\n\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tresult.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\tvar material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLState( gl, extensions, utils, capabilities ) {\n\n\tfunction ColorBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar color = new Vector4();\n\t\tvar currentColorMask = null;\n\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentDepthMask = null;\n\t\tvar currentDepthFunc = null;\n\t\tvar currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentStencilMask = null;\n\t\tvar currentStencilFunc = null;\n\t\tvar currentStencilRef = null;\n\t\tvar currentStencilFuncMask = null;\n\t\tvar currentStencilFail = null;\n\t\tvar currentStencilZFail = null;\n\t\tvar currentStencilZPass = null;\n\t\tvar currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef \t!== stencilRef \t||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar colorBuffer = new ColorBuffer();\n\tvar depthBuffer = new DepthBuffer();\n\tvar stencilBuffer = new StencilBuffer();\n\n\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\tvar enabledCapabilities = {};\n\n\tvar compressedTextureFormats = null;\n\n\tvar currentProgram = null;\n\n\tvar currentBlendingEnabled = null;\n\tvar currentBlending = null;\n\tvar currentBlendEquation = null;\n\tvar currentBlendSrc = null;\n\tvar currentBlendDst = null;\n\tvar currentBlendEquationAlpha = null;\n\tvar currentBlendSrcAlpha = null;\n\tvar currentBlendDstAlpha = null;\n\tvar currentPremultipledAlpha = false;\n\n\tvar currentFlipSided = null;\n\tvar currentCullFace = null;\n\n\tvar currentLineWidth = null;\n\n\tvar currentPolygonOffsetFactor = null;\n\tvar currentPolygonOffsetUnits = null;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tvar lineWidthAvailable = false;\n\tvar version = 0;\n\tvar glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tvar currentTextureSlot = null;\n\tvar currentBoundTextures = {};\n\n\tvar currentScissor = new Vector4();\n\tvar currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tvar texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tvar emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction initAttributes() {\n\n\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tvar extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction getCompressedTextureFormats() {\n\n\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\tcompressedTextureFormats = [];\n\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_etc1' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_astc' ) ) {\n\n\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn compressedTextureFormats;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( ! currentBlendingEnabled ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tvar flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] === 1 ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tenabledCapabilities = {};\n\n\t\tcompressedTextureFormats = null;\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlending = null;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tenableAttributeAndDivisor: enableAttributeAndDivisor,\n\t\tdisableUnusedAttributes: disableUnusedAttributes,\n\t\tenable: enable,\n\t\tdisable: disable,\n\t\tgetCompressedTextureFormats: getCompressedTextureFormats,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tvar _videoTextures = {};\n\tvar _canvas;\n\n\t//\n\n\tfunction clampToMaxSize( image, maxSize ) {\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tif ( 'data' in image ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Warning: Scaling through the canvas will only work with images that use\n\t\t\t// premultiplied alpha.\n\n\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\n\n\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = Math.floor( image.width * scale );\n\t\t\tcanvas.height = Math.floor( image.height * scale );\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height );\n\n\t\t\treturn canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction makePowerOfTwo( image ) {\n\n\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = _Math.floorPowerOfTwo( image.width );\n\t\t\t_canvas.height = _Math.floorPowerOfTwo( image.height );\n\n\t\t\tvar context = _canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, _canvas.width, _canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + _canvas.width + 'x' + _canvas.height );\n\n\t\t\treturn _canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( capabilities.isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) {\n\n\t\treturn texture.generateMipmaps && isPowerOfTwo &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t}\n\n\tfunction getInternalFormat( glFormat, glType ) {\n\n\t\tif ( ! capabilities.isWebGL2 ) return glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) return _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) return _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) return _gl.R8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) return _gl.RGB32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) return _gl.RGB16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) return _gl.RGB8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) return _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) return _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) return _gl.RGBA8;\n\n\t\t}\n\n\t\treturn glFormat;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\treturn _gl.NEAREST;\n\n\t\t}\n\n\t\treturn _gl.LINEAR;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tvar texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\tdelete _videoTextures[ texture.id ];\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tvar renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t// cube texture\n\n\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t} else {\n\n\t\t\t// 2D texture\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\t// remove all webgl properties\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tvar image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture );\n\n\t}\n\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image.length === 6 ) {\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\tvar cubeImage = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\t\tglInternalFormat = getInternalFormat( glFormat, glType );\n\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, texture, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t} else {\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t}\n\n\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\tvar extension;\n\n\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tvar textureType;\n\n\t\tif ( texture.isDataTexture3D ) {\n\n\t\t\ttextureType = _gl.TEXTURE_3D;\n\n\t\t} else {\n\n\t\t\ttextureType = _gl.TEXTURE_2D;\n\n\t\t}\n\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\n\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\timage = makePowerOfTwo( image );\n\n\t\t}\n\n\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( glFormat, glType );\n\n\t\tsetTextureParameters( textureType, texture, isPowerOfTwoImage );\n\n\t\tvar mipmap, mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\tif ( ! capabilities.isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\tgenerateMipmap( _gl.TEXTURE_2D, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\tvar glInternalFormat = getInternalFormat( glFormat, glType );\n\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tvar texture = renderTarget.texture;\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tvar id = texture.id;\n\t\tvar frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures[ id ] !== frame ) {\n\n\t\t\t_videoTextures[ id ] = frame;\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\n}\n\n/**\n * @author thespite / http://www.twitter.com/thespite\n */\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tfunction convert( p ) {\n\n\t\tvar extension;\n\n\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) return gl.HALF_FLOAT;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\t\tif ( p === RedFormat ) return gl.RED;\n\n\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\tif ( p === OneFactor ) return gl.ONE;\n\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tif ( p === MinEquation ) return gl.MIN;\n\t\t\t\tif ( p === MaxEquation ) return gl.MAX;\n\n\t\t\t}\n\n\t\t\textension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === MinEquation ) return extension.MIN_EXT;\n\t\t\t\tif ( p === MaxEquation ) return extension.MAX_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) return gl.UNSIGNED_INT_24_8;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author WestLangley / http://github.com/WestLangley\n*/\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\n\tthis.projectionMatrix = new Matrix4();\n\tthis.projectionMatrixInverse = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\tvar e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.getInverse( this.matrixWorld );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author greggman / http://games.greggman.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author tschw\n */\n\nfunction PerspectiveCamera( fov, aspect, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov !== undefined ? fov : 50;\n\tthis.zoom = 1;\n\n\tthis.near = near !== undefined ? near : 0.1;\n\tthis.far = far !== undefined ? far : 2000;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect !== undefined ? aspect : 1;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tvar vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn _Math.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * var w = 1920;\n\t * var h = 1080;\n\t * var fullWidth = w * 3;\n\t * var fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar near = this.near,\n\t\t\ttop = near * Math.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\n\t\t\theight = 2 * top,\n\t\t\twidth = this.aspect * height,\n\t\t\tleft = - 0.5 * width,\n\t\t\tview = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tvar skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.getInverse( this.projectionMatrix );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ArrayCamera( array ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array || [];\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebVRManager( renderer ) {\n\n\tvar scope = this;\n\n\tvar device = null;\n\tvar frameData = null;\n\n\tvar poseTarget = null;\n\n\tvar controllers = [];\n\tvar standingMatrix = new Matrix4();\n\tvar standingMatrixInverse = new Matrix4();\n\n\tvar frameOfReferenceType = 'stage';\n\n\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\tframeData = new window.VRFrameData();\n\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t}\n\n\tvar matrixWorldInverse = new Matrix4();\n\tvar tempQuaternion = new Quaternion();\n\tvar tempPosition = new Vector3();\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\tcameraL.layers.enable( 1 );\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\tcameraR.layers.enable( 2 );\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tfunction isPresenting() {\n\n\t\treturn device !== null && device.isPresenting === true;\n\n\t}\n\n\tvar currentSize, currentPixelRatio;\n\n\tfunction onVRDisplayPresentChange() {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t\tanimation.start();\n\n\t\t} else {\n\n\t\t\tif ( scope.enabled ) {\n\n\t\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t\t}\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t}\n\n\t//\n\n\tvar triggers = [];\n\n\tfunction findGamepad( id ) {\n\n\t\tvar gamepads = navigator.getGamepads && navigator.getGamepads();\n\n\t\tfor ( var i = 0, j = 0, l = gamepads.length; i < l; i ++ ) {\n\n\t\t\tvar gamepad = gamepads[ i ];\n\n\t\t\tif ( gamepad && ( gamepad.id === 'Daydream Controller' ||\n\t\t\t\tgamepad.id === 'Gear VR Controller' || gamepad.id === 'Oculus Go Controller' ||\n\t\t\t\tgamepad.id === 'OpenVR Gamepad' || gamepad.id.startsWith( 'Oculus Touch' ) ||\n\t\t\t\tgamepad.id.startsWith( 'Spatial Controller' ) ) ) {\n\n\t\t\t\tif ( j === id ) return gamepad;\n\n\t\t\t\tj ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateControllers() {\n\n\t\tfor ( var i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tvar controller = controllers[ i ];\n\n\t\t\tvar gamepad = findGamepad( i );\n\n\t\t\tif ( gamepad !== undefined && gamepad.pose !== undefined ) {\n\n\t\t\t\tif ( gamepad.pose === null ) return;\n\n\t\t\t\t// Pose\n\n\t\t\t\tvar pose = gamepad.pose;\n\n\t\t\t\tif ( pose.hasPosition === false ) controller.position.set( 0.2, - 0.6, - 0.05 );\n\n\t\t\t\tif ( pose.position !== null ) controller.position.fromArray( pose.position );\n\t\t\t\tif ( pose.orientation !== null ) controller.quaternion.fromArray( pose.orientation );\n\t\t\t\tcontroller.matrix.compose( controller.position, controller.quaternion, controller.scale );\n\t\t\t\tcontroller.matrix.premultiply( standingMatrix );\n\t\t\t\tcontroller.matrix.decompose( controller.position, controller.quaternion, controller.scale );\n\t\t\t\tcontroller.matrixWorldNeedsUpdate = true;\n\t\t\t\tcontroller.visible = true;\n\n\t\t\t\t// Trigger\n\n\t\t\t\tvar buttonId = gamepad.id === 'Daydream Controller' ? 0 : 1;\n\n\t\t\t\tif ( triggers[ i ] !== gamepad.buttons[ buttonId ].pressed ) {\n\n\t\t\t\t\ttriggers[ i ] = gamepad.buttons[ buttonId ].pressed;\n\n\t\t\t\t\tif ( triggers[ i ] === true ) {\n\n\t\t\t\t\t\tcontroller.dispatchEvent( { type: 'selectstart' } );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcontroller.dispatchEvent( { type: 'selectend' } );\n\t\t\t\t\t\tcontroller.dispatchEvent( { type: 'select' } );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tcontroller.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.enabled = false;\n\n\tthis.getController = function ( id ) {\n\n\t\tvar controller = controllers[ id ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new Group();\n\t\t\tcontroller.matrixAutoUpdate = false;\n\t\t\tcontroller.visible = false;\n\n\t\t\tcontrollers[ id ] = controller;\n\n\t\t}\n\n\t\treturn controller;\n\n\t};\n\n\tthis.getDevice = function () {\n\n\t\treturn device;\n\n\t};\n\n\tthis.setDevice = function ( value ) {\n\n\t\tif ( value !== undefined ) device = value;\n\n\t\tanimation.setContext( value );\n\n\t};\n\n\tthis.setFrameOfReferenceType = function ( value ) {\n\n\t\tframeOfReferenceType = value;\n\n\t};\n\n\tthis.setPoseTarget = function ( object ) {\n\n\t\tif ( object !== undefined ) poseTarget = object;\n\n\t};\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tvar userHeight = frameOfReferenceType === 'stage' ? 1.6 : 0;\n\n\t\tif ( device === null ) {\n\n\t\t\tcamera.position.set( 0, userHeight, 0 );\n\t\t\treturn camera;\n\n\t\t}\n\n\t\tdevice.depthNear = camera.near;\n\t\tdevice.depthFar = camera.far;\n\n\t\tdevice.getFrameData( frameData );\n\n\t\t//\n\n\t\tif ( frameOfReferenceType === 'stage' ) {\n\n\t\t\tvar stageParameters = device.stageParameters;\n\n\t\t\tif ( stageParameters ) {\n\n\t\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\n\t\t\t} else {\n\n\t\t\t\tstandingMatrix.makeTranslation( 0, userHeight, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar pose = frameData.pose;\n\t\tvar poseObject = poseTarget !== null ? poseTarget : camera;\n\n\t\t// We want to manipulate poseObject by its position and quaternion components since users may rely on them.\n\t\tposeObject.matrix.copy( standingMatrix );\n\t\tposeObject.matrix.decompose( poseObject.position, poseObject.quaternion, poseObject.scale );\n\n\t\tif ( pose.orientation !== null ) {\n\n\t\t\ttempQuaternion.fromArray( pose.orientation );\n\t\t\tposeObject.quaternion.multiply( tempQuaternion );\n\n\t\t}\n\n\t\tif ( pose.position !== null ) {\n\n\t\t\ttempQuaternion.setFromRotationMatrix( standingMatrix );\n\t\t\ttempPosition.fromArray( pose.position );\n\t\t\ttempPosition.applyQuaternion( tempQuaternion );\n\t\t\tposeObject.position.add( tempPosition );\n\n\t\t}\n\n\t\tposeObject.updateMatrixWorld();\n\n\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t//\n\n\t\tcameraL.near = camera.near;\n\t\tcameraR.near = camera.near;\n\n\t\tcameraL.far = camera.far;\n\t\tcameraR.far = camera.far;\n\n\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t// TODO (mrdoob) Double check this code\n\n\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\tif ( frameOfReferenceType === 'stage' ) {\n\n\t\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\t}\n\n\t\tvar parent = poseObject.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t}\n\n\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t// HACK (mrdoob)\n\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t//\n\n\t\tvar layers = device.getLayers();\n\n\t\tif ( layers.length ) {\n\n\t\t\tvar layer = layers[ 0 ];\n\n\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t}\n\n\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t}\n\n\t\t}\n\n\t\tupdateControllers();\n\n\t\treturn cameraVR;\n\n\t};\n\n\tthis.getStandingMatrix = function () {\n\n\t\treturn standingMatrix;\n\n\t};\n\n\tthis.isPresenting = isPresenting;\n\n\t// Animation Loop\n\n\tvar animation = new WebGLAnimation();\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tanimation.setAnimationLoop( callback );\n\n\t};\n\n\tthis.submitFrame = function () {\n\n\t\tif ( isPresenting() ) device.submitFrame();\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebXRManager( renderer ) {\n\n\tvar gl = renderer.context;\n\n\tvar device = null;\n\tvar session = null;\n\n\tvar frameOfReference = null;\n\tvar frameOfReferenceType = 'stage';\n\n\tvar pose = null;\n\n\tvar controllers = [];\n\tvar inputSources = [];\n\n\tfunction isPresenting() {\n\n\t\treturn session !== null && frameOfReference !== null;\n\n\t}\n\n\t//\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.layers.enable( 1 );\n\tcameraL.viewport = new Vector4();\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.layers.enable( 2 );\n\tcameraR.viewport = new Vector4();\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tthis.enabled = false;\n\n\tthis.getController = function ( id ) {\n\n\t\tvar controller = controllers[ id ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new Group();\n\t\t\tcontroller.matrixAutoUpdate = false;\n\t\t\tcontroller.visible = false;\n\n\t\t\tcontrollers[ id ] = controller;\n\n\t\t}\n\n\t\treturn controller;\n\n\t};\n\n\tthis.getDevice = function () {\n\n\t\treturn device;\n\n\t};\n\n\tthis.setDevice = function ( value ) {\n\n\t\tif ( value !== undefined ) device = value;\n\t\tif ( value instanceof XRDevice ) gl.setCompatibleXRDevice( value );\n\n\t};\n\n\t//\n\n\tfunction onSessionEvent( event ) {\n\n\t\tvar controller = controllers[ inputSources.indexOf( event.inputSource ) ];\n\t\tif ( controller ) controller.dispatchEvent( { type: event.type } );\n\n\t}\n\n\tfunction onSessionEnd() {\n\n\t\trenderer.setFramebuffer( null );\n\t\tanimation.stop();\n\n\t}\n\n\tthis.setFrameOfReferenceType = function ( value ) {\n\n\t\tframeOfReferenceType = value;\n\n\t};\n\n\tthis.setSession = function ( value ) {\n\n\t\tsession = value;\n\n\t\tif ( session !== null ) {\n\n\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\tsession.baseLayer = new XRWebGLLayer( session, gl );\n\t\t\tsession.requestFrameOfReference( frameOfReferenceType ).then( function ( value ) {\n\n\t\t\t\tframeOfReference = value;\n\n\t\t\t\trenderer.setFramebuffer( session.baseLayer.framebuffer );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t} );\n\n\t\t\t//\n\n\t\t\tinputSources = session.getInputSources();\n\n\t\t\tsession.addEventListener( 'inputsourceschange', function () {\n\n\t\t\t\tinputSources = session.getInputSources();\n\t\t\t\tconsole.log( inputSources );\n\n\t\t\t} );\n\n\t\t}\n\n\t};\n\n\tfunction updateCamera( camera, parent ) {\n\n\t\tif ( parent === null ) {\n\n\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t} else {\n\n\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t}\n\n\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\n\n\t}\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar parent = camera.parent;\n\t\t\tvar cameras = cameraVR.cameras;\n\n\t\t\t// apply camera.parent to cameraVR\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( var i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update camera and its children\n\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\t\tvar children = camera.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t}\n\n\t\treturn camera;\n\n\t};\n\n\tthis.isPresenting = isPresenting;\n\n\t// Animation Loop\n\n\tvar onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tpose = frame.getDevicePose( frameOfReference );\n\n\t\tif ( pose !== null ) {\n\n\t\t\tvar layer = session.baseLayer;\n\t\t\tvar views = frame.views;\n\n\t\t\tfor ( var i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tvar view = views[ i ];\n\t\t\t\tvar viewport = layer.getViewport( view );\n\t\t\t\tvar viewMatrix = pose.getViewMatrix( view );\n\n\t\t\t\tvar camera = cameraVR.cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t// HACK (mrdoob)\n\t\t\t\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\t\t\t\tcameraVR.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfor ( var i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tvar controller = controllers[ i ];\n\n\t\t\tvar inputSource = inputSources[ i ];\n\n\t\t\tif ( inputSource ) {\n\n\t\t\t\tvar inputPose = frame.getInputPose( inputSource, frameOfReference );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\tif ( 'targetRay' in inputPose ) {\n\n\t\t\t\t\t\tcontroller.matrix.elements = inputPose.targetRay.transformMatrix;\n\n\t\t\t\t\t} else if ( 'pointerMatrix' in inputPose ) {\n\n\t\t\t\t\t\t// DEPRECATED\n\n\t\t\t\t\t\tcontroller.matrix.elements = inputPose.pointerMatrix;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontroller.matrix.decompose( controller.position, controller.rotation, controller.scale );\n\t\t\t\t\tcontroller.visible = true;\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcontroller.visible = false;\n\n\t\t}\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tvar animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\n\t};\n\n\tthis.dispose = function () {};\n\n\t// DEPRECATED\n\n\tthis.getStandingMatrix = function () {\n\n\t\tconsole.warn( 'THREE.WebXRManager: getStandingMatrix() is no longer needed.' );\n\t\treturn new THREE.Matrix4();\n\n\t};\n\n\tthis.submitFrame = function () {};\n\n}\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n * @author tschw\n */\n\nfunction WebGLRenderer( parameters ) {\n\n\tconsole.log( 'THREE.WebGLRenderer', REVISION );\n\n\tparameters = parameters || {};\n\n\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default';\n\n\tvar currentRenderList = null;\n\tvar currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\tthis.context = null;\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.gammaInput = false;\n\tthis.gammaOutput = false;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = LinearToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\tthis.toneMappingWhitePoint = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tvar _this = this,\n\n\t\t_isContextLost = false,\n\n\t\t// internal state cache\n\n\t\t_framebuffer = null,\n\n\t\t_currentRenderTarget = null,\n\t\t_currentFramebuffer = null,\n\t\t_currentMaterialId = - 1,\n\n\t\t// geometry and program caching\n\n\t\t_currentGeometryProgram = {\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false\n\t\t},\n\n\t\t_currentCamera = null,\n\t\t_currentArrayCamera = null,\n\n\t\t_currentViewport = new Vector4(),\n\t\t_currentScissor = new Vector4(),\n\t\t_currentScissorTest = null,\n\n\t\t//\n\n\t\t_usedTextureUnits = 0,\n\n\t\t//\n\n\t\t_width = _canvas.width,\n\t\t_height = _canvas.height,\n\n\t\t_pixelRatio = 1,\n\n\t\t_viewport = new Vector4( 0, 0, _width, _height ),\n\t\t_scissor = new Vector4( 0, 0, _width, _height ),\n\t\t_scissorTest = false,\n\n\t\t// frustum\n\n\t\t_frustum = new Frustum(),\n\n\t\t// clipping\n\n\t\t_clipping = new WebGLClipping(),\n\t\t_clippingEnabled = false,\n\t\t_localClippingEnabled = false,\n\n\t\t// camera matrices cache\n\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_vector3 = new Vector3();\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tvar _gl;\n\n\ttry {\n\n\t\tvar contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t_gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\n\t}\n\n\tvar extensions, capabilities, state, info;\n\tvar properties, textures, attributes, geometries, objects;\n\tvar programCache, renderLists, renderStates;\n\n\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tvar utils;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tif ( ! capabilities.isWebGL2 ) {\n\n\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\textensions.get( 'OES_texture_float' );\n\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t}\n\n\t\textensions.get( 'OES_texture_float_linear' );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, utils, capabilities );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tattributes = new WebGLAttributes( _gl );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info );\n\t\tobjects = new WebGLObjects( geometries, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities );\n\t\trenderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates();\n\n\t\tbackground = new WebGLBackground( _this, state, objects, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.context = _gl;\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// vr\n\n\tvar vr = null;\n\n\tif ( typeof navigator !== 'undefined' ) {\n\n\t\tvr = ( 'xr' in navigator ) ? new WebXRManager( _this ) : new WebVRManager( _this );\n\n\t}\n\n\tthis.vr = vr;\n\n\t// shadow map\n\n\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width,\n\t\t\theight: _height\n\t\t};\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( vr.isPresenting() ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = width * _pixelRatio;\n\t\t_canvas.height = height * _pixelRatio;\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width * _pixelRatio,\n\t\t\theight: _height * _pixelRatio\n\t\t};\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = width * pixelRatio;\n\t\t_canvas.height = height * pixelRatio;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function () {\n\n\t\treturn _currentViewport;\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t_viewport.set( x, _height - y - height, width, height );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t_scissor.set( x, _height - y - height, width, height );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tvar bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tobjects.dispose();\n\n\t\tvr.dispose();\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tvar material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tvar programInfo = properties.get( material ).program;\n\n\t\tmaterial.program = undefined;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tstate.initAttributes();\n\n\t\tvar buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\tvar frontFaceCW = ( object.isMesh && object.normalMatrix.determinant() < 0 );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\tvar program = setProgram( camera, fog, material, object );\n\n\t\tvar updateBuffers = false;\n\n\t\tif ( _currentGeometryProgram.geometry !== geometry.id ||\n\t\t\t_currentGeometryProgram.program !== program.id ||\n\t\t\t_currentGeometryProgram.wireframe !== ( material.wireframe === true ) ) {\n\n\t\t\t_currentGeometryProgram.geometry = geometry.id;\n\t\t\t_currentGeometryProgram.program = program.id;\n\t\t\t_currentGeometryProgram.wireframe = material.wireframe === true;\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\t//\n\n\t\tvar index = geometry.index;\n\t\tvar position = geometry.attributes.position;\n\t\tvar rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tvar attribute;\n\t\tvar renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar dataCount = Infinity;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdataCount = index.count;\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\tdataCount = position.count;\n\n\t\t}\n\n\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t}\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( geometry.maxInstancedCount > 0 ) {\n\n\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\tfunction setupVertexAttributes( material, program, geometry ) {\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry & ! capabilities.isWebGL2 ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.initAttributes();\n\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( var name in programAttributes ) {\n\n\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t}\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.material ) {\n\n\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tvar onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( vr.isPresenting() ) return;\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tvar animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\tvr.setAnimationLoop( callback );\n\n\t\tanimation.start();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost ) return;\n\n\t\t// reset caching for this frame\n\n\t\t_currentGeometryProgram.geometry = null;\n\t\t_currentGeometryProgram.program = null;\n\t\t_currentGeometryProgram.wireframe = false;\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tcamera = vr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.onBeforeRender( _this, scene, camera, renderTarget );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, _this.sortObjects );\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort();\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled ) _clipping.beginShadows();\n\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled ) _clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset ) this.info.reset();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\trenderTarget = null;\n\n\t\t}\n\n\t\tthis.setRenderTarget( renderTarget );\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\tvar transparentObjects = currentRenderList.transparent;\n\n\t\tif ( scene.overrideMaterial ) {\n\n\t\t\tvar overrideMaterial = scene.overrideMaterial;\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );\n\n\t\t} else {\n\n\t\t\t// opaque pass (front-to-back order)\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );\n\n\t\t\t// transparent pass (back-to-front order)\n\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );\n\n\t\t}\n\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\tif ( renderTarget ) {\n\n\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\tscene.onAfterRender( _this, scene, camera );\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tvr.submitFrame();\n\n\t\t}\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t/*\n\t// TODO Duplicated code (Frustum)\n\n\tvar _sphere = new Sphere();\n\n\tfunction isObjectViewable( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null )\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere ).\n\t\tapplyMatrix4( object.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSpriteViewable( sprite ) {\n\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 0.7071067811865476;\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSphereViewable( sphere ) {\n\n\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\tif ( numPlanes === 0 ) return true;\n\n\t\tvar planes = _this.clippingPlanes,\n\n\t\t\tcenter = sphere.center,\n\t\t\tnegRad = - sphere.radius,\n\t\t\ti = 0;\n\n\t\tdo {\n\n\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t} while ( ++ i !== numPlanes );\n\n\t\treturn true;\n\n\t}\n\t*/\n\n\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\tobject.skeleton.update();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar group = groups[ i ];\n\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera, overrideMaterial ) {\n\n\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tvar renderItem = renderList[ i ];\n\n\t\t\tvar object = renderItem.object;\n\t\t\tvar geometry = renderItem.geometry;\n\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\n\t\t\tvar group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\tfor ( var j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tif ( 'viewport' in camera2 ) { // XR\n\n\t\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar bounds = camera2.bounds;\n\n\t\t\t\t\t\t\tvar x = bounds.x * _width;\n\t\t\t\t\t\t\tvar y = bounds.y * _height;\n\t\t\t\t\t\t\tvar width = bounds.z * _width;\n\t\t\t\t\t\t\tvar height = bounds.w * _height;\n\n\t\t\t\t\t\t\tstate.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentRenderState.setupLights( camera2 );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t_currentGeometryProgram.geometry = null;\n\t\t\t_currentGeometryProgram.program = null;\n\t\t\t_currentGeometryProgram.wireframe = false;\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t}\n\n\tfunction initMaterial( material, fog, object ) {\n\n\t\tvar materialProperties = properties.get( material );\n\n\t\tvar lights = currentRenderState.state.lights;\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tvar lightsHash = materialProperties.lightsHash;\n\t\tvar lightsStateHash = lights.state.hash;\n\n\t\tvar parameters = programCache.getParameters(\n\t\t\tmaterial, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );\n\n\t\tvar code = programCache.getProgramCode( material, parameters );\n\n\t\tvar program = materialProperties.program;\n\t\tvar programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.code !== code ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( lightsHash.stateID !== lightsStateHash.stateID ||\n\t\t\tlightsHash.directionalLength !== lightsStateHash.directionalLength ||\n\t\t\tlightsHash.pointLength !== lightsStateHash.pointLength ||\n\t\t\tlightsHash.spotLength !== lightsStateHash.spotLength ||\n\t\t\tlightsHash.rectAreaLength !== lightsStateHash.rectAreaLength ||\n\t\t\tlightsHash.hemiLength !== lightsStateHash.hemiLength ||\n\t\t\tlightsHash.shadowsLength !== lightsStateHash.shadowsLength ) {\n\n\t\t\tlightsHash.stateID = lightsStateHash.stateID;\n\t\t\tlightsHash.directionalLength = lightsStateHash.directionalLength;\n\t\t\tlightsHash.pointLength = lightsStateHash.pointLength;\n\t\t\tlightsHash.spotLength = lightsStateHash.spotLength;\n\t\t\tlightsHash.rectAreaLength = lightsStateHash.rectAreaLength;\n\t\t\tlightsHash.hemiLength = lightsStateHash.hemiLength;\n\t\t\tlightsHash.shadowsLength = lightsStateHash.shadowsLength;\n\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tvar shader = ShaderLib[ parameters.shaderID ];\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\t\tfragmentShader: shader.fragmentShader\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: material.uniforms,\n\t\t\t\t\tvertexShader: material.vertexShader,\n\t\t\t\t\tfragmentShader: material.fragmentShader\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tmaterial.onBeforeCompile( materialProperties.shader, _this );\n\n\t\t\t// Computing code again as onBeforeCompile may have changed the shaders\n\t\t\tcode = programCache.getProgramCode( material, parameters );\n\n\t\t\tprogram = programCache.acquireProgram( material, materialProperties.shader, parameters, code );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterial.program = program;\n\n\t\t}\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( material.morphTargets ) {\n\n\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphTarget' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.morphNormals ) {\n\n\t\t\tmaterial.numSupportedMorphNormals = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphNormal' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = _clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = _clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.fog = fog;\n\n\t\t// store the light setup it was created for\n\t\tif ( lightsHash === undefined ) {\n\n\t\t\tmaterialProperties.lightsHash = lightsHash = {};\n\n\t\t}\n\n\t\tlightsHash.stateID = lightsStateHash.stateID;\n\t\tlightsHash.directionalLength = lightsStateHash.directionalLength;\n\t\tlightsHash.pointLength = lightsStateHash.pointLength;\n\t\tlightsHash.spotLength = lightsStateHash.spotLength;\n\t\tlightsHash.rectAreaLength = lightsStateHash.rectAreaLength;\n\t\tlightsHash.hemiLength = lightsStateHash.hemiLength;\n\t\tlightsHash.shadowsLength = lightsStateHash.shadowsLength;\n\n\t\tif ( material.lights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tvar progUniforms = materialProperties.program.getUniforms(),\n\t\t\tuniformsList =\n\t\t\t\tWebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, fog, material, object ) {\n\n\t\t_usedTextureUnits = 0;\n\n\t\tvar materialProperties = properties.get( material );\n\t\tvar lights = currentRenderState.state.lights;\n\n\t\tvar lightsHash = materialProperties.lightsHash;\n\t\tvar lightsStateHash = lights.state.hash;\n\n\t\tif ( _clippingEnabled ) {\n\n\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\n\n\t\t\t\tvar useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\t_clipping.setState(\n\t\t\t\t\tmaterial.clippingPlanes, material.clipIntersection, material.clipShadows,\n\t\t\t\t\tcamera, materialProperties, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate === false ) {\n\n\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.lights && ( lightsHash.stateID !== lightsStateHash.stateID ||\n\t\t\t\tlightsHash.directionalLength !== lightsStateHash.directionalLength ||\n\t\t\t\tlightsHash.pointLength !== lightsStateHash.pointLength ||\n\t\t\t\tlightsHash.spotLength !== lightsStateHash.spotLength ||\n\t\t\t\tlightsHash.rectAreaLength !== lightsStateHash.rectAreaLength ||\n\t\t\t\tlightsHash.hemiLength !== lightsStateHash.hemiLength ||\n\t\t\t\tlightsHash.shadowsLength !== lightsStateHash.shadowsLength ) ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== _clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== _clipping.numIntersection ) ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate ) {\n\n\t\t\tinitMaterial( material, fog, object );\n\t\t\tmaterial.needsUpdate = false;\n\n\t\t}\n\n\t\tvar refreshProgram = false;\n\t\tvar refreshMaterial = false;\n\t\tvar refreshLights = false;\n\n\t\tvar program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// not sure why, but otherwise weird things happen\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tvar skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === undefined ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tvar size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = _Math.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tvar boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tvar boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint );\n\n\t\t\tif ( material.lights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\trefreshUniformsFog( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsLambert( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshToonMaterial ) {\n\n\t\t\t\t\trefreshUniformsToon( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsPhong( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsStandard( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\trefreshUniformsMatcap( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDepth( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDistance( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsNormal( m_uniforms, material );\n\n\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\trefreshUniformsDash( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\trefreshUniformsPoints( m_uniforms, material );\n\n\t\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\t\trefreshUniformsSprites( m_uniforms, material );\n\n\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\tm_uniforms.color.value = material.color;\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\n\n\t\t\t}\n\n\t\t\t// RectAreaLight Texture\n\t\t\t// TODO (mrdoob): Find a nicer implementation\n\n\t\t\tif ( m_uniforms.ltc_1 !== undefined ) m_uniforms.ltc_1.value = UniformsLib.LTC_1;\n\t\t\tif ( m_uniforms.ltc_2 !== undefined ) m_uniforms.ltc_2.value = UniformsLib.LTC_2;\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// Uniforms (refresh uniforms objects)\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\tuniforms.envMap.value = material.envMap;\n\n\t\t\t// don't flip CubeTexture envMaps, flip everything else:\n\t\t\t// WebGLRenderTargetCube will be flipped for backwards compatibility\n\t\t\t// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\n\t\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\n\t\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tuniforms.maxMipLevel.value = properties.get( material.envMap ).__maxMipLevel;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. normal map\n\t\t// 4. bump map\n\t\t// 5. alpha map\n\t\t// 6. emissive map\n\n\t\tvar uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * _pixelRatio;\n\t\tuniforms.scale.value = _height * 0.5;\n\n\t\tuniforms.map.value = material.map;\n\n\t\tif ( material.map !== null ) {\n\n\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\tmaterial.map.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\t\tuniforms.map.value = material.map;\n\n\t\tif ( material.map !== null ) {\n\n\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\tmaterial.map.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsFog( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value = fog.color;\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value = material.specular;\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\trefreshUniformsPhong( uniforms, material );\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearCoat.value = material.clearCoat;\n\t\tuniforms.clearCoatRoughness.value = material.clearCoatRoughness;\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\t// Textures\n\n\tfunction allocTextureUnit() {\n\n\t\tvar textureUnit = _usedTextureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\t_usedTextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tthis.allocTextureUnit = allocTextureUnit;\n\n\t// this.setTexture2D = setTexture2D;\n\tthis.setTexture2D = ( function () {\n\n\t\tvar warned = false;\n\n\t\t// backwards compatibility: peel texture.texture\n\t\treturn function setTexture2D( texture, slot ) {\n\n\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTexture3D = ( function () {\n\n\t\t// backwards compatibility: peel texture.texture\n\t\treturn function setTexture3D( texture, slot ) {\n\n\t\t\ttextures.setTexture3D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTexture = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTexture( texture, slot ) {\n\n\t\t\tif ( ! warned ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\twarned = true;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTextureCube = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t// TODO: unify these code paths\n\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t} else {\n\n\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\t//\n\n\tthis.setFramebuffer = function ( value ) {\n\n\t\t_framebuffer = value;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tvar framebuffer = _framebuffer;\n\t\tvar isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( framebuffer ) {\n\n\t\t\tvar restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level ) {\n\n\t\tvar width = texture.image.width;\n\t\tvar height = texture.image.height;\n\t\tvar glFormat = utils.convert( texture.format );\n\n\t\tthis.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( _gl.TEXTURE_2D, level || 0, glFormat, position.x, position.y, width, height, 0 );\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\tvar width = srcTexture.image.width;\n\t\tvar height = srcTexture.image.height;\n\t\tvar glFormat = utils.convert( dstTexture.format );\n\t\tvar glType = utils.convert( dstTexture.type );\n\n\t\tthis.setTexture2D( dstTexture, 0 );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction FogExp2( color, density ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nFogExp2.prototype.clone = function () {\n\n\treturn new FogExp2( this.color, this.density );\n\n};\n\nFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'FogExp2',\n\t\tcolor: this.color.getHex(),\n\t\tdensity: this.density\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Fog( color, near, far ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\n\tthis.near = ( near !== undefined ) ? near : 1;\n\tthis.far = ( far !== undefined ) ? far : 1000;\n\n}\n\nFog.prototype.isFog = true;\n\nFog.prototype.clone = function () {\n\n\treturn new Fog( this.color, this.near, this.far );\n\n};\n\nFog.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'Fog',\n\t\tcolor: this.color.getHex(),\n\t\tnear: this.near,\n\t\tfar: this.far\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Scene() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Scene';\n\n\tthis.background = null;\n\tthis.fog = null;\n\tthis.overrideMaterial = null;\n\n\tthis.autoUpdate = true; // checked by the renderer\n\n}\n\nScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Scene,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.stride : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * map: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\tthis.map = null;\n\n\tthis.rotation = 0;\n\n\tthis.sizeAttenuation = true;\n\n\tthis.lights = false;\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.map = source.map;\n\n\tthis.rotation = source.rotation;\n\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nvar geometry;\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tif ( geometry === undefined ) {\n\n\t\tgeometry = new BufferGeometry();\n\n\t\tvar float32Array = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t] );\n\n\t\tvar interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\tgeometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\tgeometry.addAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\tgeometry.addAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t}\n\n\tthis.geometry = geometry;\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: ( function () {\n\n\t\tvar intersectPoint = new Vector3();\n\t\tvar worldScale = new Vector3();\n\t\tvar mvPosition = new Vector3();\n\n\t\tvar alignedPosition = new Vector2();\n\t\tvar rotatedPosition = new Vector2();\n\t\tvar viewWorldMatrix = new Matrix4();\n\n\t\tvar vA = new Vector3();\n\t\tvar vB = new Vector3();\n\t\tvar vC = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t\t\t// compute position in camera space\n\t\t\talignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t\t\t// to check if rotation is not zero\n\t\t\tif ( sin !== undefined ) {\n\n\t\t\t\trotatedPosition.x = ( cos * alignedPosition.x ) - ( sin * alignedPosition.y );\n\t\t\t\trotatedPosition.y = ( sin * alignedPosition.x ) + ( cos * alignedPosition.y );\n\n\t\t\t} else {\n\n\t\t\t\trotatedPosition.copy( alignedPosition );\n\n\t\t\t}\n\n\n\t\t\tvertexPosition.copy( mvPosition );\n\t\t\tvertexPosition.x += rotatedPosition.x;\n\t\t\tvertexPosition.y += rotatedPosition.y;\n\n\t\t\t// transform to world space\n\t\t\tvertexPosition.applyMatrix4( viewWorldMatrix );\n\n\t\t}\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tworldScale.setFromMatrixScale( this.matrixWorld );\n\t\t\tviewWorldMatrix.getInverse( this.modelViewMatrix ).premultiply( this.matrixWorld );\n\t\t\tmvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\t\tvar rotation = this.material.rotation;\n\t\t\tvar sin, cos;\n\t\t\tif ( rotation !== 0 ) {\n\n\t\t\t\tcos = Math.cos( rotation );\n\t\t\t\tsin = Math.sin( rotation );\n\n\t\t\t}\n\n\t\t\tvar center = this.center;\n\n\t\t\ttransformVertex( vA.set( - 0.5, - 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\t\t\ttransformVertex( vB.set( 0.5, - 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\t\t\ttransformVertex( vC.set( 0.5, 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\n\t\t\tuvA.set( 0, 0 );\n\t\t\tuvB.set( 1, 0 );\n\t\t\tuvC.set( 1, 1 );\n\n\t\t\t// check first triangle\n\t\t\tvar intersect = raycaster.ray.intersectTriangle( vA, vB, vC, false, intersectPoint );\n\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\t// check second triangle\n\t\t\t\ttransformVertex( vB.set( - 0.5, 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\t\t\t\tuvB.set( 0, 1 );\n\n\t\t\t\tintersect = raycaster.ray.intersectTriangle( vA, vC, vB, false, intersectPoint );\n\t\t\t\tif ( intersect === null ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\tintersects.push( {\n\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\tuv: Triangle.getUV( intersectPoint, vA, vB, vC, uvA, uvB, uvC, new Vector2() ),\n\t\t\t\tface: null,\n\t\t\t\tobject: this\n\n\t\t\t} );\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.material ).copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\treturn this;\n\n\t}\n\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tvar levels = source.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance ) {\n\n\t\tif ( distance === undefined ) distance = 0;\n\n\t\tdistance = Math.abs( distance );\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn levels[ i - 1 ].object;\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar matrixPosition = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t};\n\n\t}() ),\n\n\tupdate: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tvar distance = v1.distanceTo( v2 );\n\n\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.levels = [];\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author michael guerrero / http://realitymeltdown.com\n * @author ikerr / http://verold.com\n */\n\nfunction Skeleton( bones, boneInverses ) {\n\n\t// copy the bone array\n\n\tbones = bones || [];\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneMatrices = new Float32Array( this.bones.length * 16 );\n\n\t// use the supplied bone inverses or calculate the inverses\n\n\tif ( boneInverses === undefined ) {\n\n\t\tthis.calculateInverses();\n\n\t} else {\n\n\t\tif ( this.bones.length === boneInverses.length ) {\n\n\t\t\tthis.boneInverses = boneInverses.slice( 0 );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Skeleton boneInverses is the wrong length.' );\n\n\t\t\tthis.boneInverses = [];\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses = [];\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.getInverse( this.bones[ i ].matrixWorld );\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\tvar bone, i, il;\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: ( function () {\n\n\t\tvar offsetMatrix = new Matrix4();\n\t\tvar identityMatrix = new Matrix4();\n\n\t\treturn function update() {\n\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\tvar boneTexture = this.boneTexture;\n\n\t\t\t// flatten bone matrices to array\n\n\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\tvar matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix;\n\n\t\t\t\toffsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\toffsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t}\n\n\t\t\tif ( boneTexture !== undefined ) {\n\n\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t};\n\n\t} )(),\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n\tvar bones = this.initBones();\n\tvar skeleton = new Skeleton( bones );\n\n\tthis.bind( skeleton, this.matrixWorld );\n\n\tthis.normalizeSkinWeights();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tinitBones: function () {\n\n\t\tvar bones = [], bone, gbone;\n\t\tvar i, il;\n\n\t\tif ( this.geometry && this.geometry.bones !== undefined ) {\n\n\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t// create new 'Bone' object\n\n\t\t\t\tbone = new Bone();\n\t\t\t\tbones.push( bone );\n\n\t\t\t\t// apply values\n\n\t\t\t\tbone.name = gbone.name;\n\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t}\n\n\t\t\t// second, create bone hierarchy\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\tthis.add( bones[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t// let's update the corresponding matrices\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn bones;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tvar scale, i;\n\n\t\tif ( this.geometry && this.geometry.isGeometry ) {\n\n\t\t\tfor ( i = 0; i < this.geometry.skinWeights.length; i ++ ) {\n\n\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\n\n\t\t\t\tscale = 1.0 / sw.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tsw.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.geometry && this.geometry.isBufferGeometry ) {\n\n\t\t\tvar vec = new Vector4();\n\n\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\tfor ( i = 0; i < skinWeight.count; i ++ ) {\n\n\t\t\t\tvec.x = skinWeight.getX( i );\n\t\t\t\tvec.y = skinWeight.getY( i );\n\t\t\t\tvec.z = skinWeight.getZ( i );\n\t\t\t\tvec.w = skinWeight.getW( i );\n\n\t\t\t\tscale = 1.0 / vec.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tvec.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.error( 'THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.' );\n\n\t}\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [ 0 ];\n\n\t\t\t\t\tfor ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i ] += start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\t\tfor ( var i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar precision = raycaster.linePrecision;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\tsphere.radius += precision;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar localPrecision = precision / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tvar localPrecisionSq = localPrecision * localPrecision;\n\n\t\t\tvar vStart = new Vector3();\n\t\t\tvar vEnd = new Vector3();\n\t\t\tvar interSegment = new Vector3();\n\t\t\tvar interRay = new Vector3();\n\t\t\tvar step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\t\t\t\t\t\tvar b = indices[ i + 1 ];\n\n\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > localPrecisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > localPrecisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localPrecisionSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\tfor ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\tstart.copy( vertices[ i ] );\n\t\t\t\t\tend.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() )\n\n} );\n\n/**\n * @author mgreter / http://github.com/mgreter\n */\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * morphTargets: \n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.morphTargets = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Points( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar object = this;\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar threshold = raycaster.params.Points.threshold;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\tsphere.radius += threshold;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\tvar position = new Vector3();\n\t\t\tvar intersectPoint = new Vector3();\n\n\t\t\tfunction testPoint( point, index ) {\n\n\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\n\n\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\t\t\tray.closestPointToPoint( point, intersectPoint );\n\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tobject: object\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\n\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\n\n\t\t\t\t\t\ttestPoint( position, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\n\n\t\t\t\t\t\ttestPoint( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\ttestPoint( vertices[ i ], i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.generateMipmaps = false;\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tvar video = this.image;\n\n\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\nCanvasTexture.prototype.isCanvasTexture = true;\n\n/**\n * @author Matt DesLauriers / @mattdesl\n * @author atix / arthursilber.de\n */\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps\t= false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WireframeGeometry( geometry ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry';\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar i, j, l, o, ol;\n\tvar edge = [ 0, 0 ], edges = {}, e, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\tvar vertex;\n\n\t// different logic for Geometry and BufferGeometry\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\t// create a data structure that contains all edges without duplicates\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices\n\n\t\tfor ( key in edges ) {\n\n\t\t\te = edges[ key ];\n\n\t\t\tvertex = geometry.vertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\tvar position, indices, groups;\n\t\tvar group, start, count;\n\t\tvar index1, index2;\n\n\t\tvertex = new Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\t\t\tindices = geometry.index;\n\t\t\tgroups = geometry.groups;\n\n\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t}\n\n\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\tfor ( o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tgroup = groups[ o ];\n\n\t\t\t\tstart = group.start;\n\t\t\t\tcount = group.count;\n\n\t\t\t\tfor ( i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tedge1 = indices.getX( i + j );\n\t\t\t\t\t\tedge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( key in edges ) {\n\n\t\t\t\te = edges[ key ];\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// non-indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\n\t\t\tfor ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\tindex1 = 3 * i + j;\n\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tindex2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\nWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n/**\n * @author zz85 / https://github.com/zz85\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\n */\n\n// ParametricGeometry\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\n// ParametricBufferGeometry\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\tvar EPS = 0.00001;\n\n\tvar normal = new Vector3();\n\n\tvar p0 = new Vector3(), p1 = new Vector3();\n\tvar pu = new Vector3(), pv = new Vector3();\n\n\tvar i, j;\n\n\tif ( func.length < 3 ) {\n\n\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t}\n\n\t// generate vertices, normals and uvs\n\n\tvar sliceCount = slices + 1;\n\n\tfor ( i = 0; i <= stacks; i ++ ) {\n\n\t\tvar v = i / stacks;\n\n\t\tfor ( j = 0; j <= slices; j ++ ) {\n\n\t\t\tvar u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( j = 0; j < slices; j ++ ) {\n\n\t\t\tvar a = i * sliceCount + j;\n\t\t\tvar b = i * sliceCount + j + 1;\n\t\t\tvar c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tvar d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * @author clockworkgeek / https://github.com/clockworkgeek\n * @author timothypratley / https://github.com/timothypratley\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PolyhedronGeometry\n\nfunction PolyhedronGeometry( vertices, indices, radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PolyhedronGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nPolyhedronGeometry.prototype = Object.create( Geometry.prototype );\nPolyhedronGeometry.prototype.constructor = PolyhedronGeometry;\n\n// PolyhedronBufferGeometry\n\nfunction PolyhedronBufferGeometry( vertices, indices, radius, detail ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PolyhedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tradius = radius || 1;\n\tdetail = detail || 0;\n\n\t// default buffer data\n\n\tvar vertexBuffer = [];\n\tvar uvBuffer = [];\n\n\t// the subdivision creates the vertex buffer data\n\n\tsubdivide( detail );\n\n\t// all vertices should lie on a conceptual sphere with a given radius\n\n\tappplyRadius( radius );\n\n\t// finally, create the uv data\n\n\tgenerateUVs();\n\n\t// build non-indexed geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\tif ( detail === 0 ) {\n\n\t\tthis.computeVertexNormals(); // flat normals\n\n\t} else {\n\n\t\tthis.normalizeNormals(); // smooth normals\n\n\t}\n\n\t// helper functions\n\n\tfunction subdivide( detail ) {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t// get the vertices of the face\n\n\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t// perform subdivision\n\n\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t}\n\n\t}\n\n\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\tvar cols = Math.pow( 2, detail );\n\n\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\tvar v = [];\n\n\t\tvar i, j;\n\n\t\t// construct all of the vertices for this subdivision\n\n\t\tfor ( i = 0; i <= cols; i ++ ) {\n\n\t\t\tv[ i ] = [];\n\n\t\t\tvar aj = a.clone().lerp( c, i / cols );\n\t\t\tvar bj = b.clone().lerp( c, i / cols );\n\n\t\t\tvar rows = cols - i;\n\n\t\t\tfor ( j = 0; j <= rows; j ++ ) {\n\n\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// construct all of the faces\n\n\t\tfor ( i = 0; i < cols; i ++ ) {\n\n\t\t\tfor ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\tvar k = Math.floor( j / 2 );\n\n\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction appplyRadius( radius ) {\n\n\t\tvar vertex = new Vector3();\n\n\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tvar vertex = new Vector3();\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvar u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\tvar v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t}\n\n\t\tcorrectUVs();\n\n\t\tcorrectSeam();\n\n\t}\n\n\tfunction correctSeam() {\n\n\t\t// handle case when face straddles the seam, see #3269\n\n\t\tfor ( var i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t// uv data of a single face\n\n\t\t\tvar x0 = uvBuffer[ i + 0 ];\n\t\t\tvar x1 = uvBuffer[ i + 2 ];\n\t\t\tvar x2 = uvBuffer[ i + 4 ];\n\n\t\t\tvar max = Math.max( x0, x1, x2 );\n\t\t\tvar min = Math.min( x0, x1, x2 );\n\n\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction pushVertex( vertex ) {\n\n\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t}\n\n\tfunction getVertexByIndex( index, vertex ) {\n\n\t\tvar stride = index * 3;\n\n\t\tvertex.x = vertices[ stride + 0 ];\n\t\tvertex.y = vertices[ stride + 1 ];\n\t\tvertex.z = vertices[ stride + 2 ];\n\n\t}\n\n\tfunction correctUVs() {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\tvar centroid = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tfor ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\tvar azi = azimuth( centroid );\n\n\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t}\n\n\t}\n\n\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t}\n\n\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t}\n\n\t}\n\n\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\tfunction azimuth( vector ) {\n\n\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t}\n\n\n\t// Angle above the XZ plane.\n\n\tfunction inclination( vector ) {\n\n\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t}\n\n}\n\nPolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TetrahedronGeometry\n\nfunction TetrahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TetrahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nTetrahedronGeometry.prototype = Object.create( Geometry.prototype );\nTetrahedronGeometry.prototype.constructor = TetrahedronGeometry;\n\n// TetrahedronBufferGeometry\n\nfunction TetrahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t];\n\n\tvar indices = [\n\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'TetrahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nTetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nTetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// OctahedronGeometry\n\nfunction OctahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'OctahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nOctahedronGeometry.prototype = Object.create( Geometry.prototype );\nOctahedronGeometry.prototype.constructor = OctahedronGeometry;\n\n// OctahedronBufferGeometry\n\nfunction OctahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t];\n\n\tvar indices = [\n\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t1, 3, 4,\t1, 4, 2\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'OctahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nOctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nOctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// IcosahedronGeometry\n\nfunction IcosahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'IcosahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nIcosahedronGeometry.prototype = Object.create( Geometry.prototype );\nIcosahedronGeometry.prototype.constructor = IcosahedronGeometry;\n\n// IcosahedronBufferGeometry\n\nfunction IcosahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\tvar vertices = [\n\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t 0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t t, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t];\n\n\tvar indices = [\n\t\t 0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t 1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t 3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t 4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'IcosahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nIcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nIcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry;\n\n/**\n * @author Abe Pazos / https://hamoid.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// DodecahedronGeometry\n\nfunction DodecahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'DodecahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nDodecahedronGeometry.prototype = Object.create( Geometry.prototype );\nDodecahedronGeometry.prototype.constructor = DodecahedronGeometry;\n\n// DodecahedronBufferGeometry\n\nfunction DodecahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\tvar r = 1 / t;\n\n\tvar vertices = [\n\n\t\t// (±1, ±1, ±1)\n\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t// (0, ±1/φ, ±φ)\n\t\t 0, - r, - t, 0, - r, t,\n\t\t 0, r, - t, 0, r, t,\n\n\t\t// (±1/φ, ±φ, 0)\n\t\t- r, - t, 0, - r, t, 0,\n\t\t r, - t, 0, r, t, 0,\n\n\t\t// (±φ, 0, ±1/φ)\n\t\t- t, 0, - r, t, 0, - r,\n\t\t- t, 0, r, t, 0, r\n\t];\n\n\tvar indices = [\n\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'DodecahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nDodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nDodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry;\n\n/**\n * @author oosmoxiecode / https://github.com/oosmoxiecode\n * @author WestLangley / https://github.com/WestLangley\n * @author zz85 / https://github.com/zz85\n * @author miningold / https://github.com/miningold\n * @author jonobr1 / https://github.com/jonobr1\n * @author Mugen87 / https://github.com/Mugen87\n *\n */\n\n// TubeGeometry\n\nfunction TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TubeGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\tvar bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = bufferGeometry.tangents;\n\tthis.normals = bufferGeometry.normals;\n\tthis.binormals = bufferGeometry.binormals;\n\n\t// create geometry\n\n\tthis.fromBufferGeometry( bufferGeometry );\n\tthis.mergeVertices();\n\n}\n\nTubeGeometry.prototype = Object.create( Geometry.prototype );\nTubeGeometry.prototype.constructor = TubeGeometry;\n\n// TubeBufferGeometry\n\nfunction TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TubeBufferGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\ttubularSegments = tubularSegments || 64;\n\tradius = radius || 1;\n\tradialSegments = radialSegments || 8;\n\tclosed = closed || false;\n\n\tvar frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = frames.tangents;\n\tthis.normals = frames.normals;\n\tthis.binormals = frames.binormals;\n\n\t// helper variables\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\tvar uv = new Vector2();\n\tvar P = new Vector3();\n\n\tvar i, j;\n\n\t// buffer\n\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\tvar indices = [];\n\n\t// create buffer data\n\n\tgenerateBufferData();\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// functions\n\n\tfunction generateBufferData() {\n\n\t\tfor ( i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\tgenerateSegment( i );\n\n\t\t}\n\n\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t// at the regular position on the given path\n\t\t//\n\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t// uvs are generated in a separate function.\n\t\t// this makes it easy compute correct values for closed geometries\n\n\t\tgenerateUVs();\n\n\t\t// finally create faces\n\n\t\tgenerateIndices();\n\n\t}\n\n\tfunction generateSegment( i ) {\n\n\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t// retrieve corresponding normal and binormal\n\n\t\tvar N = frames.normals[ i ];\n\t\tvar B = frames.binormals[ i ];\n\n\t\t// generate normals and vertices for the current segment\n\n\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\tvar sin = Math.sin( v );\n\t\t\tvar cos = - Math.cos( v );\n\n\t\t\t// normal\n\n\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\tnormal.normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\tfunction generateIndices() {\n\n\t\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nTubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTubeBufferGeometry.prototype.constructor = TubeBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author Mugen87 / https://github.com/Mugen87\n *\n * based on http://www.blackpawn.com/texts/pqtorus/\n */\n\n// TorusKnotGeometry\n\nfunction TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusKnotGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\tthis.mergeVertices();\n\n}\n\nTorusKnotGeometry.prototype = Object.create( Geometry.prototype );\nTorusKnotGeometry.prototype.constructor = TorusKnotGeometry;\n\n// TorusKnotBufferGeometry\n\nfunction TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusKnotBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\ttubularSegments = Math.floor( tubularSegments ) || 64;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\tp = p || 2;\n\tq = q || 3;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, j;\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar P1 = new Vector3();\n\tvar P2 = new Vector3();\n\n\tvar B = new Vector3();\n\tvar T = new Vector3();\n\tvar N = new Vector3();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\tvar u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t// calculate orthonormal basis\n\n\t\tT.subVectors( P2, P1 );\n\t\tN.addVectors( P2, P1 );\n\t\tB.crossVectors( T, N );\n\t\tN.crossVectors( B, T );\n\n\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\tB.normalize();\n\t\tN.normalize();\n\n\t\tfor ( j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\tvar cx = - tube * Math.cos( v );\n\t\t\tvar cy = tube * Math.sin( v );\n\n\t\t\t// now calculate the final vertex position.\n\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// this function calculates the current position on the torus curve\n\n\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\tvar cu = Math.cos( u );\n\t\tvar su = Math.sin( u );\n\t\tvar quOverP = q / p * u;\n\t\tvar cs = Math.cos( quOverP );\n\n\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t}\n\n}\n\nTorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TorusGeometry\n\nfunction TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\tthis.mergeVertices();\n\n}\n\nTorusGeometry.prototype = Object.create( Geometry.prototype );\nTorusGeometry.prototype.constructor = TorusGeometry;\n\n// TorusBufferGeometry\n\nfunction TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\ttubularSegments = Math.floor( tubularSegments ) || 6;\n\tarc = arc || Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar center = new Vector3();\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tvar u = i / tubularSegments * arc;\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n * Port from https://github.com/mapbox/earcut (v2.1.2)\n */\n\nvar Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tvar hasHoles = holeIndices && holeIndices.length,\n\t\t\touterLen = hasHoles ? holeIndices[ 0 ] * dim : data.length,\n\t\t\touterNode = linkedList( data, 0, outerLen, dim, true ),\n\t\t\ttriangles = [];\n\n\t\tif ( ! outerNode ) return triangles;\n\n\t\tvar minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( var i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\n\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tvar i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\n\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tvar p = start, again;\n\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\n\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tvar stop = ear, prev, next;\n\n\t// iterate through ears, slicing them one by one\n\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertice leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( ear, triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\n\nfunction isEar( ear ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tvar p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\n\tvar minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\n\tvar minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\t// first look for points inside the triangle in increasing z-order\n\n\tvar p = ear.nextZ;\n\n\twhile ( p && p.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.nextZ;\n\n\t}\n\n\t// then look for points in decreasing z-order\n\n\tp = ear.prevZ;\n\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\n\t\tp = p.prevZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\n\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tvar a = p.prev, b = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn p;\n\n}\n\n// try splitting polygon into two and triangulate them independently\n\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\n\tvar a = start;\n\n\tdo {\n\n\t\tvar b = a.next.next;\n\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\n\t\t\t\tvar c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\n\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tvar queue = [], i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\n\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\n\tif ( outerNode ) {\n\n\t\tvar b = splitPolygon( outerNode, hole );\n\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\n\nfunction findHoleBridge( hole, outerNode ) {\n\n\tvar p = outerNode,\n\t\thx = hole.x,\n\t\thy = hole.y,\n\t\tqx = - Infinity,\n\t\tm;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tvar x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m.prev; // hole touches outer segment; pick lower endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tvar stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y,\n\t\ttanMin = Infinity,\n\t\ttan;\n\n\tp = m.next;\n\n\twhile ( p !== stop ) {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( ( tan < tanMin || ( tan === tanMin && p.x > m.x ) ) && locallyInside( p, hole ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn m;\n\n}\n\n// interlink polygon nodes in z-order\n\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\nfunction sortLinked( list ) {\n\n\tvar i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\n\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\n\nfunction getLeftmost( start ) {\n\n\tvar p = start, leftmost = start;\n\n\tdo {\n\n\t\tif ( p.x < leftmost.x ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\n\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) &&\n\t\tlocallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b );\n\n}\n\n// signed area of a triangle\n\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\n\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\n\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tif ( ( equals( p1, q1 ) && equals( p2, q2 ) ) ||\n\t\t\t( equals( p1, q2 ) && equals( p2, q1 ) ) ) return true;\n\n\treturn area( p1, q1, p2 ) > 0 !== area( p1, q1, q2 ) > 0 &&\n\t\t\t\t area( p2, q2, p1 ) > 0 !== area( p2, q2, q1 ) > 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\n\nfunction intersectsPolygon( a, b ) {\n\n\tvar p = a;\n\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\t\t\tintersects( p, p.next, a, b ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\n\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\n\nfunction middleInside( a, b ) {\n\n\tvar p = a,\n\t\tinside = false,\n\t\tpx = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) {\n\n\t\t\tinside = ! inside;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\nfunction splitPolygon( a, b ) {\n\n\tvar a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\n\nfunction insertNode( i, x, y, last ) {\n\n\tvar p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertice index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertice nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tvar sum = 0;\n\n\tfor ( var i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nvar ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tvar n = contour.length;\n\t\tvar a = 0.0;\n\n\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tvar vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tvar holeIndices = []; // array of hole indices\n\t\tvar faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tvar holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( var i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tvar triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( var i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tvar l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( var i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline is bevel\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n// ExtrudeGeometry\n\nfunction ExtrudeGeometry( shapes, options ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ExtrudeGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\tthis.mergeVertices();\n\n}\n\nExtrudeGeometry.prototype = Object.create( Geometry.prototype );\nExtrudeGeometry.prototype.constructor = ExtrudeGeometry;\n\nExtrudeGeometry.prototype.toJSON = function () {\n\n\tvar data = Geometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\tvar options = this.parameters.options;\n\n\treturn toJSON( shapes, options, data );\n\n};\n\n// ExtrudeBufferGeometry\n\nfunction ExtrudeBufferGeometry( shapes, options ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ExtrudeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\tvar scope = this;\n\n\tvar verticesArray = [];\n\tvar uvArray = [];\n\n\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\tvar shape = shapes[ i ];\n\t\taddShape( shape );\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\tthis.computeVertexNormals();\n\n\t// functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar placeholder = [];\n\n\t\t// options\n\n\t\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\tvar steps = options.steps !== undefined ? options.steps : 1;\n\t\tvar depth = options.depth !== undefined ? options.depth : 100;\n\n\t\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\tvar extrudePath = options.extrudePath;\n\n\t\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t// deprecated options\n\n\t\tif ( options.amount !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\tdepth = options.amount;\n\n\t\t}\n\n\t\t//\n\n\t\tvar extrudePts, extrudeByPath = false;\n\t\tvar splineTube, binormal, normal, position2;\n\n\t\tif ( extrudePath ) {\n\n\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\textrudeByPath = true;\n\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t// SETUP TNB variables\n\n\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\tbinormal = new Vector3();\n\t\t\tnormal = new Vector3();\n\t\t\tposition2 = new Vector3();\n\n\t\t}\n\n\t\t// Safeguards if bevels are not enabled\n\n\t\tif ( ! bevelEnabled ) {\n\n\t\t\tbevelSegments = 0;\n\t\t\tbevelThickness = 0;\n\t\t\tbevelSize = 0;\n\n\t\t}\n\n\t\t// Variables initialization\n\n\t\tvar ahole, h, hl; // looping of holes\n\n\t\tvar shapePoints = shape.extractPoints( curveSegments );\n\n\t\tvar vertices = shapePoints.shape;\n\t\tvar holes = shapePoints.holes;\n\n\t\tvar reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\tif ( reverse ) {\n\n\t\t\tvertices = vertices.reverse();\n\n\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t/* Vertices */\n\n\t\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\tvertices = vertices.concat( ahole );\n\n\t\t}\n\n\n\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t}\n\n\t\tvar b, bs, t, z,\n\t\t\tvert, vlen = vertices.length,\n\t\t\tface, flen = faces.length;\n\n\n\t\t// Find directions for point movement\n\n\n\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t//\n\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t// check for collinear edges\n\t\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t// not collinear\n\n\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t// but prevent crazy spikes\n\t\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\tvar direction_eq = false; // assumes: opposite\n\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t}\n\n\n\t\tvar contourMovements = [];\n\n\t\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\tif ( j === il ) j = 0;\n\t\t\tif ( k === il ) k = 0;\n\n\t\t\t// (j)---(i)---(k)\n\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t}\n\n\t\tvar holesMovements = [],\n\t\t\toneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\toneHoleMovements = [];\n\n\t\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t}\n\n\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t}\n\n\n\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\tfor ( b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tbs = bevelSize;\n\n\t\t// Back facing vertices\n\n\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t} else {\n\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add stepped vertices...\n\t\t// Including front facing vertices\n\n\t\tvar s;\n\n\t\tfor ( s = 1; s <= steps; s ++ ) {\n\n\t\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// Add bevel segments planes\n\n\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/* Faces */\n\n\t\t// Top and bottom faces\n\n\t\tbuildLidFaces();\n\n\t\t// Sides faces\n\n\t\tbuildSideFaces();\n\n\n\t\t///// Internal functions\n\n\t\tfunction buildLidFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\n\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\tvar layer = 0; // steps + 1\n\t\t\t\tvar offset = vlen * layer;\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t}\n\n\t\t// Create faces for the z-sides of the shape\n\n\t\tfunction buildSideFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\t\t\tvar layeroffset = 0;\n\t\t\tsidewalls( contour, layeroffset );\n\t\t\tlayeroffset += contour.length;\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t//, true\n\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t}\n\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t}\n\n\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\tvar j, k;\n\t\t\ti = contour.length;\n\n\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\tj = i;\n\t\t\t\tk = i - 1;\n\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\tvar s = 0,\n\t\t\t\t\tsl = steps + bevelSegments * 2;\n\n\t\t\t\tfor ( s = 0; s < sl; s ++ ) {\n\n\t\t\t\t\tvar slen1 = vlen * s;\n\t\t\t\t\tvar slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\tvar a = layeroffset + j + slen1,\n\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction v( x, y, z ) {\n\n\t\t\tplaceholder.push( x );\n\t\t\tplaceholder.push( y );\n\t\t\tplaceholder.push( z );\n\n\t\t}\n\n\n\t\tfunction f3( a, b, c ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\n\t\t}\n\n\t\tfunction f4( a, b, c, d ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( d );\n\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\t\t\taddVertex( d );\n\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t}\n\n\t\tfunction addVertex( index ) {\n\n\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t}\n\n\n\t\tfunction addUV( vector2 ) {\n\n\t\t\tuvArray.push( vector2.x );\n\t\t\tuvArray.push( vector2.y );\n\n\t\t}\n\n\t}\n\n}\n\nExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry;\n\nExtrudeBufferGeometry.prototype.toJSON = function () {\n\n\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\tvar options = this.parameters.options;\n\n\treturn toJSON( shapes, options, data );\n\n};\n\n//\n\nvar WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar a_z = vertices[ indexA * 3 + 2 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar b_z = vertices[ indexB * 3 + 2 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\t\tvar c_z = vertices[ indexC * 3 + 2 ];\n\t\tvar d_x = vertices[ indexD * 3 ];\n\t\tvar d_y = vertices[ indexD * 3 + 1 ];\n\t\tvar d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n};\n\nfunction toJSON( shapes, options, data ) {\n\n\t//\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\t//\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author alteredq / http://alteredqualia.com/\n *\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: // how far from text outline is bevel\n * }\n */\n\n// TextGeometry\n\nfunction TextGeometry( text, parameters ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TextGeometry';\n\n\tthis.parameters = {\n\t\ttext: text,\n\t\tparameters: parameters\n\t};\n\n\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\tthis.mergeVertices();\n\n}\n\nTextGeometry.prototype = Object.create( Geometry.prototype );\nTextGeometry.prototype.constructor = TextGeometry;\n\n// TextBufferGeometry\n\nfunction TextBufferGeometry( text, parameters ) {\n\n\tparameters = parameters || {};\n\n\tvar font = parameters.font;\n\n\tif ( ! ( font && font.isFont ) ) {\n\n\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\treturn new Geometry();\n\n\t}\n\n\tvar shapes = font.generateShapes( text, parameters.size );\n\n\t// translate parameters to ExtrudeGeometry API\n\n\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t// defaults\n\n\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\tExtrudeBufferGeometry.call( this, shapes, parameters );\n\n\tthis.type = 'TextBufferGeometry';\n\n}\n\nTextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype );\nTextBufferGeometry.prototype.constructor = TextBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// SphereGeometry\n\nfunction SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'SphereGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nSphereGeometry.prototype = Object.create( Geometry.prototype );\nSphereGeometry.prototype.constructor = SphereGeometry;\n\n// SphereBufferGeometry\n\nfunction SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'SphereBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\n\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\n\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\n\n\tphiStart = phiStart !== undefined ? phiStart : 0;\n\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\n\n\tvar thetaEnd = thetaStart + thetaLength;\n\n\tvar ix, iy;\n\n\tvar index = 0;\n\tvar grid = [];\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\tvar verticesRow = [];\n\n\t\tvar v = iy / heightSegments;\n\n\t\tfor ( ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\tvar u = ix / widthSegments;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormal.set( vertex.x, vertex.y, vertex.z ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, 1 - v );\n\n\t\t\tverticesRow.push( index ++ );\n\n\t\t}\n\n\t\tgrid.push( verticesRow );\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\tvar a = grid[ iy ][ ix + 1 ];\n\t\t\tvar b = grid[ iy ][ ix ];\n\t\t\tvar c = grid[ iy + 1 ][ ix ];\n\t\t\tvar d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\n\n/**\n * @author Kaleb Murphy\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// RingGeometry\n\nfunction RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'RingGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nRingGeometry.prototype = Object.create( Geometry.prototype );\nRingGeometry.prototype.constructor = RingGeometry;\n\n// RingBufferGeometry\n\nfunction RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'RingBufferGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tinnerRadius = innerRadius || 0.5;\n\touterRadius = outerRadius || 1;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\n\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// some helper variables\n\n\tvar segment;\n\tvar radius = innerRadius;\n\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= phiSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\tsegment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// increase the radius for next row of vertices\n\n\t\tradius += radiusStep;\n\n\t}\n\n\t// indices\n\n\tfor ( j = 0; j < phiSegments; j ++ ) {\n\n\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\tsegment = i + thetaSegmentLevel;\n\n\t\t\tvar a = segment;\n\t\t\tvar b = segment + thetaSegments + 1;\n\t\t\tvar c = segment + thetaSegments + 2;\n\t\t\tvar d = segment + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nRingBufferGeometry.prototype.constructor = RingBufferGeometry;\n\n/**\n * @author zz85 / https://github.com/zz85\n * @author bhouston / http://clara.io\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// LatheGeometry\n\nfunction LatheGeometry( points, segments, phiStart, phiLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'LatheGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\tthis.mergeVertices();\n\n}\n\nLatheGeometry.prototype = Object.create( Geometry.prototype );\nLatheGeometry.prototype.constructor = LatheGeometry;\n\n// LatheBufferGeometry\n\nfunction LatheBufferGeometry( points, segments, phiStart, phiLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'LatheBufferGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tsegments = Math.floor( segments ) || 12;\n\tphiStart = phiStart || 0;\n\tphiLength = phiLength || Math.PI * 2;\n\n\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\tphiLength = _Math.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar base;\n\tvar inverseSegments = 1.0 / segments;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar i, j;\n\n\t// generate vertices and uvs\n\n\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\n\t\tvar sin = Math.sin( phi );\n\t\tvar cos = Math.cos( phi );\n\n\t\tfor ( j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\tvertex.y = points[ j ].y;\n\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// uv\n\n\t\t\tuv.x = i / segments;\n\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( i = 0; i < segments; i ++ ) {\n\n\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\tbase = j + i * points.length;\n\n\t\t\tvar a = base;\n\t\t\tvar b = base + points.length;\n\t\t\tvar c = base + points.length + 1;\n\t\t\tvar d = base + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// generate normals\n\n\tthis.computeVertexNormals();\n\n\t// if the geometry is closed, we need to average the normals along the seam.\n\t// because the corresponding vertices are identical (but still have different UVs).\n\n\tif ( phiLength === Math.PI * 2 ) {\n\n\t\tvar normals = this.attributes.normal.array;\n\t\tvar n1 = new Vector3();\n\t\tvar n2 = new Vector3();\n\t\tvar n = new Vector3();\n\n\t\t// this is the buffer offset for the last line of vertices\n\n\t\tbase = segments * points.length * 3;\n\n\t\tfor ( i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t// select the normal of the vertex in the first line\n\n\t\t\tn1.x = normals[ j + 0 ];\n\t\t\tn1.y = normals[ j + 1 ];\n\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t// select the normal of the vertex in the last line\n\n\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t// average normals\n\n\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t// assign the new values to both normals\n\n\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t}\n\n\t}\n\n}\n\nLatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nLatheBufferGeometry.prototype.constructor = LatheBufferGeometry;\n\n/**\n * @author jonobr1 / http://jonobr1.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// ShapeGeometry\n\nfunction ShapeGeometry( shapes, curveSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ShapeGeometry';\n\n\tif ( typeof curveSegments === 'object' ) {\n\n\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\tcurveSegments = curveSegments.curveSegments;\n\n\t}\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\tthis.mergeVertices();\n\n}\n\nShapeGeometry.prototype = Object.create( Geometry.prototype );\nShapeGeometry.prototype.constructor = ShapeGeometry;\n\nShapeGeometry.prototype.toJSON = function () {\n\n\tvar data = Geometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON$1( shapes, data );\n\n};\n\n// ShapeBufferGeometry\n\nfunction ShapeBufferGeometry( shapes, curveSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ShapeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tcurveSegments = curveSegments || 12;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar groupStart = 0;\n\tvar groupCount = 0;\n\n\t// allow single and array values for \"shapes\" parameter\n\n\tif ( Array.isArray( shapes ) === false ) {\n\n\t\taddShape( shapes );\n\n\t} else {\n\n\t\tfor ( var i = 0; i < shapes.length; i ++ ) {\n\n\t\t\taddShape( shapes[ i ] );\n\n\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\tgroupStart += groupCount;\n\t\t\tgroupCount = 0;\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t// helper functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar i, l, shapeHole;\n\n\t\tvar indexOffset = vertices.length / 3;\n\t\tvar points = shape.extractPoints( curveSegments );\n\n\t\tvar shapeVertices = points.shape;\n\t\tvar shapeHoles = points.holes;\n\n\t\t// check direction of vertices\n\n\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t// also check if holes are in the opposite direction\n\n\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tshapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t// join vertices of inner and outer paths to a single array\n\n\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\tshapeHole = shapeHoles[ i ];\n\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t}\n\n\t\t// vertices, normals, uvs\n\n\t\tfor ( i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\tvar vertex = shapeVertices[ i ];\n\n\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\tnormals.push( 0, 0, 1 );\n\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t}\n\n\t\t// incides\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar a = face[ 0 ] + indexOffset;\n\t\t\tvar b = face[ 1 ] + indexOffset;\n\t\t\tvar c = face[ 2 ] + indexOffset;\n\n\t\t\tindices.push( a, b, c );\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t}\n\n}\n\nShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry;\n\nShapeBufferGeometry.prototype.toJSON = function () {\n\n\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON$1( shapes, data );\n\n};\n\n//\n\nfunction toJSON$1( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction EdgesGeometry( geometry, thresholdAngle ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'EdgesGeometry';\n\n\tthis.parameters = {\n\t\tthresholdAngle: thresholdAngle\n\t};\n\n\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle );\n\tvar edge = [ 0, 0 ], edges = {}, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\n\t// prepare source geometry\n\n\tvar geometry2;\n\n\tif ( geometry.isBufferGeometry ) {\n\n\t\tgeometry2 = new Geometry();\n\t\tgeometry2.fromBufferGeometry( geometry );\n\n\t} else {\n\n\t\tgeometry2 = geometry.clone();\n\n\t}\n\n\tgeometry2.mergeVertices();\n\tgeometry2.computeFaceNormals();\n\n\tvar sourceVertices = geometry2.vertices;\n\tvar faces = geometry2.faces;\n\n\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tvar face = faces[ i ];\n\n\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\tedge[ 0 ] = Math.min( edge1, edge2 );\n\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };\n\n\t\t\t} else {\n\n\t\t\t\tedges[ key ].face2 = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// generate vertices\n\n\tfor ( key in edges ) {\n\n\t\tvar e = edges[ key ];\n\n\t\t// an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n\n\t\tif ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) {\n\n\t\t\tvar vertex = sourceVertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = sourceVertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\nEdgesGeometry.prototype.constructor = EdgesGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// CylinderGeometry\n\nfunction CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CylinderGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCylinderGeometry.prototype = Object.create( Geometry.prototype );\nCylinderGeometry.prototype.constructor = CylinderGeometry;\n\n// CylinderBufferGeometry\n\nfunction CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CylinderBufferGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tvar scope = this;\n\n\tradiusTop = radiusTop !== undefined ? radiusTop : 1;\n\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 1;\n\theight = height || 1;\n\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\n\topenEnded = openEnded !== undefined ? openEnded : false;\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar index = 0;\n\tvar indexArray = [];\n\tvar halfHeight = height / 2;\n\tvar groupStart = 0;\n\n\t// generate geometry\n\n\tgenerateTorso();\n\n\tif ( openEnded === false ) {\n\n\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction generateTorso() {\n\n\t\tvar x, y;\n\t\tvar normal = new Vector3();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\t// this will be used to calculate the normal\n\t\tvar slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\tvar indexRow = [];\n\n\t\t\tvar v = y / heightSegments;\n\n\t\t\t// calculate the radius of the current row\n\n\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tvar u = x / radialSegments;\n\n\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\tvar sinTheta = Math.sin( theta );\n\t\t\t\tvar cosTheta = Math.cos( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\t// now save vertices of the row in our index array\n\n\t\t\tindexArray.push( indexRow );\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tfor ( y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\tvar a = indexArray[ y ][ x ];\n\t\t\t\tvar b = indexArray[ y + 1 ][ x ];\n\t\t\t\tvar c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\tvar d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// update group counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n\tfunction generateCap( top ) {\n\n\t\tvar x, centerIndexStart, centerIndexEnd;\n\n\t\tvar uv = new Vector2();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\tvar sign = ( top === true ) ? 1 : - 1;\n\n\t\t// save the index of the first center vertex\n\t\tcenterIndexStart = index;\n\n\t\t// first we generate the center vertex data of the cap.\n\t\t// because the geometry needs one set of uvs per face,\n\t\t// we must generate a center vertex per face/segment\n\n\t\tfor ( x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// save the index of the last center vertex\n\n\t\tcenterIndexEnd = index;\n\n\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\tvar u = x / radialSegments;\n\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\tvar cosTheta = Math.cos( theta );\n\t\t\tvar sinTheta = Math.sin( theta );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * sinTheta;\n\t\t\tvertex.y = halfHeight * sign;\n\t\t\tvertex.z = radius * cosTheta;\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tvar c = centerIndexStart + x;\n\t\t\tvar i = centerIndexEnd + x;\n\n\t\t\tif ( top === true ) {\n\n\t\t\t\t// face top\n\n\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t} else {\n\n\t\t\t\t// face bottom\n\n\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t}\n\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n}\n\nCylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\n// ConeGeometry\n\nfunction ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeGeometry.prototype = Object.create( CylinderGeometry.prototype );\nConeGeometry.prototype.constructor = ConeGeometry;\n\n// ConeBufferGeometry\n\nfunction ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype );\nConeBufferGeometry.prototype.constructor = ConeBufferGeometry;\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n * @author hughes\n */\n\n// CircleGeometry\n\nfunction CircleGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CircleGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCircleGeometry.prototype = Object.create( Geometry.prototype );\nCircleGeometry.prototype.constructor = CircleGeometry;\n\n// CircleBufferGeometry\n\nfunction CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CircleBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, s;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\n\t// center point\n\n\tvertices.push( 0, 0, 0 );\n\tnormals.push( 0, 0, 1 );\n\tuvs.push( 0.5, 0.5 );\n\n\tfor ( s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\tvar segment = thetaStart + s / segments * thetaLength;\n\n\t\t// vertex\n\n\t\tvertex.x = radius * Math.cos( segment );\n\t\tvertex.y = radius * Math.sin( segment );\n\n\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t// normal\n\n\t\tnormals.push( 0, 0, 1 );\n\n\t\t// uvs\n\n\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\tuvs.push( uv.x, uv.y );\n\n\t}\n\n\t// indices\n\n\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\tindices.push( i, i + 1, 0 );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\n\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\tWireframeGeometry: WireframeGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * parameters = {\n * color: \n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 0.5;\n\tthis.metalness = 0.5;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * reflectivity: \n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tthis.clearCoat = 0.0;\n\tthis.clearCoatRoughness = 0.0;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.reflectivity = source.reflectivity;\n\n\tthis.clearCoat = source.clearCoat;\n\tthis.clearCoatRoughness = source.clearCoatRoughness;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author takahirox / http://github.com/takahirox\n *\n * parameters = {\n * gradientMap: new THREE.Texture( )\n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMeshPhongMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.gradientMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMeshPhongMaterial.prototype.copy.call( this, source );\n\n\tthis.gradientMap = source.gradientMap;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshMatcapMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.type = 'MeshMatcapMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.matcap = null;\n\n\tthis.map = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n\t// a matcap is required\n\n\tif ( this.matcap === null ) {\n\n\t\tvar canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = 1;\n\t\tcanvas.height = 1;\n\n\t\tvar context = canvas.getContext( '2d' );\n\n\t\tcontext.fillStyle = '#fff';\n\t\tcontext.fillRect( 0, 0, 1, 1 );\n\n\t\tthis.matcap = new THREE.CanvasTexture( canvas );\n\n\t}\n\n}\n\nMeshMatcapMaterial.prototype = Object.create( Material.prototype );\nMeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial;\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\nMeshMatcapMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.color.copy( source.color );\n\n\tthis.matcap = source.matcap;\n\n\tthis.map = source.map;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\n\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tvar scope = this;\n\n\tvar isLoading = false;\n\tvar itemsLoaded = 0;\n\tvar itemsTotal = 0;\n\tvar urlModifier = undefined;\n\n\t// Refer to #5689 for the reason why we don't set .onStart\n\t// in the constructor\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\t\treturn this;\n\n\t};\n\n}\n\nvar DefaultLoadingManager = new LoadingManager();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar loading = {};\n\nfunction FileLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FileLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tvar response;\n\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tvar response = this.response;\n\n\t\t\t\tCache.add( url, response );\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( value ) {\n\n\t\tthis.requestHeader = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( CompressedTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar images = [];\n\n\t\tvar texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Nikos M. / https://github.com/foo123/\n *\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( DataTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new DataTexture();\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t}\n\n\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction ImageLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( ImageLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction CubeTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( CubeTextureLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new CubeTexture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tvar loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction TextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( TextureLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new Texture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tvar isJPEG = url.search( /\\.jpe?g$/i ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Extensible curve object\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\n/**************************************************************\n *\tAbstract Curve base class\n **************************************************************/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tvar lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tvar cache = [];\n\t\tvar current, last = this.getPoint( 0 );\n\t\tvar p, sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tvar arcLengths = this.getLengths();\n\n\t\tvar i = 0, il = arcLengths.length;\n\n\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tvar low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tvar lengthBefore = arcLengths[ i ];\n\t\tvar lengthAfter = arcLengths[ i + 1 ];\n\n\t\tvar segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t ) {\n\n\t\tvar delta = 0.0001;\n\t\tvar t1 = t - delta;\n\t\tvar t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tvar pt1 = this.getPoint( t1 );\n\t\tvar pt2 = this.getPoint( t2 );\n\n\t\tvar vec = pt2.clone().sub( pt1 );\n\t\treturn vec.normalize();\n\n\t},\n\n\tgetTangentAt: function ( u ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tvar normal = new Vector3();\n\n\t\tvar tangents = [];\n\t\tvar normals = [];\n\t\tvar binormals = [];\n\n\t\tvar vec = new Vector3();\n\t\tvar mat = new Matrix4();\n\n\t\tvar i, u, theta;\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\tu = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tvar min = Number.MAX_VALUE;\n\t\tvar tx = Math.abs( tangents[ 0 ].x );\n\t\tvar ty = Math.abs( tangents[ 0 ].y );\n\t\tvar tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\ttheta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\ttheta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar twoPi = Math.PI * 2;\n\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\tvar samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tvar angle = this.aStartAngle + t * deltaAngle;\n\tvar x = this.aX + this.xRadius * Math.cos( angle );\n\tvar y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tvar cos = Math.cos( this.aRotation );\n\t\tvar sin = Math.sin( this.aRotation );\n\n\t\tvar tx = x - this.aX;\n\t\tvar ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * @author zz85 https://github.com/zz85\n *\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tvar c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nvar tmp = new Vector3();\nvar px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points, closed, curveType, tension ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points || [];\n\tthis.closed = closed || false;\n\tthis.curveType = curveType || 'centripetal';\n\tthis.tension = tension || 0.5;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar points = this.points;\n\tvar l = points.length;\n\n\tvar p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tvar p0, p1, p2, p3; // 4 points\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tp1 = points[ intPoint % l ];\n\tp2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tvar dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tvar v0 = ( p2 - p0 ) * 0.5;\n\tvar v1 = ( p3 - p1 ) * 0.5;\n\tvar t2 = t * t;\n\tvar t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tvar k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\tthis.v3 = v3 || new Vector2();\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\tthis.v3 = v3 || new Vector3();\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( /* t */ ) {\n\n\tvar tangent = this.v2.clone().sub( this.v1 );\n\n\treturn tangent.normalize();\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points /* array of Vector2 */ ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points || [];\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar points = this.points;\n\tvar p = ( points.length - 1 ) * t;\n\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tvar p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tvar p1 = points[ intPoint ];\n\tvar p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tvar p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\n\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n **/\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tvar d = t * this.getLength();\n\t\tvar curveLengths = this.getCurveLengths();\n\t\tvar i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tvar diff = curveLengths[ i ] - d;\n\t\t\t\tvar curve = this.curves[ i ];\n\n\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Creates free form 2d path using series of points, lines or curves.\n **/\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( var i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tvar curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tvar curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tvar curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tvar npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tvar curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tvar firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tvar lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Defines a 2d shape plane using paths.\n **/\n\n// STEP 1 Create a path.\n// STEP 2 Turn path into shape.\n// STEP 3 ExtrudeGeometry takes in Shape/Shapes\n// STEP 3a - Extract points from each shape, turn to vertices\n// STEP 3b - Triangulate each shape, add faces.\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tvar holesPts = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Light( color, intensity ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity !== undefined ? intensity : 1;\n\n\tthis.receiveShadow = undefined;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.castShadow = undefined;\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.matrix = new Matrix4();\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdate: function ( light ) {\n\n\t\tvar camera = this.camera;\n\n\t\tvar fov = _Math.RAD2DEG * 2 * light.angle;\n\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\tvar far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author arose / http://github.com/arose\n */\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = left;\n\tthis.right = right;\n\tthis.top = top;\n\tthis.bottom = bottom;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tvar cx = ( this.right + this.left ) / 2;\n\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\tvar left = cx - dx;\n\t\tvar right = cx + dx;\n\t\tvar top = cy + dy;\n\t\tvar bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.getInverse( this.projectionMatrix );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectionalLightShadow( ) {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n\tthis.castShadow = undefined;\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nvar AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tvar n = times.length;\n\t\tvar result = new Array( n );\n\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tvar nValues = values.length;\n\t\tvar result = new values.constructor( nValues );\n\n\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tvar srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tvar i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tvar value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t}\n\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n * @author tschw\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\ti1 = this._cachedIndex,\n\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tvar right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tvar t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n *\n * @author tschw\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\tiPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tvar s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tvar s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tvar sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n */\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n *\n * @author tschw\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\n/**\n *\n * A timed sequence of keyframes for a specific property.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n}\n\n// Static methods\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\ttoJSON: function ( track ) {\n\n\t\tvar trackType = track.constructor;\n\n\t\tvar json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tvar factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tvar message = \"unsupported interpolation for \" +\n\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim: function ( startTime, endTime ) {\n\n\t\tvar times = this.times,\n\t\t\tnKeys = times.length,\n\t\t\tfrom = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) to = Math.max( to, 1 ), from = to - 1;\n\n\t\t\tvar stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tvar valid = true;\n\n\t\tvar valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar prevTime = null;\n\n\t\tfor ( var i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tvar currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\twriteIndex = 1,\n\t\t\tlastIndex = times.length - 1;\n\n\t\tfor ( var i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tvar keep = false;\n\n\t\t\tvar time = times[ i ];\n\t\t\tvar timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvar value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of Boolean keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n *\n * A Track of keyframe values that represent color.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n *\n * A Track of numeric keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n *\n * @author tschw\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset = i1 * stride,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of quaternion keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n *\n * A Track that interpolates Strings\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n *\n * A Track of vectored keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n *\n * Reusable set of Tracks that represent an animation.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nfunction AnimationClip( name, duration, tracks ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tvar trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tvar times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tvar tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( json.name, json.duration, tracks );\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tvar tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tvar json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid\n\n\t\t};\n\n\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\tvar tracks = [];\n\n\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tvar times = [];\n\t\t\tvar values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tvar order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tvar clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tvar o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tvar animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = morphTargets[ i ];\n\t\t\tvar parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tvar name = parts[ 1 ];\n\n\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar clips = [];\n\n\t\tfor ( var name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tvar tracks = [];\n\n\t\tvar clipName = animation.name || 'default';\n\t\t// automatic length determination in AnimationClip.\n\t\tvar duration = animation.length || - 1;\n\t\tvar fps = animation.fps || 30;\n\n\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tvar morphTargetNames = {};\n\n\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\n\t\t\t\t\tfor ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tvar animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar clip = new AnimationClip( clipName, duration, tracks );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tvar tracks = this.tracks, duration = 0;\n\n\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tvar track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tvalidate: function () {\n\n\t\tvar valid = true;\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction MaterialLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.textures = {};\n\n}\n\nObject.assign( MaterialLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tvar material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( var name in json.uniforms ) {\n\n\t\t\t\tvar uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\n\t\tif ( json.alphaMap !== undefined ) {\n\n\t\t\tmaterial.alphaMap = getTexture( json.alphaMap );\n\t\t\tmaterial.transparent = true;\n\n\t\t}\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tvar normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\treturn material;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferGeometryLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( BufferGeometryLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tvar attributes = json.data.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t}\n\n\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tvar center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nvar TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nvar LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\t// Merges multi-byte utf-8 characters.\n\t\treturn decodeURIComponent( escape( s ) );\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tvar index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar path = ( this.path === undefined ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, path );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetResourcePath: function ( value ) {\n\n\t\tthis.resourcePath = value;\n\t\treturn this;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\n\n\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\n\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, path ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, this.resourcePath || path, this.crossOrigin );\n\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ObjectLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.texturePath = '';\n\n}\n\nObject.assign( ObjectLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.texturePath === '' ) {\n\n\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\t\treturn this;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tparse: function ( json, onLoad ) {\n\n\t\tvar shapes = this.parseShape( json.shapes );\n\t\tvar geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tvar textures = this.parseTextures( json.textures, images );\n\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\tif ( json.animations ) {\n\n\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t}\n\n\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t},\n\n\tparseShape: function ( json ) {\n\n\t\tvar shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t},\n\n\tparseGeometries: function ( json, shapes ) {\n\n\t\tvar geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar geometry;\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t},\n\n\tparseMaterials: function ( json, textures ) {\n\n\t\tvar materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t},\n\n\tparseAnimations: function ( json ) {\n\n\t\tvar animations = [];\n\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\tvar data = json[ i ];\n\n\t\t\tvar clip = AnimationClip.parse( data );\n\n\t\t\tif ( data.uuid !== undefined ) clip.uuid = data.uuid;\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t},\n\n\tparseImages: function ( json, onLoad ) {\n\n\t\tvar scope = this;\n\t\tvar images = {};\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\tvar loader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( var i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tvar image = json[ i ];\n\t\t\t\tvar url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( var j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar currentUrl = url[ j ];\n\n\t\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( currentUrl ) ? currentUrl : scope.texturePath + currentUrl;\n\n\t\t\t\t\t\timages[ image.uuid ].push( loadImage( path ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t},\n\n\tparseTextures: function ( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tvar textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( Array.isArray( images[ data.image ] ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( images[ data.image ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture = new Texture( images[ data.image ] );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t},\n\n\tparseObject: function ( data, geometries, materials ) {\n\n\t\tvar object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tvar levels = data.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tvar level = levels[ l ];\n\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n} );\n\nvar TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tSphericalReflectionMapping: SphericalReflectionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nvar TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nvar TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n};\n\n/**\n * @author thespite / http://clicktorelease.com/\n */\n\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\tthis.options = undefined;\n\n}\n\nImageBitmapLoader.prototype = {\n\n\tconstructor: ImageBitmapLoader,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tfetch( url ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t} );\n\n\t},\n\n\tsetCrossOrigin: function ( /* value */ ) {\n\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n **/\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tvar shapes = [];\n\n\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tvar inside = false;\n\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\tvar subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tvar betterShapeHoles = [];\n\t\tvar newShapes = [];\n\t\tvar newShapeHoles = [];\n\t\tvar mainIdx = 0;\n\t\tvar tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tvar ambiguous = false;\n\t\t\tvar toChange = [];\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar tmpHoles;\n\n\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size ) {\n\n\t\tif ( size === undefined ) size = 100;\n\n\t\tvar shapes = [];\n\t\tvar paths = createPaths( text, size, this.data );\n\n\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, data ) {\n\n\tvar chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // see #13988\n\tvar scale = size / data.resolution;\n\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tvar paths = [];\n\n\tvar offsetX = 0, offsetY = 0;\n\n\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\tvar char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tvar ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tvar glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) return;\n\n\tvar path = new ShapePath();\n\n\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\tvar action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction FontLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FontLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tvar font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar context;\n\nvar AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( context === undefined ) {\n\n\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\tcontext = value;\n\n\t}\n\n};\n\n/**\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction AudioLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( AudioLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\tvar bufferCopy = buffer.slice( 0 );\n\n\t\t\tvar context = AudioContext.getContext();\n\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t} );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: ( function () {\n\n\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\tvar eyeRight = new Matrix4();\n\t\tvar eyeLeft = new Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tinstance = this;\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * Camera for rendering cube maps\n *\t- renders scene into axis-aligned cube\n *\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CubeCamera( near, far, cubeResolution ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tvar fov = 90, aspect = 1;\n\n\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tvar renderTarget = this.renderTarget;\n\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderTarget.activeCubeFace = 0;\n\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 1;\n\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 2;\n\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 3;\n\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 4;\n\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderTarget.activeCubeFace = 5;\n\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tvar renderTarget = this.renderTarget;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\trenderTarget.activeCubeFace = i;\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioListener() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'AudioListener';\n\n\tthis.context = AudioContext.getContext();\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( this.context.destination );\n\n\tthis.filter = null;\n\n}\n\nAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: AudioListener,\n\n\tgetInput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tremoveFilter: function ( ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.filter;\n\n\t},\n\n\tsetFilter: function ( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t},\n\n\tgetMasterVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetMasterVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar listener = this.context.listener;\n\t\t\tvar up = this.up;\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tif ( listener.positionX ) {\n\n\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t} else {\n\n\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction Audio( listener ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Audio';\n\n\tthis.context = listener.context;\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( listener.getInput() );\n\n\tthis.autoplay = false;\n\n\tthis.buffer = null;\n\tthis.loop = false;\n\tthis.startTime = 0;\n\tthis.offset = 0;\n\tthis.playbackRate = 1;\n\tthis.isPlaying = false;\n\tthis.hasPlaybackControl = true;\n\tthis.sourceType = 'empty';\n\n\tthis.filters = [];\n\n}\n\nAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Audio,\n\n\tgetOutput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tsetNodeSource: function ( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetMediaElementSource: function ( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetBuffer: function ( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t},\n\n\tplay: function () {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar source = this.context.createBufferSource();\n\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\tthis.startTime = this.context.currentTime;\n\t\tsource.start( this.startTime, this.offset );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\treturn this.connect();\n\n\t},\n\n\tpause: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\t\t\tthis.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.offset = 0;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t},\n\n\tconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilters: function () {\n\n\t\treturn this.filters;\n\n\t},\n\n\tsetFilters: function ( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value;\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t},\n\n\tsetFilter: function ( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t},\n\n\tsetPlaybackRate: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetPlaybackRate: function () {\n\n\t\treturn this.playbackRate;\n\n\t},\n\n\tonEnded: function () {\n\n\t\tthis.isPlaying = false;\n\n\t},\n\n\tgetLoop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t},\n\n\tsetLoop: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PositionalAudio( listener ) {\n\n\tAudio.call( this, listener );\n\n\tthis.panner = this.context.createPanner();\n\tthis.panner.connect( this.gain );\n\n}\n\nPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\tconstructor: PositionalAudio,\n\n\tgetOutput: function () {\n\n\t\treturn this.panner;\n\n\t},\n\n\tgetRefDistance: function () {\n\n\t\treturn this.panner.refDistance;\n\n\t},\n\n\tsetRefDistance: function ( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetRolloffFactor: function () {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t},\n\n\tsetRolloffFactor: function ( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetDistanceModel: function () {\n\n\t\treturn this.panner.distanceModel;\n\n\t},\n\n\tsetDistanceModel: function ( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxDistance: function () {\n\n\t\treturn this.panner.maxDistance;\n\n\t},\n\n\tsetMaxDistance: function ( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t},\n\n\tsetDirectionalCone: function ( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar panner = this.panner;\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\tpanner.setPosition( position.x, position.y, position.z );\n\t\t\tpanner.setOrientation( orientation.x, orientation.y, orientation.z );\n\n\t\t};\n\n\t} )()\n\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioAnalyser( audio, fftSize ) {\n\n\tthis.analyser = audio.context.createAnalyser();\n\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\taudio.getOutput().connect( this.analyser );\n\n}\n\nObject.assign( AudioAnalyser.prototype, {\n\n\tgetFrequencyData: function () {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t},\n\n\tgetAverageFrequency: function () {\n\n\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n} );\n\n/**\n *\n * Buffered scene graph property that allows weighted accumulation.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tvar bufferType = Float64Array,\n\t\tmixFunction;\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tbufferType = Array;\n\t\t\tmixFunction = this._select;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\n\t}\n\n\tthis.buffer = new bufferType( valueSize * 4 );\n\t// layout: [ incoming | accu0 | accu1 | orig ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\n\tthis._mixBufferRegion = mixFunction;\n\n\tthis.cumulativeWeight = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tcurrentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tvar mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tvar stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tvar originalValueOffset = stride * 3;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tvar binding = this.binding;\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * 3;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\tthis.cumulativeWeight = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tvar originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tvar s = 1 - t;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tvar j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * A reference to a real property in the scene graph.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\n// Characters [].:/ are reserved for track binding syntax.\nvar RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: ( function () {\n\n\t\tvar reservedRe = new RegExp( '[' + RESERVED_CHARS_RE + ']', 'g' );\n\n\t\treturn function sanitizeNodeName( name ) {\n\n\t\t\treturn name.replace( /\\s/g, '_' ).replace( reservedRe, '' );\n\n\t\t};\n\n\t}() ),\n\n\tparseTrackName: function () {\n\n\t\t// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t\t// instead, we exclude reserved characters and match everything else.\n\t\tvar wordChar = '[^' + RESERVED_CHARS_RE + ']';\n\t\tvar wordCharOrDot = '[^' + RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n\t\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t\t// be matched to parse the rest of the track name.\n\t\tvar directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', wordChar );\n\n\t\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\t\tvar nodeRe = /(WCOD+)?/.source.replace( 'WCOD', wordCharOrDot );\n\n\t\t// Object on target node, and accessor. May not contain reserved\n\t\t// characters. Accessor may contain any character except closing bracket.\n\t\tvar objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', wordChar );\n\n\t\t// Property and accessor. May not contain reserved characters. Accessor may\n\t\t// contain any non-bracket characters.\n\t\tvar propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', wordChar );\n\n\t\tvar trackRe = new RegExp( ''\n\t\t\t+ '^'\n\t\t\t+ directoryRe\n\t\t\t+ nodeRe\n\t\t\t+ objectRe\n\t\t\t+ propertyRe\n\t\t\t+ '$'\n\t\t);\n\n\t\tvar supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\t\treturn function parseTrackName( trackName ) {\n\n\t\t\tvar matches = trackRe.exec( trackName );\n\n\t\t\tif ( ! matches ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\tvar results = {\n\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t};\n\n\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\tvar objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t// Object names must be checked against a whitelist. Otherwise, there\n\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t// include '.' characters).\n\t\t\t\tif ( supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\treturn results;\n\n\t\t};\n\n\t}(),\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tvar bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tvar searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tvar childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tvar subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tvar source = this.resolvedProperty;\n\n\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tvar targetObject = this.node,\n\t\t\tparsedPath = this.parsedPath,\n\n\t\t\tobjectName = parsedPath.objectName,\n\t\t\tpropertyName = parsedPath.propertyName,\n\t\t\tpropertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tvar objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tvar nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tvar nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tvar versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tvar bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * \t-\tAdd objects you would otherwise pass as 'root' to the\n * \t\tconstructor or the .clipAction method of AnimationMixer.\n *\n * \t-\tInstead pass this object as 'root'.\n *\n * \t-\tYou can also add and remove objects later when the mixer\n * \t\tis running.\n *\n * Note:\n *\n * \tObjects of this class appear as one object to the mixer,\n * \tso cache control of the individual objects must be done\n * \ton the group.\n *\n * Limitation:\n *\n * \t- \tThe animated properties must be compatible among the\n * \t\tall objects in the group.\n *\n * -\tA single property can either be controlled through a\n * \ttarget group or directly, but not both.\n *\n * @author tschw\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0;\t\t\t// threshold\n\t// note: read by PropertyBinding.Composite\n\n\tvar indices = {};\n\tthis._indicesByUUID = indices;\t\t// for bookkeeping\n\n\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = [];\t\t\t\t\t// inside: string\n\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\n\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\n\n\tvar scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length,\n\t\t\tknownObject = undefined;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tvar lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ],\n\t\t\tbindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tvar paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tvar object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * Action provided by AnimationMixer for scheduling clip playback on specific\n * objects.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n *\n */\n\nfunction AnimationAction( mixer, clip, localRoot ) {\n\n\tthis._mixer = mixer;\n\tthis._clip = clip;\n\tthis._localRoot = localRoot || null;\n\n\tvar tracks = clip.tracks,\n\t\tnTracks = tracks.length,\n\t\tinterpolants = new Array( nTracks );\n\n\tvar interpolantSettings = {\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\t};\n\n\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\tvar interpolant = tracks[ i ].createInterpolant( null );\n\t\tinterpolants[ i ] = interpolant;\n\t\tinterpolant.settings = interpolantSettings;\n\n\t}\n\n\tthis._interpolantSettings = interpolantSettings;\n\n\tthis._interpolants = interpolants;\t// bound by the mixer\n\n\t// inside: PropertyMixer (managed by the mixer)\n\tthis._propertyBindings = new Array( nTracks );\n\n\tthis._cacheIndex = null;\t\t\t// for the memory manager\n\tthis._byClipCacheIndex = null;\t\t// for the memory manager\n\n\tthis._timeScaleInterpolant = null;\n\tthis._weightInterpolant = null;\n\n\tthis.loop = LoopRepeat;\n\tthis._loopCount = - 1;\n\n\t// global mixer time when the action is to be started\n\t// it's set back to 'null' upon start of the action\n\tthis._startTime = null;\n\n\t// scaled local time of the action\n\t// gets clamped or wrapped to 0..clip.duration according to loop\n\tthis.time = 0;\n\n\tthis.timeScale = 1;\n\tthis._effectiveTimeScale = 1;\n\n\tthis.weight = 1;\n\tthis._effectiveWeight = 1;\n\n\tthis.repetitions = Infinity; \t\t// no. of repetitions when looping\n\n\tthis.paused = false;\t\t\t\t// true -> zero effective time scale\n\tthis.enabled = true;\t\t\t\t// false -> zero effective weight\n\n\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\n\n\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\n\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\n\n}\n\nObject.assign( AnimationAction.prototype, {\n\n\t// State & Scheduling\n\n\tplay: function () {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t},\n\n\treset: function () {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0;\t\t\t// restart clip\n\t\tthis._loopCount = - 1;\t// forget previous loops\n\t\tthis._startTime = null;\t// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t},\n\n\tisRunning: function () {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t},\n\n\t// return true when play has been called\n\tisScheduled: function () {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t},\n\n\tstartAt: function ( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t},\n\n\tsetLoop: function ( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t},\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight: function ( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t},\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight: function () {\n\n\t\treturn this._effectiveWeight;\n\n\t},\n\n\tfadeIn: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t},\n\n\tfadeOut: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t},\n\n\tcrossFadeFrom: function ( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcrossFadeTo: function ( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t},\n\n\tstopFading: function () {\n\n\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale: function ( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale: function () {\n\n\t\treturn this._effectiveTimeScale;\n\n\t},\n\n\tsetDuration: function ( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\tsyncWith: function ( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\thalt: function ( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t},\n\n\twarp: function ( startTimeScale, endTimeScale, duration ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._timeScaleInterpolant,\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t},\n\n\tstopWarping: function () {\n\n\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Object Accessors\n\n\tgetMixer: function () {\n\n\t\treturn this._mixer;\n\n\t},\n\n\tgetClip: function () {\n\n\t\treturn this._clip;\n\n\t},\n\n\tgetRoot: function () {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t},\n\n\t// Interna\n\n\t_update: function ( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tvar clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tvar weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tvar interpolants = this._interpolants;\n\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_updateWeight: function ( time ) {\n\n\t\tvar weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t},\n\n\t_updateTimeScale: function ( time ) {\n\n\t\tvar timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t},\n\n\t_updateTime: function ( deltaTime ) {\n\n\t\tvar time = this.time + deltaTime;\n\t\tvar duration = this._clip.duration;\n\t\tvar loop = this.loop;\n\t\tvar loopCount = this._loopCount;\n\n\t\tvar pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else break handle_stop;\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\tthis.time = time;\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.time = time;\n\t\treturn time;\n\n\t},\n\n\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\tvar settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart \t= ZeroSlopeEnding;\n\t\t\tsettings.endingEnd\t\t= ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_scheduleFading: function ( duration, weightNow, weightThen ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * Player for AnimationClips.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tvar root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tvar track = tracks[ i ],\n\t\t\t\ttrackName = track.name,\n\t\t\t\tbinding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \t\tknownActions: Array< AnimationAction >\t- used as prototypes\n\t\t// \t\tactionByRoot: AnimationAction\t\t\t- lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tvar scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tvar index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tvar actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tvar knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tvar actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tvar clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tvar bindings = action._propertyBindings;\n\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tvar binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tbindings = this._bindings;\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tremove_empty_map: {\n\n\t\t\tfor ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\n\t\t\tinterpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\tprototypeAction = null;\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tvar existingAction =\n\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tvar newAction = new AnimationAction( this, clipObject, optionalRoot );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tthis._nActiveActions = 0;\n\t\tthis._nActiveBindings = 0;\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tactions[ i ].reset();\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].useCount = 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tvar action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tvar bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tvar actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tvar action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tvar rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( var clipUuid in actionsByClip ) {\n\n\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( var trackName in bindingByName ) {\n\n\t\t\t\tvar binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tvar action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Uniform( value ) {\n\n\tif ( typeof value === 'string' ) {\n\n\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\tvalue = arguments[ 1 ];\n\n\t}\n\n\tthis.value = value;\n\n}\n\nUniform.prototype.clone = function () {\n\n\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n};\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.maxInstancedCount = undefined;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.maxInstancedCount = source.maxInstancedCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) {\n\n\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\tmeshPerAttribute = normalized;\n\n\t\tnormalized = false;\n\n\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t}\n\n\tBufferAttribute.call( this, array, itemSize, normalized );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Clock( autoStart ) {\n\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\tthis.startTime = 0;\n\tthis.oldTime = 0;\n\tthis.elapsedTime = 0;\n\n\tthis.running = false;\n\n}\n\nObject.assign( Clock.prototype, {\n\n\tstart: function () {\n\n\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t},\n\n\tgetElapsedTime: function () {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t},\n\n\tgetDelta: function () {\n\n\t\tvar diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axiz.\n */\n\nfunction Spherical( radius, phi, theta ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\tthis.phi = ( phi !== undefined ) ? phi : 0; // polar angle\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // azimuthal angle\n\n\treturn this;\n\n}\n\nObject.assign( Spherical.prototype, {\n\n\tset: function ( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t},\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe: function () {\n\n\t\tvar EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t},\n\n\tsetFromCartesianCoords: function ( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( _Math.clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n *\n */\n\nfunction Cylindrical( radius, theta, y ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\treturn this;\n\n}\n\nObject.assign( Cylindrical.prototype, {\n\n\tset: function ( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t},\n\n\tsetFromCartesianCoords: function ( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Box2( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n}\n\nObject.assign( Box2.prototype, {\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Line3( start, end ) {\n\n\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n}\n\nObject.assign( Line3.prototype, {\n\n\tset: function ( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t},\n\n\tdelta: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t},\n\n\tdistanceSq: function () {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t},\n\n\tdistance: function () {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tclosestPointToPointParameter: function () {\n\n\t\tvar startP = new Vector3();\n\t\tvar startEnd = new Vector3();\n\n\t\treturn function closestPointToPointParameter( point, clampToLine ) {\n\n\t\t\tstartP.subVectors( point, this.start );\n\t\t\tstartEnd.subVectors( this.end, this.start );\n\n\t\t\tvar startEnd2 = startEnd.dot( startEnd );\n\t\t\tvar startEnd_startP = startEnd.dot( startP );\n\n\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\tif ( clampToLine ) {\n\n\t\t\t\tt = _Math.clamp( t, 0, 1 );\n\n\t\t\t}\n\n\t\t\treturn t;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, clampToLine, target ) {\n\n\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length * 3;\n\n\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\nVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\nVertexNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\tvar idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction SpotLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = [\n\t\t0, 0, 0, \t0, 0, 1,\n\t\t0, 0, 0, \t1, 0, 1,\n\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t0, 0, 0, \t0, 1, 1,\n\t\t0, 0, 0, \t0, - 1, 1\n\t];\n\n\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\tvar p2 = ( j / l ) * Math.PI * 2;\n\n\t\tpositions.push(\n\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t);\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.cone = new LineSegments( geometry, material );\n\tthis.add( this.cone );\n\n\tthis.update();\n\n}\n\nSpotLightHelper.prototype = Object.create( Object3D.prototype );\nSpotLightHelper.prototype.constructor = SpotLightHelper;\n\nSpotLightHelper.prototype.dispose = function () {\n\n\tthis.cone.geometry.dispose();\n\tthis.cone.material.dispose();\n\n};\n\nSpotLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\tvar vector2 = new Vector3();\n\n\treturn function update() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n}();\n\n/**\n * @author Sean Griffin / http://twitter.com/sgrif\n * @author Michael Guerrero / http://realitymeltdown.com\n * @author mrdoob / http://mrdoob.com/\n * @author ikerr / http://verold.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction getBoneList( object ) {\n\n\tvar boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nfunction SkeletonHelper( object ) {\n\n\tvar bones = getBoneList( object );\n\n\tvar geometry = new BufferGeometry();\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar color1 = new Color( 0, 0, 1 );\n\tvar color2 = new Color( 0, 1, 0 );\n\n\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\tvar bone = bones[ i ];\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t}\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.root = object;\n\tthis.bones = bones;\n\n\tthis.matrix = object.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n}\n\nSkeletonHelper.prototype = Object.create( LineSegments.prototype );\nSkeletonHelper.prototype.constructor = SkeletonHelper;\n\nSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\tvar vector = new Vector3();\n\n\tvar boneMatrix = new Matrix4();\n\tvar matrixWorldInv = new Matrix4();\n\n\treturn function updateMatrixWorld( force ) {\n\n\t\tvar bones = this.bones;\n\n\t\tvar geometry = this.geometry;\n\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PointLightHelper( light, sphereSize, color ) {\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.color = color;\n\n\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.matrix = this.light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n\n\t/*\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tvar d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n}\n\nPointLightHelper.prototype = Object.create( Mesh.prototype );\nPointLightHelper.prototype.constructor = PointLightHelper;\n\nPointLightHelper.prototype.dispose = function () {\n\n\tthis.geometry.dispose();\n\tthis.material.dispose();\n\n};\n\nPointLightHelper.prototype.update = function () {\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.material.color.copy( this.light.color );\n\n\t}\n\n\t/*\n\tvar d = this.light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.visible = true;\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\t*/\n\n};\n\n/**\n * @author abelnation / http://github.com/abelnation\n * @author Mugen87 / http://github.com/Mugen87\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction RectAreaLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\tthis.line = new Line( geometry, material );\n\tthis.add( this.line );\n\n\n\tthis.update();\n\n}\n\nRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\nRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\nRectAreaLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nRectAreaLightHelper.prototype.update = function () {\n\n\t// calculate new dimensions of the helper\n\n\tvar hx = this.light.width * 0.5;\n\tvar hy = this.light.height * 0.5;\n\n\tvar position = this.line.geometry.attributes.position;\n\tvar array = position.array;\n\n\t// update vertices\n\n\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\tposition.needsUpdate = true;\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.line.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.line.material.color.copy( this.light.color );\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction HemisphereLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new OctahedronBufferGeometry( size );\n\tgeometry.rotateY( Math.PI * 0.5 );\n\n\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\tvar position = geometry.getAttribute( 'position' );\n\tvar colors = new Float32Array( position.count * 3 );\n\n\tgeometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\tthis.add( new Mesh( geometry, this.material ) );\n\n\tthis.update();\n\n}\n\nHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\nHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\nHemisphereLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nHemisphereLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\n\tvar color1 = new Color();\n\tvar color2 = new Color();\n\n\treturn function update() {\n\n\t\tvar mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\tcolor1.copy( this.light.color );\n\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction GridHelper( size, divisions, color1, color2 ) {\n\n\tsize = size || 10;\n\tdivisions = divisions || 10;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar center = divisions / 2;\n\tvar step = size / divisions;\n\tvar halfSize = size / 2;\n\n\tvar vertices = [], colors = [];\n\n\tfor ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\tvar color = i === center ? color1 : color2;\n\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nGridHelper.prototype = Object.create( LineSegments.prototype );\nGridHelper.prototype.constructor = GridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n * @author Hectate / http://www.github.com/Hectate\n */\n\nfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\tradius = radius || 10;\n\tradials = radials || 16;\n\tcircles = circles || 8;\n\tdivisions = divisions || 64;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar x, z;\n\tvar v, i, j, r, color;\n\n\t// create the radials\n\n\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\tx = Math.sin( v ) * radius;\n\t\tz = Math.cos( v ) * radius;\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tvertices.push( x, 0, z );\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tcolors.push( color.r, color.g, color.b );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t}\n\n\t// create the circles\n\n\tfor ( i = 0; i <= circles; i ++ ) {\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tr = radius - ( radius / circles * i );\n\n\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t// first vertex\n\n\t\t\tv = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t// second vertex\n\n\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nPolarGridHelper.prototype = Object.create( LineSegments.prototype );\nPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t// FaceNormalsHelper only supports THREE.Geometry\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length;\n\n\t} else {\n\n\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\tthis.update();\n\n}\n\nFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\nFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\nFaceNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tvar vertices = objGeometry.vertices;\n\n\t\tvar faces = objGeometry.faces;\n\n\t\tvar idx = 0;\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar normal = face.normal;\n\n\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t.divideScalar( 3 )\n\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction DirectionalLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tif ( size === undefined ) size = 1;\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [\n\t\t- size, size, 0,\n\t\tsize, size, 0,\n\t\tsize, - size, 0,\n\t\t- size, - size, 0,\n\t\t- size, size, 0\n\t], 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.lightPlane = new Line( geometry, material );\n\tthis.add( this.lightPlane );\n\n\tgeometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\tthis.targetLine = new Line( geometry, material );\n\tthis.add( this.targetLine );\n\n\tthis.update();\n\n}\n\nDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\nDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\nDirectionalLightHelper.prototype.dispose = function () {\n\n\tthis.lightPlane.geometry.dispose();\n\tthis.lightPlane.material.dispose();\n\tthis.targetLine.geometry.dispose();\n\tthis.targetLine.material.dispose();\n\n};\n\nDirectionalLightHelper.prototype.update = function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar v3 = new Vector3();\n\n\treturn function update() {\n\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\tv3.subVectors( v2, v1 );\n\n\t\tthis.lightPlane.lookAt( v3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( v3 );\n\t\tthis.targetLine.scale.z = v3.length();\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author Mugen87 / https://github.com/Mugen87\n *\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nfunction CameraHelper( camera ) {\n\n\tvar geometry = new BufferGeometry();\n\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar pointMap = {};\n\n\t// colors\n\n\tvar colorFrustum = new Color( 0xffaa00 );\n\tvar colorCone = new Color( 0xff0000 );\n\tvar colorUp = new Color( 0x00aaff );\n\tvar colorTarget = new Color( 0xffffff );\n\tvar colorCross = new Color( 0x333333 );\n\n\t// near\n\n\taddLine( 'n1', 'n2', colorFrustum );\n\taddLine( 'n2', 'n4', colorFrustum );\n\taddLine( 'n4', 'n3', colorFrustum );\n\taddLine( 'n3', 'n1', colorFrustum );\n\n\t// far\n\n\taddLine( 'f1', 'f2', colorFrustum );\n\taddLine( 'f2', 'f4', colorFrustum );\n\taddLine( 'f4', 'f3', colorFrustum );\n\taddLine( 'f3', 'f1', colorFrustum );\n\n\t// sides\n\n\taddLine( 'n1', 'f1', colorFrustum );\n\taddLine( 'n2', 'f2', colorFrustum );\n\taddLine( 'n3', 'f3', colorFrustum );\n\taddLine( 'n4', 'f4', colorFrustum );\n\n\t// cone\n\n\taddLine( 'p', 'n1', colorCone );\n\taddLine( 'p', 'n2', colorCone );\n\taddLine( 'p', 'n3', colorCone );\n\taddLine( 'p', 'n4', colorCone );\n\n\t// up\n\n\taddLine( 'u1', 'u2', colorUp );\n\taddLine( 'u2', 'u3', colorUp );\n\taddLine( 'u3', 'u1', colorUp );\n\n\t// target\n\n\taddLine( 'c', 't', colorTarget );\n\taddLine( 'p', 'c', colorCross );\n\n\t// cross\n\n\taddLine( 'cn1', 'cn2', colorCross );\n\taddLine( 'cn3', 'cn4', colorCross );\n\n\taddLine( 'cf1', 'cf2', colorCross );\n\taddLine( 'cf3', 'cf4', colorCross );\n\n\tfunction addLine( a, b, color ) {\n\n\t\taddPoint( a, color );\n\t\taddPoint( b, color );\n\n\t}\n\n\tfunction addPoint( id, color ) {\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\tpointMap[ id ] = [];\n\n\t\t}\n\n\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.camera = camera;\n\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\tthis.matrix = camera.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.pointMap = pointMap;\n\n\tthis.update();\n\n}\n\nCameraHelper.prototype = Object.create( LineSegments.prototype );\nCameraHelper.prototype.constructor = CameraHelper;\n\nCameraHelper.prototype.update = function () {\n\n\tvar geometry, pointMap;\n\n\tvar vector = new Vector3();\n\tvar camera = new Camera();\n\n\tfunction setPoint( point, x, y, z ) {\n\n\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\tvar points = pointMap[ point ];\n\n\t\tif ( points !== undefined ) {\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn function update() {\n\n\t\tgeometry = this.geometry;\n\t\tpointMap = this.pointMap;\n\n\t\tvar w = 1, h = 1;\n\n\t\t// we need just camera projection matrix\n\t\t// world matrix must be identity\n\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\tsetPoint( 'f2', w, - h, 1 );\n\t\tsetPoint( 'f3', - w, h, 1 );\n\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n */\n\nfunction BoxHelper( object, color ) {\n\n\tthis.object = object;\n\n\tif ( color === undefined ) color = 0xffff00;\n\n\tvar 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 ] );\n\tvar positions = new Float32Array( 8 * 3 );\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nBoxHelper.prototype = Object.create( LineSegments.prototype );\nBoxHelper.prototype.constructor = BoxHelper;\n\nBoxHelper.prototype.update = ( function () {\n\n\tvar box = new Box3();\n\n\treturn function update( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tbox.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tvar min = box.min;\n\t\tvar max = box.max;\n\n\t\t/*\n\t\t 5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tvar position = this.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t};\n\n} )();\n\nBoxHelper.prototype.setFromObject = function ( object ) {\n\n\tthis.object = object;\n\tthis.update();\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3Helper( box, hex ) {\n\n\tthis.type = 'Box3Helper';\n\n\tthis.box = box;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar 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 ] );\n\n\tvar 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 ];\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.geometry.computeBoundingSphere();\n\n}\n\nBox3Helper.prototype = Object.create( LineSegments.prototype );\nBox3Helper.prototype.constructor = Box3Helper;\n\nBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar box = this.box;\n\n\tif ( box.isEmpty() ) return;\n\n\tbox.getCenter( this.position );\n\n\tbox.getSize( this.scale );\n\n\tthis.scale.multiplyScalar( 0.5 );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction PlaneHelper( plane, size, hex ) {\n\n\tthis.type = 'PlaneHelper';\n\n\tthis.plane = plane;\n\n\tthis.size = ( size === undefined ) ? 1 : size;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar 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 ];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tgeometry.computeBoundingSphere();\n\n\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t//\n\n\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\tvar geometry2 = new BufferGeometry();\n\tgeometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\tgeometry2.computeBoundingSphere();\n\n\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) );\n\n}\n\nPlaneHelper.prototype = Object.create( Line.prototype );\nPlaneHelper.prototype.constructor = PlaneHelper;\n\nPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar scale = - this.plane.constant;\n\n\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\tthis.lookAt( this.plane.normal );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author zz85 / http://github.com/zz85\n * @author bhouston / http://clara.io\n *\n * Creates an arrow for visualizing directions\n *\n * Parameters:\n * dir - Vector3\n * origin - Vector3\n * length - Number\n * color - color in hex value\n * headLength - Number\n * headWidth - Number\n */\n\nvar lineGeometry, coneGeometry;\n\nfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t// dir is assumed to be normalized\n\n\tObject3D.call( this );\n\n\tif ( color === undefined ) color = 0xffff00;\n\tif ( length === undefined ) length = 1;\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tif ( lineGeometry === undefined ) {\n\n\t\tlineGeometry = new BufferGeometry();\n\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\tconeGeometry.translate( 0, - 0.5, 0 );\n\n\t}\n\n\tthis.position.copy( origin );\n\n\tthis.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) );\n\tthis.line.matrixAutoUpdate = false;\n\tthis.add( this.line );\n\n\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\n\tthis.cone.matrixAutoUpdate = false;\n\tthis.add( this.cone );\n\n\tthis.setDirection( dir );\n\tthis.setLength( length, headLength, headWidth );\n\n}\n\nArrowHelper.prototype = Object.create( Object3D.prototype );\nArrowHelper.prototype.constructor = ArrowHelper;\n\nArrowHelper.prototype.setDirection = ( function () {\n\n\tvar axis = new Vector3();\n\tvar radians;\n\n\treturn function setDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tradians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t}\n\n\t};\n\n}() );\n\nArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\n\tthis.line.updateMatrix();\n\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\tthis.cone.position.y = length;\n\tthis.cone.updateMatrix();\n\n};\n\nArrowHelper.prototype.setColor = function ( color ) {\n\n\tthis.line.material.color.copy( color );\n\tthis.cone.material.color.copy( color );\n\n};\n\n/**\n * @author sroucheray / http://sroucheray.org/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AxesHelper( size ) {\n\n\tsize = size || 1;\n\n\tvar vertices = [\n\t\t0, 0, 0,\tsize, 0, 0,\n\t\t0, 0, 0,\t0, size, 0,\n\t\t0, 0, 0,\t0, 0, size\n\t];\n\n\tvar colors = [\n\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t0, 0, 1,\t0, 0.6, 1\n\t];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nAxesHelper.prototype = Object.create( LineSegments.prototype );\nAxesHelper.prototype.constructor = AxesHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nvar LineStrip = 0;\n\nvar LinePieces = 1;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials ) {\n\n\tif ( materials === undefined ) materials = [];\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tvar pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tvar pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tvar geometry = new Geometry();\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\tthis.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tsetTexturePath: function ( value ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n} );\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( _Math, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn _Math.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tvar v1;\n\n\t\treturn function getPosition() {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t};\n\n\t}(),\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tclearTarget: function ( renderTarget, color, depth, stencil ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t},\n\n\tanimate: function ( callback ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\tthis.setAnimationLoop( callback );\n\n\t},\n\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebVRManager.prototype, {\n\n\tstanding: {\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebVRManager: .standing has been removed.' );\n\n\t\t}\n\t},\n\tuserHeight: {\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebVRManager: .userHeight has been removed.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tvar scope = this;\n\tvar audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\n//\n\nvar GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tvar matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tvar loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tvar loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction Projector() {\n\n\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\tthis.projectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\tvector.project( camera );\n\n\t};\n\n\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\tvector.unproject( camera );\n\n\t};\n\n\tthis.pickingRay = function () {\n\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t};\n\n}\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tthis.clear = function () {};\n\tthis.render = function () {};\n\tthis.setClearColor = function () {};\n\tthis.setSize = function () {};\n\n}\n\n//\n\nvar SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js' );\n\n}\n\nexport { WebGLRenderTargetCube, WebGLRenderTarget, WebGLRenderer, ShaderLib, UniformsLib, UniformsUtils, ShaderChunk, FogExp2, Fog, Scene, Sprite, LOD, SkinnedMesh, Skeleton, Bone, Mesh, LineSegments, LineLoop, Line, Points, Group, VideoTexture, DataTexture, DataTexture3D, CompressedTexture, CubeTexture, CanvasTexture, DepthTexture, Texture, CompressedTextureLoader, DataTextureLoader, CubeTextureLoader, TextureLoader, ObjectLoader, MaterialLoader, BufferGeometryLoader, DefaultLoadingManager, LoadingManager, JSONLoader, ImageLoader, ImageBitmapLoader, FontLoader, FileLoader, Loader, LoaderUtils, Cache, AudioLoader, SpotLightShadow, SpotLight, PointLight, RectAreaLight, HemisphereLight, DirectionalLightShadow, DirectionalLight, AmbientLight, LightShadow, Light, StereoCamera, PerspectiveCamera, OrthographicCamera, CubeCamera, ArrayCamera, Camera, AudioListener, PositionalAudio, AudioContext, AudioAnalyser, Audio, VectorKeyframeTrack, StringKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, ColorKeyframeTrack, BooleanKeyframeTrack, PropertyMixer, PropertyBinding, KeyframeTrack, AnimationUtils, AnimationObjectGroup, AnimationMixer, AnimationClip, Uniform, InstancedBufferGeometry, BufferGeometry, Geometry, InterleavedBufferAttribute, InstancedInterleavedBuffer, InterleavedBuffer, InstancedBufferAttribute, Face3, Object3D, Raycaster, Layers, EventDispatcher, Clock, QuaternionLinearInterpolant, LinearInterpolant, DiscreteInterpolant, CubicInterpolant, Interpolant, Triangle, _Math as Math, Spherical, Cylindrical, Plane, Frustum, Sphere, Ray, Matrix4, Matrix3, Box3, Box2, Line3, Euler, Vector4, Vector3, Vector2, Quaternion, Color, ImmediateRenderObject, VertexNormalsHelper, SpotLightHelper, SkeletonHelper, PointLightHelper, RectAreaLightHelper, HemisphereLightHelper, GridHelper, PolarGridHelper, FaceNormalsHelper, DirectionalLightHelper, CameraHelper, BoxHelper, Box3Helper, PlaneHelper, ArrowHelper, AxesHelper, Shape, Path, ShapePath, Font, CurvePath, Curve, ImageUtils, ShapeUtils, WebGLUtils, WireframeGeometry, ParametricGeometry, ParametricBufferGeometry, TetrahedronGeometry, TetrahedronBufferGeometry, OctahedronGeometry, OctahedronBufferGeometry, IcosahedronGeometry, IcosahedronBufferGeometry, DodecahedronGeometry, DodecahedronBufferGeometry, PolyhedronGeometry, PolyhedronBufferGeometry, TubeGeometry, TubeBufferGeometry, TorusKnotGeometry, TorusKnotBufferGeometry, TorusGeometry, TorusBufferGeometry, TextGeometry, TextBufferGeometry, SphereGeometry, SphereBufferGeometry, RingGeometry, RingBufferGeometry, PlaneGeometry, PlaneBufferGeometry, LatheGeometry, LatheBufferGeometry, ShapeGeometry, ShapeBufferGeometry, ExtrudeGeometry, ExtrudeBufferGeometry, EdgesGeometry, ConeGeometry, ConeBufferGeometry, CylinderGeometry, CylinderBufferGeometry, CircleGeometry, CircleBufferGeometry, BoxGeometry, BoxBufferGeometry, ShadowMaterial, SpriteMaterial, RawShaderMaterial, ShaderMaterial, PointsMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshPhongMaterial, MeshToonMaterial, MeshNormalMaterial, MeshLambertMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshBasicMaterial, MeshMatcapMaterial, LineDashedMaterial, LineBasicMaterial, Material, Float64BufferAttribute, Float32BufferAttribute, Uint32BufferAttribute, Int32BufferAttribute, Uint16BufferAttribute, Int16BufferAttribute, Uint8ClampedBufferAttribute, Uint8BufferAttribute, Int8BufferAttribute, BufferAttribute, ArcCurve, CatmullRomCurve3, CubicBezierCurve, CubicBezierCurve3, EllipseCurve, LineCurve, LineCurve3, QuadraticBezierCurve, QuadraticBezierCurve3, SplineCurve, REVISION, MOUSE, CullFaceNone, CullFaceBack, CullFaceFront, CullFaceFrontBack, FrontFaceDirectionCW, FrontFaceDirectionCCW, BasicShadowMap, PCFShadowMap, PCFSoftShadowMap, FrontSide, BackSide, DoubleSide, FlatShading, SmoothShading, NoColors, FaceColors, VertexColors, NoBlending, NormalBlending, AdditiveBlending, SubtractiveBlending, MultiplyBlending, CustomBlending, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, ZeroFactor, OneFactor, SrcColorFactor, OneMinusSrcColorFactor, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstAlphaFactor, OneMinusDstAlphaFactor, DstColorFactor, OneMinusDstColorFactor, SrcAlphaSaturateFactor, NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth, MultiplyOperation, MixOperation, AddOperation, NoToneMapping, LinearToneMapping, ReinhardToneMapping, Uncharted2ToneMapping, CineonToneMapping, UVMapping, CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping, SphericalReflectionMapping, CubeUVReflectionMapping, CubeUVRefractionMapping, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, NearestFilter, NearestMipMapNearestFilter, NearestMipMapLinearFilter, LinearFilter, LinearMipMapNearestFilter, LinearMipMapLinearFilter, UnsignedByteType, ByteType, ShortType, UnsignedShortType, IntType, UnsignedIntType, FloatType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedInt248Type, AlphaFormat, RGBFormat, RGBAFormat, LuminanceFormat, LuminanceAlphaFormat, RGBEFormat, DepthFormat, DepthStencilFormat, RedFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, LoopOnce, LoopRepeat, LoopPingPong, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, ZeroCurvatureEnding, ZeroSlopeEnding, WrapAroundEnding, TrianglesDrawMode, TriangleStripDrawMode, TriangleFanDrawMode, LinearEncoding, sRGBEncoding, GammaEncoding, RGBEEncoding, LogLuvEncoding, RGBM7Encoding, RGBM16Encoding, RGBDEncoding, BasicDepthPacking, RGBADepthPacking, TangentSpaceNormalMap, ObjectSpaceNormalMap, BoxGeometry as CubeGeometry, Face4, LineStrip, LinePieces, MeshFaceMaterial, MultiMaterial, PointCloud, Particle, ParticleSystem, PointCloudMaterial, ParticleBasicMaterial, ParticleSystemMaterial, Vertex, DynamicBufferAttribute, Int8Attribute, Uint8Attribute, Uint8ClampedAttribute, Int16Attribute, Uint16Attribute, Int32Attribute, Uint32Attribute, Float32Attribute, Float64Attribute, ClosedSplineCurve3, SplineCurve3, Spline, AxisHelper, BoundingBoxHelper, EdgesHelper, WireframeHelper, XHRLoader, BinaryTextureLoader, GeometryUtils, Projector, CanvasRenderer, SceneUtils, LensFlare };\n","module.exports = function( THREE ) {\n\t/**\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t */\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one finger move\n// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n// Pan - right mouse, or arrow keys / touch: three finter swipe\n\n\tfunction OrbitControls( object, domElement ) {\n\n\t\tthis.object = object;\n\n\t\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new THREE.Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.25;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t\t// Set to false to disable use of the keys\n\t\tthis.enableKeys = true;\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\n\t\tthis.getPolarAngle = function () {\n\n\t\t\treturn spherical.phi;\n\n\t\t};\n\n\t\tthis.getAzimuthalAngle = function () {\n\n\t\t\treturn spherical.theta;\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\tscope.update();\n\n\t\t\tstate = STATE.NONE;\n\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function() {\n\n\t\t\tvar offset = new THREE.Vector3();\n\n\t\t\t// so camera.up is the orbit axis\n\t\t\tvar quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\n\t\t\tvar quatInverse = quat.clone().inverse();\n\n\t\t\tvar lastPosition = new THREE.Vector3();\n\t\t\tvar lastQuaternion = new THREE.Quaternion();\n\n\t\t\treturn function update () {\n\n\t\t\t\tvar position = scope.object.position;\n\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3( offset );\n\n\t\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t\t}\n\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t\t// restrict theta to be between desired limits\n\t\t\t\tspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\n\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\t\tspherical.makeSafe();\n\n\n\t\t\t\tspherical.radius *= scale;\n\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t\t// move target to panned location\n\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t\tscale = 1;\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\t\tif ( zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\t\tzoomChanged = false;\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t}();\n\n\t\tthis.dispose = function() {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\t\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n\t\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\twindow.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t\t};\n\n\t\t//\n\t\t// internals\n\t\t//\n\n\t\tvar scope = this;\n\n\t\tvar changeEvent = { type: 'change' };\n\t\tvar startEvent = { type: 'start' };\n\t\tvar endEvent = { type: 'end' };\n\n\t\tvar STATE = { NONE : - 1, ROTATE : 0, DOLLY : 1, PAN : 2, TOUCH_ROTATE : 3, TOUCH_DOLLY : 4, TOUCH_PAN : 5 };\n\n\t\tvar state = STATE.NONE;\n\n\t\tvar EPS = 0.000001;\n\n\t\t// current position in spherical coordinates\n\t\tvar spherical = new THREE.Spherical();\n\t\tvar sphericalDelta = new THREE.Spherical();\n\n\t\tvar scale = 1;\n\t\tvar panOffset = new THREE.Vector3();\n\t\tvar zoomChanged = false;\n\n\t\tvar rotateStart = new THREE.Vector2();\n\t\tvar rotateEnd = new THREE.Vector2();\n\t\tvar rotateDelta = new THREE.Vector2();\n\n\t\tvar panStart = new THREE.Vector2();\n\t\tvar panEnd = new THREE.Vector2();\n\t\tvar panDelta = new THREE.Vector2();\n\n\t\tvar dollyStart = new THREE.Vector2();\n\t\tvar dollyEnd = new THREE.Vector2();\n\t\tvar dollyDelta = new THREE.Vector2();\n\n\t\tfunction getAutoRotationAngle() {\n\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t\t}\n\n\t\tfunction getZoomScale() {\n\n\t\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t\t}\n\n\t\tfunction rotateLeft( angle ) {\n\n\t\t\tsphericalDelta.theta -= angle;\n\n\t\t}\n\n\t\tfunction rotateUp( angle ) {\n\n\t\t\tsphericalDelta.phi -= angle;\n\n\t\t}\n\n\t\tvar panLeft = function() {\n\n\t\t\tvar v = new THREE.Vector3();\n\n\t\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar( - distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\tvar panUp = function() {\n\n\t\t\tvar v = new THREE.Vector3();\n\n\t\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 ); // get Y column of objectMatrix\n\t\t\t\tv.multiplyScalar( distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tvar pan = function() {\n\n\t\t\tvar offset = new THREE.Vector3();\n\n\t\t\treturn function pan ( deltaX, deltaY ) {\n\n\t\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t\t\tif ( scope.object instanceof THREE.PerspectiveCamera ) {\n\n\t\t\t\t\t// perspective\n\t\t\t\t\tvar position = scope.object.position;\n\t\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else if ( scope.object instanceof THREE.OrthographicCamera ) {\n\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\t\tscope.enablePan = false;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}();\n\n\t\tfunction dollyIn( dollyScale ) {\n\n\t\t\tif ( scope.object instanceof THREE.PerspectiveCamera ) {\n\n\t\t\t\tscale /= dollyScale;\n\n\t\t\t} else if ( scope.object instanceof THREE.OrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction dollyOut( dollyScale ) {\n\n\t\t\tif ( scope.object instanceof THREE.PerspectiveCamera ) {\n\n\t\t\t\tscale *= dollyScale;\n\n\t\t\t} else if ( scope.object instanceof THREE.OrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\n\t\tfunction handleMouseDownRotate( event ) {\n\n\t\t\t//console.log( 'handleMouseDownRotate' );\n\n\t\t\trotateStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownDolly( event ) {\n\n\t\t\t//console.log( 'handleMouseDownDolly' );\n\n\t\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownPan( event ) {\n\n\t\t\t//console.log( 'handleMouseDownPan' );\n\n\t\t\tpanStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseMoveRotate( event ) {\n\n\t\t\t//console.log( 'handleMouseMoveRotate' );\n\n\t\t\trotateEnd.set( event.clientX, event.clientY );\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart );\n\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\n\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMoveDolly( event ) {\n\n\t\t\t//console.log( 'handleMouseMoveDolly' );\n\n\t\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale() );\n\n\t\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale() );\n\n\t\t\t}\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMovePan( event ) {\n\n\t\t\t//console.log( 'handleMouseMovePan' );\n\n\t\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseUp( event ) {\n\n\t\t\t//console.log( 'handleMouseUp' );\n\n\t\t}\n\n\t\tfunction handleMouseWheel( event ) {\n\n\t\t\t//console.log( 'handleMouseWheel' );\n\n\t\t\tif ( event.deltaY < 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale() );\n\n\t\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale() );\n\n\t\t\t}\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleKeyDown( event ) {\n\n\t\t\t//console.log( 'handleKeyDown' );\n\n\t\t\tswitch ( event.keyCode ) {\n\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartRotate( event ) {\n\n\t\t\t//console.log( 'handleTouchStartRotate' );\n\n\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t}\n\n\t\tfunction handleTouchStartDolly( event ) {\n\n\t\t\t//console.log( 'handleTouchStartDolly' );\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tfunction handleTouchStartPan( event ) {\n\n\t\t\t//console.log( 'handleTouchStartPan' );\n\n\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t}\n\n\t\tfunction handleTouchMoveRotate( event ) {\n\n\t\t\t//console.log( 'handleTouchMoveRotate' );\n\n\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart );\n\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\n\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleTouchMoveDolly( event ) {\n\n\t\t\t//console.log( 'handleTouchMoveDolly' );\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale() );\n\n\t\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale() );\n\n\t\t\t}\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleTouchMovePan( event ) {\n\n\t\t\t//console.log( 'handleTouchMovePan' );\n\n\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleTouchEnd( event ) {\n\n\t\t\t//console.log( 'handleTouchEnd' );\n\n\t\t}\n\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( event.button === scope.mouseButtons.ORBIT ) {\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t} else if ( event.button === scope.mouseButtons.ZOOM ) {\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t} else if ( event.button === scope.mouseButtons.PAN ) {\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\tstate = STATE.PAN;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\n\t\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( state === STATE.ROTATE ) {\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t} else if ( state === STATE.DOLLY ) {\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t} else if ( state === STATE.PAN ) {\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseUp( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\thandleMouseUp( event );\n\n\t\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\tscope.dispatchEvent( endEvent );\n\n\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tfunction onMouseWheel( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\thandleMouseWheel( event );\n\n\t\t\tscope.dispatchEvent( startEvent ); // not sure why these are here...\n\t\t\tscope.dispatchEvent( endEvent );\n\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\t\thandleKeyDown( event );\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tswitch ( event.touches.length ) {\n\n\t\t\t\tcase 1:\t// one-fingered touch: rotate\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\t// two-fingered touch: dolly\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleTouchStartDolly( event );\n\n\t\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3: // three-fingered touch: pan\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\tswitch ( event.touches.length ) {\n\n\t\t\t\tcase 1: // one-fingered touch: rotate\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\t\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?...\n\n\t\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // two-fingered touch: dolly\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\t\t\t\t\tif ( state !== STATE.TOUCH_DOLLY ) return; // is this needed?...\n\n\t\t\t\t\thandleTouchMoveDolly( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3: // three-fingered touch: pan\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\t\t\t\t\tif ( state !== STATE.TOUCH_PAN ) return; // is this needed?...\n\n\t\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchEnd( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\thandleTouchEnd( event );\n\n\t\t\tscope.dispatchEvent( endEvent );\n\n\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tfunction onContextMenu( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\t//\n\n\t\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\t\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\n\t\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\t\twindow.addEventListener( 'keydown', onKeyDown, false );\n\n\t\t// force an update at start\n\n\t\tthis.update();\n\n\t};\n\n\tOrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\n\tOrbitControls.prototype.constructor = OrbitControls;\n\n\tObject.defineProperties( OrbitControls.prototype, {\n\n\t\tcenter: {\n\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\n\t\t\t\treturn this.target;\n\n\t\t\t}\n\n\t\t},\n\n\t\t// backward compatibility\n\n\t\tnoZoom: {\n\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\t\treturn ! this.enableZoom;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\t\tthis.enableZoom = ! value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tnoRotate: {\n\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\t\treturn ! this.enableRotate;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\t\tthis.enableRotate = ! value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tnoPan: {\n\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\t\treturn ! this.enablePan;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\t\tthis.enablePan = ! value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tnoKeys: {\n\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\t\treturn ! this.enableKeys;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\t\tthis.enableKeys = ! value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tstaticMoving : {\n\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\t\treturn ! this.enableDamping;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\t\tthis.enableDamping = ! value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tdynamicDampingFactor : {\n\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\t\treturn this.dampingFactor;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\t\tthis.dampingFactor = value;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\treturn OrbitControls;\n};\n","/*\n * A fast javascript implementation of simplex noise by Jonas Wagner\n\nBased on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java.\nWhich is based on example code by Stefan Gustavson (stegu@itn.liu.se).\nWith Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).\nBetter rank ordering method by Stefan Gustavson in 2012.\n\n\n Copyright (c) 2018 Jonas Wagner\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n(function() {\n 'use strict';\n\n var F2 = 0.5 * (Math.sqrt(3.0) - 1.0);\n var G2 = (3.0 - Math.sqrt(3.0)) / 6.0;\n var F3 = 1.0 / 3.0;\n var G3 = 1.0 / 6.0;\n var F4 = (Math.sqrt(5.0) - 1.0) / 4.0;\n var G4 = (5.0 - Math.sqrt(5.0)) / 20.0;\n\n function SimplexNoise(randomOrSeed) {\n var random;\n if (typeof randomOrSeed == 'function') {\n random = randomOrSeed;\n }\n else if (randomOrSeed) {\n random = alea(randomOrSeed);\n } else {\n random = Math.random;\n }\n this.p = buildPermutationTable(random);\n this.perm = new Uint8Array(512);\n this.permMod12 = new Uint8Array(512);\n for (var i = 0; i < 512; i++) {\n this.perm[i] = this.p[i & 255];\n this.permMod12[i] = this.perm[i] % 12;\n }\n\n }\n SimplexNoise.prototype = {\n grad3: new Float32Array([1, 1, 0,\n -1, 1, 0,\n 1, -1, 0,\n\n -1, -1, 0,\n 1, 0, 1,\n -1, 0, 1,\n\n 1, 0, -1,\n -1, 0, -1,\n 0, 1, 1,\n\n 0, -1, 1,\n 0, 1, -1,\n 0, -1, -1]),\n grad4: new Float32Array([0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1,\n 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1,\n 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1,\n -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1,\n 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1,\n -1, 1, 0, 1, -1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, -1,\n 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0,\n -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0]),\n noise2D: function(xin, yin) {\n var permMod12 = this.permMod12;\n var perm = this.perm;\n var grad3 = this.grad3;\n var n0 = 0; // Noise contributions from the three corners\n var n1 = 0;\n var n2 = 0;\n // Skew the input space to determine which simplex cell we're in\n var s = (xin + yin) * F2; // Hairy factor for 2D\n var i = Math.floor(xin + s);\n var j = Math.floor(yin + s);\n var t = (i + j) * G2;\n var X0 = i - t; // Unskew the cell origin back to (x,y) space\n var Y0 = j - t;\n var x0 = xin - X0; // The x,y distances from the cell origin\n var y0 = yin - Y0;\n // For the 2D case, the simplex shape is an equilateral triangle.\n // Determine which simplex we are in.\n var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords\n if (x0 > y0) {\n i1 = 1;\n j1 = 0;\n } // lower triangle, XY order: (0,0)->(1,0)->(1,1)\n else {\n i1 = 0;\n j1 = 1;\n } // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n // c = (3-sqrt(3))/6\n var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n var y1 = y0 - j1 + G2;\n var x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n var y2 = y0 - 1.0 + 2.0 * G2;\n // Work out the hashed gradient indices of the three simplex corners\n var ii = i & 255;\n var jj = j & 255;\n // Calculate the contribution from the three corners\n var t0 = 0.5 - x0 * x0 - y0 * y0;\n if (t0 >= 0) {\n var gi0 = permMod12[ii + perm[jj]] * 3;\n t0 *= t0;\n n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient\n }\n var t1 = 0.5 - x1 * x1 - y1 * y1;\n if (t1 >= 0) {\n var gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3;\n t1 *= t1;\n n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1);\n }\n var t2 = 0.5 - x2 * x2 - y2 * y2;\n if (t2 >= 0) {\n var gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3;\n t2 *= t2;\n n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2);\n }\n // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n return 70.0 * (n0 + n1 + n2);\n },\n // 3D simplex noise\n noise3D: function(xin, yin, zin) {\n var permMod12 = this.permMod12;\n var perm = this.perm;\n var grad3 = this.grad3;\n var n0, n1, n2, n3; // Noise contributions from the four corners\n // Skew the input space to determine which simplex cell we're in\n var s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D\n var i = Math.floor(xin + s);\n var j = Math.floor(yin + s);\n var k = Math.floor(zin + s);\n var t = (i + j + k) * G3;\n var X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n var Y0 = j - t;\n var Z0 = k - t;\n var x0 = xin - X0; // The x,y,z distances from the cell origin\n var y0 = yin - Y0;\n var z0 = zin - Z0;\n // For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n // Determine which simplex we are in.\n var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords\n var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } // X Y Z order\n else if (x0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } // X Z Y order\n else {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } // Z X Y order\n }\n else { // x0 y0) rankx++;\n else ranky++;\n if (x0 > z0) rankx++;\n else rankz++;\n if (x0 > w0) rankx++;\n else rankw++;\n if (y0 > z0) ranky++;\n else rankz++;\n if (y0 > w0) ranky++;\n else rankw++;\n if (z0 > w0) rankz++;\n else rankw++;\n var i1, j1, k1, l1; // The integer offsets for the second simplex corner\n var i2, j2, k2, l2; // The integer offsets for the third simplex corner\n var i3, j3, k3, l3; // The integer offsets for the fourth simplex corner\n // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0;\n j1 = ranky >= 3 ? 1 : 0;\n k1 = rankz >= 3 ? 1 : 0;\n l1 = rankw >= 3 ? 1 : 0;\n // Rank 2 denotes the second largest coordinate.\n i2 = rankx >= 2 ? 1 : 0;\n j2 = ranky >= 2 ? 1 : 0;\n k2 = rankz >= 2 ? 1 : 0;\n l2 = rankw >= 2 ? 1 : 0;\n // Rank 1 denotes the second smallest coordinate.\n i3 = rankx >= 1 ? 1 : 0;\n j3 = ranky >= 1 ? 1 : 0;\n k3 = rankz >= 1 ? 1 : 0;\n l3 = rankw >= 1 ? 1 : 0;\n // The fifth corner has all coordinate offsets = 1, so no need to compute that.\n var x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n var y1 = y0 - j1 + G4;\n var z1 = z0 - k1 + G4;\n var w1 = w0 - l1 + G4;\n var x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n var y2 = y0 - j2 + 2.0 * G4;\n var z2 = z0 - k2 + 2.0 * G4;\n var w2 = w0 - l2 + 2.0 * G4;\n var x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n var y3 = y0 - j3 + 3.0 * G4;\n var z3 = z0 - k3 + 3.0 * G4;\n var w3 = w0 - l3 + 3.0 * G4;\n var x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n var y4 = y0 - 1.0 + 4.0 * G4;\n var z4 = z0 - 1.0 + 4.0 * G4;\n var w4 = w0 - 1.0 + 4.0 * G4;\n // Work out the hashed gradient indices of the five simplex corners\n var ii = i & 255;\n var jj = j & 255;\n var kk = k & 255;\n var ll = l & 255;\n // Calculate the contribution from the five corners\n var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n if (t0 < 0) n0 = 0.0;\n else {\n var gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4;\n t0 *= t0;\n n0 = t0 * t0 * (grad4[gi0] * x0 + grad4[gi0 + 1] * y0 + grad4[gi0 + 2] * z0 + grad4[gi0 + 3] * w0);\n }\n var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n if (t1 < 0) n1 = 0.0;\n else {\n var gi1 = (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * 4;\n t1 *= t1;\n n1 = t1 * t1 * (grad4[gi1] * x1 + grad4[gi1 + 1] * y1 + grad4[gi1 + 2] * z1 + grad4[gi1 + 3] * w1);\n }\n var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n if (t2 < 0) n2 = 0.0;\n else {\n var gi2 = (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * 4;\n t2 *= t2;\n n2 = t2 * t2 * (grad4[gi2] * x2 + grad4[gi2 + 1] * y2 + grad4[gi2 + 2] * z2 + grad4[gi2 + 3] * w2);\n }\n var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n if (t3 < 0) n3 = 0.0;\n else {\n var gi3 = (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * 4;\n t3 *= t3;\n n3 = t3 * t3 * (grad4[gi3] * x3 + grad4[gi3 + 1] * y3 + grad4[gi3 + 2] * z3 + grad4[gi3 + 3] * w3);\n }\n var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n if (t4 < 0) n4 = 0.0;\n else {\n var gi4 = (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4;\n t4 *= t4;\n n4 = t4 * t4 * (grad4[gi4] * x4 + grad4[gi4 + 1] * y4 + grad4[gi4 + 2] * z4 + grad4[gi4 + 3] * w4);\n }\n // Sum up and scale the result to cover the range [-1,1]\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n }\n };\n\n function buildPermutationTable(random) {\n var i;\n var p = new Uint8Array(256);\n for (i = 0; i < 256; i++) {\n p[i] = i;\n }\n for (i = 0; i < 255; i++) {\n var r = i + ~~(random() * (256 - i));\n var aux = p[i];\n p[i] = p[r];\n p[r] = aux;\n }\n return p;\n }\n SimplexNoise._buildPermutationTable = buildPermutationTable;\n\n function alea() {\n // Johannes Baagøe , 2010\n var s0 = 0;\n var s1 = 0;\n var s2 = 0;\n var c = 1;\n\n var mash = masher();\n s0 = mash(' ');\n s1 = mash(' ');\n s2 = mash(' ');\n\n for (var i = 0; i < arguments.length; i++) {\n s0 -= mash(arguments[i]);\n if (s0 < 0) {\n s0 += 1;\n }\n s1 -= mash(arguments[i]);\n if (s1 < 0) {\n s1 += 1;\n }\n s2 -= mash(arguments[i]);\n if (s2 < 0) {\n s2 += 1;\n }\n }\n mash = null;\n return function() {\n var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\n s0 = s1;\n s1 = s2;\n return s2 = t - (c = t | 0);\n };\n }\n function masher() {\n var n = 0xefc8249d;\n return function(data) {\n data = data.toString();\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n }\n\n // amd\n if (typeof define !== 'undefined' && define.amd) define(function() {return SimplexNoise;});\n // common js\n if (typeof exports !== 'undefined') exports.SimplexNoise = SimplexNoise;\n // browser\n else if (typeof window !== 'undefined') window.SimplexNoise = SimplexNoise;\n // nodejs\n if (typeof module !== 'undefined') {\n module.exports = SimplexNoise;\n }\n\n})();\n","/**\n * Exopse `remap`\n */\n\nmodule.exports = remap;\n\n/**\n* Re-maps a number from one range to another. In the example above, the number '25' is converted from\n* a value in the range 0..100 into a value that ranges from the left edge (0) to the right edge (width) of the screen.\n* Numbers outside the range are not clamped to 0 and 1, because out-of-range values are often intentional and useful.\n*\n* @param {float} value The incoming value to be converted\n* @param {float} istart Lower bound of the value's current range\n* @param {float} istop Upper bound of the value's current range\n* @param {float} ostart Lower bound of the value's target range\n* @param {float} ostop Upper bound of the value's target range\n*\n* @returns {float}\n*/\n\nfunction remap(value, istart, istop, ostart, ostop) {\n return ostart + (ostop - ostart) * ((value - istart) / (istop - istart));\n};\n","/*!\n * VERSION: 2.0.2\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2018, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n\n/* ES6 changes:\n\t- declare and export _gsScope at top.\n\t- set var TweenLite = the result of the main function\n\t- export default TweenLite at the bottom\n\t- return TweenLite at the bottom of the main function\n\t- pass in _gsScope as the first parameter of the main function (which is actually at the bottom)\n\t- remove the \"export to multiple environments\" in Definition().\n */\nexport var _gsScope = (typeof(window) !== \"undefined\") ? window : (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || {};\n\nexport var TweenLite = (function(window, moduleName) {\n\n\t\t\"use strict\";\n\t\tvar _exports = {},\n\t\t\t_doc = window.document,\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn _globals.TweenLite; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * \n\t\t\t * \n\t\t\t * \n\t\t\t * \n\t\t\t * \n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t * @param {!Array.} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tif (typeof(module) !== \"undefined\" && module.exports) { //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof(define) === \"function\" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \"/\" : \"\") + ns.split(\".\").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t}\n\n\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\tif (!arguments.length) { //if lagSmoothing() is called with no arguments, treat it like a getter that returns a boolean indicating if it's enabled or not. This is purposely undocumented and is for internal use.\n\t\t\t\t\treturn (_lagThreshold < 1 / _tinyNum);\n\t\t\t\t}\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && (_doc || {}).visibilityState !== \"hidden\") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = (vars.immediateRender === true);\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = (vars.reversed === true);\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000 && ((_doc || {}).visibilityState !== \"hidden\" || !_ticker.lagSmoothing())) { //note: if the tab is hidden, we should still wake if lagSmoothing has been disabled.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tvar t = setTimeout(_checkTimeout, 2000);\n\t\t\t\tif (t.unref) {\n\t\t\t\t\t// allows a node process to exit even if the timeout’s callback hasn't been invoked. Without it, the node process could hang as this function is called every two seconds.\n\t\t\t\t\tt.unref();\n\t\t\t\t}\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime(true)) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale - 0.0000001));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvar pauseTime, t;\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tpauseTime = this._pauseTime;\n\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\tt = this.timeline;\n\t\t\twhile (t && t.timeline) { //must update the duration/totalDuration of all ancestor timelines immediately in case in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n\t\t\t\tt._dirty = true;\n\t\t\t\tt.totalDuration();\n\t\t\t\tt = t.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = this.rawTime() - (child._timeline.rawTime() - child._pauseTime);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\tthis._targets = targets = _slice(target); //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n \\n
\\n \\n
\\n\\n\",\n\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\",\ndat.controllers.factory = (function (OptionController, NumberControllerBox, NumberControllerSlider, StringController, FunctionController, BooleanController, common) {\n\n return function(object, property) {\n\n var initialValue = object[property];\n\n // Providing options?\n if (common.isArray(arguments[2]) || common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n\n // Providing a map?\n\n if (common.isNumber(initialValue)) {\n\n if (common.isNumber(arguments[2]) && common.isNumber(arguments[3])) {\n\n // Has min and max.\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n\n } else {\n\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n\n }\n\n }\n\n if (common.isString(initialValue)) {\n return new StringController(object, property);\n }\n\n if (common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n\n if (common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n\n }\n\n })(dat.controllers.OptionController,\ndat.controllers.NumberControllerBox,\ndat.controllers.NumberControllerSlider,\ndat.controllers.StringController = (function (Controller, dom, common) {\n\n /**\n * @class Provides a text input to alter the string property of an object.\n *\n * @extends dat.controllers.Controller\n *\n * @param {Object} object The object to be manipulated\n * @param {string} property The name of the property to be manipulated\n *\n * @member dat.controllers\n */\n var StringController = function(object, property) {\n\n StringController.superclass.call(this, object, property);\n\n var _this = this;\n\n this.__input = document.createElement('input');\n this.__input.setAttribute('type', 'text');\n\n dom.bind(this.__input, 'keyup', onChange);\n dom.bind(this.__input, 'change', onChange);\n dom.bind(this.__input, 'blur', onBlur);\n dom.bind(this.__input, 'keydown', function(e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n \n\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n\n this.updateDisplay();\n\n this.domElement.appendChild(this.__input);\n\n };\n\n StringController.superclass = Controller;\n\n common.extend(\n\n StringController.prototype,\n Controller.prototype,\n\n {\n\n updateDisplay: function() {\n // Stops the caret from moving on account of:\n // keyup -> setValue -> updateDisplay\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return StringController.superclass.prototype.updateDisplay.call(this);\n }\n\n }\n\n );\n\n return StringController;\n\n})(dat.controllers.Controller,\ndat.dom.dom,\ndat.utils.common),\ndat.controllers.FunctionController,\ndat.controllers.BooleanController,\ndat.utils.common),\ndat.controllers.Controller,\ndat.controllers.BooleanController,\ndat.controllers.FunctionController,\ndat.controllers.NumberControllerBox,\ndat.controllers.NumberControllerSlider,\ndat.controllers.OptionController,\ndat.controllers.ColorController = (function (Controller, dom, Color, interpret, common) {\n\n var ColorController = function(object, property) {\n\n ColorController.superclass.call(this, object, property);\n\n this.__color = new Color(this.getValue());\n this.__temp = new Color(0);\n\n var _this = this;\n\n this.domElement = document.createElement('div');\n\n dom.makeSelectable(this.domElement, false);\n\n this.__selector = document.createElement('div');\n this.__selector.className = 'selector';\n\n this.__saturation_field = document.createElement('div');\n this.__saturation_field.className = 'saturation-field';\n\n this.__field_knob = document.createElement('div');\n this.__field_knob.className = 'field-knob';\n this.__field_knob_border = '2px solid ';\n\n this.__hue_knob = document.createElement('div');\n this.__hue_knob.className = 'hue-knob';\n\n this.__hue_field = document.createElement('div');\n this.__hue_field.className = 'hue-field';\n\n this.__input = document.createElement('input');\n this.__input.type = 'text';\n this.__input_textShadow = '0 1px 1px ';\n\n dom.bind(this.__input, 'keydown', function(e) {\n if (e.keyCode === 13) { // on enter\n onBlur.call(this);\n }\n });\n\n dom.bind(this.__input, 'blur', onBlur);\n\n dom.bind(this.__selector, 'mousedown', function(e) {\n\n dom\n .addClass(this, 'drag')\n .bind(window, 'mouseup', function(e) {\n dom.removeClass(_this.__selector, 'drag');\n });\n\n });\n\n var value_field = document.createElement('div');\n\n common.extend(this.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n\n common.extend(this.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: this.__field_knob_border + (this.__color.v < .5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n \n common.extend(this.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n\n common.extend(this.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n\n common.extend(value_field.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n \n linearGradient(value_field, 'top', 'rgba(0,0,0,0)', '#000');\n\n common.extend(this.__hue_field.style, {\n width: '15px',\n height: '100px',\n display: 'inline-block',\n border: '1px solid #555',\n cursor: 'ns-resize'\n });\n\n hueGradient(this.__hue_field);\n\n common.extend(this.__input.style, {\n outline: 'none',\n// width: '120px',\n textAlign: 'center',\n// padding: '4px',\n// marginBottom: '6px',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: this.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n\n dom.bind(this.__saturation_field, 'mousedown', fieldDown);\n dom.bind(this.__field_knob, 'mousedown', fieldDown);\n\n dom.bind(this.__hue_field, 'mousedown', function(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'mouseup', unbindH);\n });\n\n function fieldDown(e) {\n setSV(e);\n // document.body.style.cursor = 'none';\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'mouseup', unbindSV);\n }\n\n function unbindSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'mouseup', unbindSV);\n // document.body.style.cursor = 'default';\n }\n\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n\n function unbindH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'mouseup', unbindH);\n }\n\n this.__saturation_field.appendChild(value_field);\n this.__selector.appendChild(this.__field_knob);\n this.__selector.appendChild(this.__saturation_field);\n this.__selector.appendChild(this.__hue_field);\n this.__hue_field.appendChild(this.__hue_knob);\n\n this.domElement.appendChild(this.__input);\n this.domElement.appendChild(this.__selector);\n\n this.updateDisplay();\n\n function setSV(e) {\n\n e.preventDefault();\n\n var w = dom.getWidth(_this.__saturation_field);\n var o = dom.getOffset(_this.__saturation_field);\n var s = (e.clientX - o.left + document.body.scrollLeft) / w;\n var v = 1 - (e.clientY - o.top + document.body.scrollTop) / w;\n\n if (v > 1) v = 1;\n else if (v < 0) v = 0;\n\n if (s > 1) s = 1;\n else if (s < 0) s = 0;\n\n _this.__color.v = v;\n _this.__color.s = s;\n\n _this.setValue(_this.__color.toOriginal());\n\n\n return false;\n\n }\n\n function setH(e) {\n\n e.preventDefault();\n\n var s = dom.getHeight(_this.__hue_field);\n var o = dom.getOffset(_this.__hue_field);\n var h = 1 - (e.clientY - o.top + document.body.scrollTop) / s;\n\n if (h > 1) h = 1;\n else if (h < 0) h = 0;\n\n _this.__color.h = h * 360;\n\n _this.setValue(_this.__color.toOriginal());\n\n return false;\n\n }\n\n };\n\n ColorController.superclass = Controller;\n\n common.extend(\n\n ColorController.prototype,\n Controller.prototype,\n\n {\n\n updateDisplay: function() {\n\n var i = interpret(this.getValue());\n\n if (i !== false) {\n\n var mismatch = false;\n\n // Check for mismatch on the interpreted value.\n\n common.each(Color.COMPONENTS, function(component) {\n if (!common.isUndefined(i[component]) &&\n !common.isUndefined(this.__color.__state[component]) &&\n i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {}; // break\n }\n }, this);\n\n // If nothing diverges, we keep our previous values\n // for statefulness, otherwise we recalculate fresh\n if (mismatch) {\n common.extend(this.__color.__state, i);\n }\n\n }\n\n common.extend(this.__temp.__state, this.__color.__state);\n\n this.__temp.a = 1;\n\n var flip = (this.__color.v < .5 || this.__color.s > .5) ? 255 : 0;\n var _flip = 255 - flip;\n\n common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip +')'\n });\n\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px'\n\n this.__temp.s = 1;\n this.__temp.v = 1;\n\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toString());\n\n common.extend(this.__input.style, {\n backgroundColor: this.__input.value = this.__color.toString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip +')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip +',.7)'\n });\n\n }\n\n }\n\n );\n \n var vendors = ['-moz-','-o-','-webkit-','-ms-',''];\n \n function linearGradient(elem, x, a, b) {\n elem.style.background = '';\n common.each(vendors, function(vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient('+x+', '+a+' 0%, ' + b + ' 100%); ';\n });\n }\n \n function hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);'\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'\n }\n\n\n return ColorController;\n\n})(dat.controllers.Controller,\ndat.dom.dom,\ndat.color.Color = (function (interpret, math, toString, common) {\n\n var Color = function() {\n\n this.__state = interpret.apply(this, arguments);\n\n if (this.__state === false) {\n throw 'Failed to interpret color arguments';\n }\n\n this.__state.a = this.__state.a || 1;\n\n\n };\n\n Color.COMPONENTS = ['r','g','b','h','s','v','hex','a'];\n\n common.extend(Color.prototype, {\n\n toString: function() {\n return toString(this);\n },\n\n toOriginal: function() {\n return this.__state.conversion.write(this);\n }\n\n });\n\n defineRGBComponent(Color.prototype, 'r', 2);\n defineRGBComponent(Color.prototype, 'g', 1);\n defineRGBComponent(Color.prototype, 'b', 0);\n\n defineHSVComponent(Color.prototype, 'h');\n defineHSVComponent(Color.prototype, 's');\n defineHSVComponent(Color.prototype, 'v');\n\n Object.defineProperty(Color.prototype, 'a', {\n\n get: function() {\n return this.__state.a;\n },\n\n set: function(v) {\n this.__state.a = v;\n }\n\n });\n\n Object.defineProperty(Color.prototype, 'hex', {\n\n get: function() {\n\n if (!this.__state.space !== 'HEX') {\n this.__state.hex = math.rgb_to_hex(this.r, this.g, this.b);\n }\n\n return this.__state.hex;\n\n },\n\n set: function(v) {\n\n this.__state.space = 'HEX';\n this.__state.hex = v;\n\n }\n\n });\n\n function defineRGBComponent(target, component, componentHexIndex) {\n\n Object.defineProperty(target, component, {\n\n get: function() {\n\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n\n recalculateRGB(this, component, componentHexIndex);\n\n return this.__state[component];\n\n },\n\n set: function(v) {\n\n if (this.__state.space !== 'RGB') {\n recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n\n this.__state[component] = v;\n\n }\n\n });\n\n }\n\n function defineHSVComponent(target, component) {\n\n Object.defineProperty(target, component, {\n\n get: function() {\n\n if (this.__state.space === 'HSV')\n return this.__state[component];\n\n recalculateHSV(this);\n\n return this.__state[component];\n\n },\n\n set: function(v) {\n\n if (this.__state.space !== 'HSV') {\n recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n\n this.__state[component] = v;\n\n }\n\n });\n\n }\n\n function recalculateRGB(color, component, componentHexIndex) {\n\n if (color.__state.space === 'HEX') {\n\n color.__state[component] = math.component_from_hex(color.__state.hex, componentHexIndex);\n\n } else if (color.__state.space === 'HSV') {\n\n common.extend(color.__state, math.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n\n } else {\n\n throw 'Corrupted color state';\n\n }\n\n }\n\n function recalculateHSV(color) {\n\n var result = math.rgb_to_hsv(color.r, color.g, color.b);\n\n common.extend(color.__state,\n {\n s: result.s,\n v: result.v\n }\n );\n\n if (!common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n\n }\n\n return Color;\n\n})(dat.color.interpret,\ndat.color.math = (function () {\n\n var tmpComponent;\n\n return {\n\n hsv_to_rgb: function(h, s, v) {\n\n var hi = Math.floor(h / 60) % 6;\n\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - (f * s));\n var t = v * (1.0 - ((1.0 - f) * s));\n var c = [\n [v, t, p],\n [q, v, p],\n [p, v, t],\n [p, q, v],\n [t, p, v],\n [v, p, q]\n ][hi];\n\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n\n },\n\n rgb_to_hsv: function(r, g, b) {\n\n var min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h, s;\n\n if (max != 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n\n if (r == max) {\n h = (g - b) / delta;\n } else if (g == max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n\n rgb_to_hex: function(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n\n component_from_hex: function(hex, componentIndex) {\n return (hex >> (componentIndex * 8)) & 0xFF;\n },\n\n hex_with_component: function(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | (hex & ~ (0xFF << tmpComponent));\n }\n\n }\n\n})(),\ndat.color.toString,\ndat.utils.common),\ndat.color.interpret,\ndat.utils.common),\ndat.utils.requestAnimationFrame = (function () {\n\n /**\n * requirejs version of Paul Irish's RequestAnimationFrame\n * http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n */\n\n return window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(callback, element) {\n\n window.setTimeout(callback, 1000 / 60);\n\n };\n})(),\ndat.dom.CenteredDiv = (function (dom, common) {\n\n\n var CenteredDiv = function() {\n\n this.backgroundElement = document.createElement('div');\n common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear'\n });\n\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n\n this.domElement = document.createElement('div');\n common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear'\n });\n\n\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function() {\n _this.hide();\n });\n\n\n };\n\n CenteredDiv.prototype.show = function() {\n\n var _this = this;\n \n\n\n this.backgroundElement.style.display = 'block';\n\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n// this.domElement.style.top = '52%';\n this.domElement.style.webkitTransform = 'scale(1.1)';\n\n this.layout();\n\n common.defer(function() {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n\n };\n\n CenteredDiv.prototype.hide = function() {\n\n var _this = this;\n\n var hide = function() {\n\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n\n };\n\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n\n this.backgroundElement.style.opacity = 0;\n// this.domElement.style.top = '48%';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n\n };\n\n CenteredDiv.prototype.layout = function() {\n this.domElement.style.left = window.innerWidth/2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight/2 - dom.getHeight(this.domElement) / 2 + 'px';\n };\n \n function lockScroll(e) {\n console.log(e);\n }\n\n return CenteredDiv;\n\n})(dat.dom.dom,\ndat.utils.common),\ndat.dom.dom,\ndat.utils.common);","/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\n/** @namespace */\nvar dat = module.exports = dat || {};\n\n/** @namespace */\ndat.color = dat.color || {};\n\n/** @namespace */\ndat.utils = dat.utils || {};\n\ndat.utils.common = (function () {\n \n var ARR_EACH = Array.prototype.forEach;\n var ARR_SLICE = Array.prototype.slice;\n\n /**\n * Band-aid methods for things that should be a lot easier in JavaScript.\n * Implementation and structure inspired by underscore.js\n * http://documentcloud.github.com/underscore/\n */\n\n return { \n \n BREAK: {},\n \n extend: function(target) {\n \n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\n \n for (var key in obj)\n if (!this.isUndefined(obj[key])) \n target[key] = obj[key];\n \n }, this);\n \n return target;\n \n },\n \n defaults: function(target) {\n \n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\n \n for (var key in obj)\n if (this.isUndefined(target[key])) \n target[key] = obj[key];\n \n }, this);\n \n return target;\n \n },\n \n compose: function() {\n var toCall = ARR_SLICE.call(arguments);\n return function() {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length -1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n }\n },\n \n each: function(obj, itr, scope) {\n\n \n if (ARR_EACH && obj.forEach === ARR_EACH) { \n \n obj.forEach(itr, scope);\n \n } else if (obj.length === obj.length + 0) { // Is number but not NaN\n \n for (var key = 0, l = obj.length; key < l; key++)\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) \n return;\n \n } else {\n\n for (var key in obj) \n if (itr.call(scope, obj[key], key) === this.BREAK)\n return;\n \n }\n \n },\n \n defer: function(fnc) {\n setTimeout(fnc, 0);\n },\n \n toArray: function(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n\n isUndefined: function(obj) {\n return obj === undefined;\n },\n \n isNull: function(obj) {\n return obj === null;\n },\n \n isNaN: function(obj) {\n return obj !== obj;\n },\n \n isArray: Array.isArray || function(obj) {\n return obj.constructor === Array;\n },\n \n isObject: function(obj) {\n return obj === Object(obj);\n },\n \n isNumber: function(obj) {\n return obj === obj+0;\n },\n \n isString: function(obj) {\n return obj === obj+'';\n },\n \n isBoolean: function(obj) {\n return obj === false || obj === true;\n },\n \n isFunction: function(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n }\n \n };\n \n})();\n\n\ndat.color.toString = (function (common) {\n\n return function(color) {\n\n if (color.a == 1 || common.isUndefined(color.a)) {\n\n var s = color.hex.toString(16);\n while (s.length < 6) {\n s = '0' + s;\n }\n\n return '#' + s;\n\n } else {\n\n return 'rgba(' + Math.round(color.r) + ',' + Math.round(color.g) + ',' + Math.round(color.b) + ',' + color.a + ')';\n\n }\n\n }\n\n})(dat.utils.common);\n\n\ndat.Color = dat.color.Color = (function (interpret, math, toString, common) {\n\n var Color = function() {\n\n this.__state = interpret.apply(this, arguments);\n\n if (this.__state === false) {\n throw 'Failed to interpret color arguments';\n }\n\n this.__state.a = this.__state.a || 1;\n\n\n };\n\n Color.COMPONENTS = ['r','g','b','h','s','v','hex','a'];\n\n common.extend(Color.prototype, {\n\n toString: function() {\n return toString(this);\n },\n\n toOriginal: function() {\n return this.__state.conversion.write(this);\n }\n\n });\n\n defineRGBComponent(Color.prototype, 'r', 2);\n defineRGBComponent(Color.prototype, 'g', 1);\n defineRGBComponent(Color.prototype, 'b', 0);\n\n defineHSVComponent(Color.prototype, 'h');\n defineHSVComponent(Color.prototype, 's');\n defineHSVComponent(Color.prototype, 'v');\n\n Object.defineProperty(Color.prototype, 'a', {\n\n get: function() {\n return this.__state.a;\n },\n\n set: function(v) {\n this.__state.a = v;\n }\n\n });\n\n Object.defineProperty(Color.prototype, 'hex', {\n\n get: function() {\n\n if (!this.__state.space !== 'HEX') {\n this.__state.hex = math.rgb_to_hex(this.r, this.g, this.b);\n }\n\n return this.__state.hex;\n\n },\n\n set: function(v) {\n\n this.__state.space = 'HEX';\n this.__state.hex = v;\n\n }\n\n });\n\n function defineRGBComponent(target, component, componentHexIndex) {\n\n Object.defineProperty(target, component, {\n\n get: function() {\n\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n\n recalculateRGB(this, component, componentHexIndex);\n\n return this.__state[component];\n\n },\n\n set: function(v) {\n\n if (this.__state.space !== 'RGB') {\n recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n\n this.__state[component] = v;\n\n }\n\n });\n\n }\n\n function defineHSVComponent(target, component) {\n\n Object.defineProperty(target, component, {\n\n get: function() {\n\n if (this.__state.space === 'HSV')\n return this.__state[component];\n\n recalculateHSV(this);\n\n return this.__state[component];\n\n },\n\n set: function(v) {\n\n if (this.__state.space !== 'HSV') {\n recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n\n this.__state[component] = v;\n\n }\n\n });\n\n }\n\n function recalculateRGB(color, component, componentHexIndex) {\n\n if (color.__state.space === 'HEX') {\n\n color.__state[component] = math.component_from_hex(color.__state.hex, componentHexIndex);\n\n } else if (color.__state.space === 'HSV') {\n\n common.extend(color.__state, math.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n\n } else {\n\n throw 'Corrupted color state';\n\n }\n\n }\n\n function recalculateHSV(color) {\n\n var result = math.rgb_to_hsv(color.r, color.g, color.b);\n\n common.extend(color.__state,\n {\n s: result.s,\n v: result.v\n }\n );\n\n if (!common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n\n }\n\n return Color;\n\n})(dat.color.interpret = (function (toString, common) {\n\n var result, toReturn;\n\n var interpret = function() {\n\n toReturn = false;\n\n var original = arguments.length > 1 ? common.toArray(arguments) : arguments[0];\n\n common.each(INTERPRETATIONS, function(family) {\n\n if (family.litmus(original)) {\n\n common.each(family.conversions, function(conversion, conversionName) {\n\n result = conversion.read(original);\n\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return common.BREAK;\n\n }\n\n });\n\n return common.BREAK;\n\n }\n\n });\n\n return toReturn;\n\n };\n\n var INTERPRETATIONS = [\n\n // Strings\n {\n\n litmus: common.isString,\n\n conversions: {\n\n THREE_CHAR_HEX: {\n\n read: function(original) {\n\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) return false;\n\n return {\n space: 'HEX',\n hex: parseInt(\n '0x' +\n test[1].toString() + test[1].toString() +\n test[2].toString() + test[2].toString() +\n test[3].toString() + test[3].toString())\n };\n\n },\n\n write: toString\n\n },\n\n SIX_CHAR_HEX: {\n\n read: function(original) {\n\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) return false;\n\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString())\n };\n\n },\n\n write: toString\n\n },\n\n CSS_RGB: {\n\n read: function(original) {\n\n var test = original.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\n if (test === null) return false;\n\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n\n },\n\n write: toString\n\n },\n\n CSS_RGBA: {\n\n read: function(original) {\n\n var test = original.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\,\\s*(.+)\\s*\\)/);\n if (test === null) return false;\n\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n\n },\n\n write: toString\n\n }\n\n }\n\n },\n\n // Numbers\n {\n\n litmus: common.isNumber,\n\n conversions: {\n\n HEX: {\n read: function(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n }\n },\n\n write: function(color) {\n return color.hex;\n }\n }\n\n }\n\n },\n\n // Arrays\n {\n\n litmus: common.isArray,\n\n conversions: {\n\n RGB_ARRAY: {\n read: function(original) {\n if (original.length != 3) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n\n write: function(color) {\n return [color.r, color.g, color.b];\n }\n\n },\n\n RGBA_ARRAY: {\n read: function(original) {\n if (original.length != 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n\n write: function(color) {\n return [color.r, color.g, color.b, color.a];\n }\n\n }\n\n }\n\n },\n\n // Objects\n {\n\n litmus: common.isObject,\n\n conversions: {\n\n RGBA_OBJ: {\n read: function(original) {\n if (common.isNumber(original.r) &&\n common.isNumber(original.g) &&\n common.isNumber(original.b) &&\n common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n }\n }\n return false;\n },\n\n write: function(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n }\n }\n },\n\n RGB_OBJ: {\n read: function(original) {\n if (common.isNumber(original.r) &&\n common.isNumber(original.g) &&\n common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n }\n }\n return false;\n },\n\n write: function(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n }\n }\n },\n\n HSVA_OBJ: {\n read: function(original) {\n if (common.isNumber(original.h) &&\n common.isNumber(original.s) &&\n common.isNumber(original.v) &&\n common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n }\n }\n return false;\n },\n\n write: function(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n }\n }\n },\n\n HSV_OBJ: {\n read: function(original) {\n if (common.isNumber(original.h) &&\n common.isNumber(original.s) &&\n common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n }\n }\n return false;\n },\n\n write: function(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n }\n }\n\n }\n\n }\n\n }\n\n\n ];\n\n return interpret;\n\n\n})(dat.color.toString,\ndat.utils.common),\ndat.color.math = (function () {\n\n var tmpComponent;\n\n return {\n\n hsv_to_rgb: function(h, s, v) {\n\n var hi = Math.floor(h / 60) % 6;\n\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - (f * s));\n var t = v * (1.0 - ((1.0 - f) * s));\n var c = [\n [v, t, p],\n [q, v, p],\n [p, v, t],\n [p, q, v],\n [t, p, v],\n [v, p, q]\n ][hi];\n\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n\n },\n\n rgb_to_hsv: function(r, g, b) {\n\n var min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h, s;\n\n if (max != 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n\n if (r == max) {\n h = (g - b) / delta;\n } else if (g == max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n\n rgb_to_hex: function(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n\n component_from_hex: function(hex, componentIndex) {\n return (hex >> (componentIndex * 8)) & 0xFF;\n },\n\n hex_with_component: function(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | (hex & ~ (0xFF << tmpComponent));\n }\n\n }\n\n})(),\ndat.color.toString,\ndat.utils.common);","module.exports = require('./vendor/dat.gui')\nmodule.exports.color = require('./vendor/dat.color')","import vec2 from 'gl-vec2'\nimport loop from 'raf-loop'\nimport * as THREE from 'three'\nimport createOrbitControls from 'three-orbit-controls'\nimport SimplexNoise from 'simplex-noise'\nimport remap from 'remap'\nimport { TimelineLite, TweenLite } from 'gsap'\nimport clamp from 'clamp'\nimport setupComputationRenderer from './lib/GPUComputationRenderer'\n\nconst GPGPUComputationRenderer = setupComputationRenderer( THREE )\nconst OrbitControls = createOrbitControls( THREE )\n\nimport pointsFS from './lib/shaders/points.frag'\nimport pointsVS from './lib/shaders/points.vert'\nimport computePosition from './lib/shaders/compute-position.frag'\nimport computeVelocity from './lib/shaders/compute-velocity.frag'\nimport Slider from './lib/slider'\nimport Counter from './lib/Counter'\nimport CTAButton from './lib/CTAButton'\nimport dat from 'dat-gui'\n\nconst gui = new dat.GUI()\ndat.GUI.toggleHide();\n\nlet SIZE = 50\n\nconst userAccount = {\n balance: 100.0\n}\n\nclass App {\n\n constructor( data ) {\n this.mouse = vec2.create()\n this.engine = loop( this.tick.bind( this ) )\n this.elapsed = 0.0\n this.particles = []\n this.materials = {}\n this.simplex = new SimplexNoise()\n this.sphereGroup = new THREE.Group()\n this.sphereRadius = 130\n this.winSize = [ window.innerWidth, window.innerHeight ]\n this.useOrtho = false\n this.rotationSpeed = 0.001\n this.slider = new Slider( document.querySelector( '#slider' ) )\n this.counter = new Counter( document.querySelector( '.booty-amount' ) )\n this._sendAmount = 0.0\n this._pSendAmount = 0.0\n\n this._sendAmountVelocity = 0.0\n this._sendAmountForParticle = 0.0\n this.slider.on( 'change', ( v ) => {\n this.sendAmount = v\n } )\n this.setupScene()\n setTimeout( () => {\n this.sendAmount = 0.0\n }, 100)\n this.resize()\n setTimeout(() => {\n this.resize()\n document.body.classList.add('ready')\n }, 30)\n\n this.birthThreshold = 0.0001\n this.initialPointDensity = 0.05\n window.addEventListener( 'resize', () => {\n setTimeout(() => {\n this.resize()\n }, 100)\n } )\n\n this.setupGUI()\n\n this.cog = document.querySelector( '.cog' )\n this.button = new CTAButton( document.querySelector( '.cta-container .cta' ))\n let defaultDeformAmplitude = this.materials.computationPosition.uniforms.deformAmplitude.value\n this.needsPulse = false\n this.button.on( 'change', ( v ) => {\n if ( v == 1 ) {\n this.cog.classList.add( 'active' )\n this.needsPulse = true\n } else {\n this.cog.classList.remove( 'active' )\n if (v == 2) {\n this.needsPulse = false\n\n let tl = new TimelineLite()\n let newRadius = this.sphereRadius * 0.2\n let originalConfig = {\n curlInfluence: this.materials.computationVelocity.uniforms.curlInfluence.value,\n scale: this.points.scale.x,\n uniformAlpha: this.materials.points.uniforms.uniformAlpha.value,\n rotationSpeed: this.rotationSpeed\n }\n tl.to( this.materials.computationVelocity.uniforms.curlInfluence, 1.0, { value: 1.0, ease: 'Sine.easeIn' },0.0 )\n tl.to( this.points.scale, 2.0, { x: newRadius, y: newRadius, z: newRadius, ease: 'Quint.easeIn' },0.0 )\n tl.to( this.materials.points.uniforms.uniformAlpha, 1.4, { value: 0.0 },0.6 )\n tl.to( this, 1.0, { rotationSpeed: this.rotationSpeed * 10.0, ease: 'Sine.easeOut' },0.6 )\n tl.eventCallback('onComplete', () => {\n let tl = new TimelineLite()\n this.points.scale.set( originalConfig.scale, originalConfig.scale, originalConfig.scale)\n this.rotationSpeed = originalConfig.rotationSpeed\n this.materials.computationVelocity.uniforms.curlInfluence.value = originalConfig.curlInfluence\n tl.to( this.slider, 2.0, { value: 0.0, ease: 'Expo.easeOut' } )\n tl.to( this.materials.points.uniforms.uniformAlpha, 2.0, { value: originalConfig.uniformAlpha })\n tl.to( this.materials.computationPosition.uniforms.deformAmplitude, 1.0, { value: defaultDeformAmplitude, ease: 'Expo.easeOut'}, 0.0)\n })\n }\n }\n } )\n }\n\n setupGUI() {\n\n gui.loadFromHash( this.materials )\n gui.add( this, 'birthThreshold', 0.0, 1.0 )\n gui.add( this, 'rotationSpeed', 0.0001, 0.005 )\n gui.add( this, 'initialPointDensity', 0.05, 0.2 )\n gui.add( this, 'sphereRadius', 80, 200 ).onChange((v) => {\n this.points.scale.set(v, v, v)\n this.resize()\n })\n gui.add( this.controls, 'enabled' )\n let folder = gui.addFolder( 'points' )\n folder.addUniform( this.materials, 'hueOffset', 0, 1 )\n folder.addUniform( this.materials, 'hueRange', 0, 1 )\n folder.addUniform( this.materials, 'hueSaturation', 0, 1 )\n folder.addUniform( this.materials, 'hueBrightness', 0, 1 )\n folder.addUniform( this.materials, 'birthThresholdBand', 0.001, 0.1 )\n folder.addUniform( this.materials, 'pointScale', 0.01, 1000.0 )\n folder.addUniform( this.materials, 'uniformAlpha', 0.00, 0.9999 )\n\n folder = gui.addFolder( 'computationVelocity' )\n folder.addUniform( this.materials, 'curlInfluence', 1.0, 500.0 )\n folder.addUniform( this.materials, 'curlSpeed', 10.0, 10000.0)\n\n folder = gui.addFolder( 'computationPosition' )\n folder.addUniform( this.materials, 'deformAmplitude', 0.0, 0.05 )\n folder.addUniform( this.materials, 'maxSpeed', 0.5, 30.0 )\n\n }\n\n onmousemove( e ) {\n this.mouse[ 0 ] = e.clientX / this.winSize[ 0 ]\n this.mouse[ 1 ] = e.clientX / this.winSize[ 1 ]\n }\n\n setupScene() {\n\n this.scene = new THREE.Scene()\n this.renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } )\n this.renderer.domElement.id = 'main-canvas'\n this.renderer.setPixelRatio( window.devicePixelRatio )\n this.renderer.setSize( this.winSize[ 0 ], this.winSize[ 1 ] )\n this.aspect = this.winSize[ 0 ] / this.winSize[ 1 ]\n\n let geom = new THREE.BufferGeometry()\n let positionArr = new Float32Array( SIZE * SIZE * 4 )\n let uvArr = []\n let puvArr = []\n\n this.fillFibonacciSphere(positionArr, ( k ) => {\n let x = positionArr[ k + 0 ]\n let y = positionArr[ k + 1 ]\n let z = positionArr[ k + 2 ]\n let uvx = 1 - Math.atan2( z, x ) / Math.PI;\n let uvy = 1 - ( y + 1 ) / 2\n uvArr.push( uvx, uvy )\n })\n\n let bufferAttrs = new THREE.BufferAttribute( positionArr, 4 )\n geom.addAttribute( 'position', bufferAttrs )\n geom.addAttribute( 'uv', new THREE.BufferAttribute( new Float32Array( uvArr ), 2 ) )\n\n let mat = new THREE.ShaderMaterial( {\n fragmentShader: pointsFS,\n vertexShader: pointsVS,\n uniforms: {\n resolution: { value: new THREE.Vector2( this.winSize[0], this.winSize[1] ) },\n texturePosition: null,\n textureVelocity: null,\n hueRange: { value: 0.11028775177315127 },\n hueOffset: { value: 0.8381869134759496 },\n hueSaturation: { value: 0.7168703865254833 },\n hueBrightness: { value: 0.17646040283704204 },\n birthThreshold: { value: 0.0 },\n birthThresholdBand: { value: 0.01 },\n sendAmountDelta: {value: 0.0},\n pointScale: { value: 50 },\n intro: { value: 0.0 },\n uniformAlpha: {value: 1.0}\n },\n depthWrite: false,\n blending: THREE.AdditiveBlending\n })\n this.materials.points = mat\n let points = new THREE.Points( geom, mat )\n\n this.points = points\n this.points.position.x = 250.0\n \n this.circle = new THREE.Mesh( new THREE.SphereGeometry( 20.0 ), new THREE.MeshBasicMaterial() )\n this.circle.visible = false\n\n this.scene.add( this.circle )\n this.scene.add( points )\n\n this.setupGPGPU()\n // this.scene.add( new THREE.AxesHelper( 300 ) )\n\n if ( this.useOrtho ) {\n let d = window.innerHeight * 0.5\n this.camera = new THREE.OrthographicCamera( - d * this.aspect, d * this.aspect, d, - d, 0.1, 10000000 );\n } else {\n this.camera = new THREE.PerspectiveCamera( 70, this.aspect, 0.01, 10000 )\n }\n\n this.camera.position.set( 0, 0, 300 )\n this.camera.lookAt( new THREE.Vector3() )\n\n this.controls = new OrbitControls( this.camera )\n this.controls.enableDamping = true\n this.controls.enabled = false\n this.materials.points.uniforms.intro.value = 1.0;\n\n TweenLite.to(this.materials.points.uniforms.intro, 1.0, { value: 0.0, delay: 1.0 })\n TweenLite.from(this, 3.0, { rotationSpeed: 2.0, ease: 'Quint.easeOut' })\n\n let tl = new TimelineLite()\n tl.fromTo( this.points.scale, 3.0, { x: 0.0001, y: 0.001, z: 0.001 }, { x: this.sphereRadius, y: this.sphereRadius, z: this.sphereRadius, ease: 'Expo.easeOut', delay: 1.0, onComplete: () => { } } )\n tl.from( this.materials.computationPosition.uniforms.maxSpeed, 3.0, { value: 30 }, 0.0 )\n } \n\n fillTextures() {\n var posArray = this.positions.image.data;\n var velArray = this.velocities.image.data;\n this.fillFibonacciSphere( posArray, ( k ) => {\n velArray[ k + 0 ] = 0.0\n velArray[ k + 1 ] = 0.0\n velArray[ k + 2 ] = 0.0\n velArray[ k + 3 ] = 0.0 // alpha\n })\n }\n\n setupGPGPU() {\n /**\n * @type { GPGPUComputationRenderer }\n */\n let size = SIZE;\n this.gpuCompute = new GPGPUComputationRenderer( size, size, this.renderer )\n this.positions = this.gpuCompute.createTexture()\n this.velocities = this.gpuCompute.createTexture()\n this.originalPositions = this.gpuCompute.createTexture()\n this.fillTextures()\n this.fillFibonacciSphere( this.originalPositions.image.data, ( k ) => {\n this.originalPositions.image.data[ k + 3 ] = Math.random() // Life expectancy\n } )\n \n // Add texture ariables\n var velVar = this.gpuCompute.addVariable( \"textureVelocity\", computeVelocity, this.velocities );\n var posVar = this.gpuCompute.addVariable( \"texturePosition\", computePosition, this.positions );\n\n // Add variable dependencies\n this.gpuCompute.setVariableDependencies( velVar, [ velVar, posVar ] );\n this.gpuCompute.setVariableDependencies( posVar, [ velVar, posVar ] );\n\n this.gpuCompute.positionVariable = posVar\n this.gpuCompute.velocityVariable = velVar\n\n velVar.material.uniforms.time = { value: 0.0 };\n velVar.material.uniforms.curlInfluence = { value: 100 };\n velVar.material.uniforms.curlSpeed = { value: 8000 };\n velVar.material.uniforms.birthThreshold = { value: 0.0 };\n velVar.material.uniforms.originalPositions = { value: this.originalPositions };\n velVar.material.uniforms.originalPositions.value.needsUpdate = true\n posVar.material.uniforms.originalPositions = { value: this.originalPositions };\n posVar.material.uniforms.originalPositions.value.needsUpdate = true\n velVar.material.uniforms.rotationY = {value: this.points.rotation.y }\n velVar.material.uniforms.sendAmountDelta = { value: 0.0 };\n velVar.material.uniforms.originPoint = {value: new THREE.Vector3(-1.0, 0.0, 0.0) }\n posVar.material.uniforms.time = { value: 100.0 };\n posVar.material.uniforms.sendAmountDelta = { value: 0.0 };\n posVar.material.uniforms.originPoint = {value: new THREE.Vector3(-1.0, 0.0, 0.0) }\n posVar.material.uniforms.rotationY = {value: this.points.rotation.y }\n posVar.material.uniforms.deformAmplitude = { value: 0.007 };\n posVar.material.uniforms.birthThreshold = { value: 0.0 };\n posVar.material.uniforms.maxSpeed = { value: 10.0 };\n\n this.materials.computationVelocity = velVar.material\n this.materials.computationPosition = posVar.material\n \n // Check for completeness\n var error = this.gpuCompute.init();\n if ( error !== null ) {\n \tconsole.error( error );\n }\n }\n\n appendTo( p ) {\n p.appendChild( this.renderer.domElement )\n }\n\n tick( time ) {\n\n if ( this.needsPulse ) {\n let mat = this.materials.computationPosition\n mat.uniforms.deformAmplitude.value = remap( this.simplex.noise2D( this.elapsed * 0.0005, 0.1 ), -1, 1, 0.001, 0.03)\n }\n let newSendAmountForParticle = this._sendAmountForParticle * 0.95 + this._sendAmount * 0.05\n let sendAmountForParticleDelta = this._sendAmountForParticle - newSendAmountForParticle\n // console.log(sendAmountForParticleDelta)\n this._sendAmountForParticle -= clamp(sendAmountForParticleDelta, -0.015, 1)\n this.birthThreshold = remap(this._sendAmountForParticle, 0.0, 1.0, this.initialPointDensity, 1.0)\n\n this.rotationSpeed *= 1\n this.points.rotation.y += this.rotationSpeed;\n this.materials.computationVelocity.uniforms.rotationY.value = this.points.rotation.y\n this.materials.computationPosition.uniforms.rotationY.value = this.points.rotation.y\n this.gpuCompute.positionVariable.material.uniforms.time.value = this.elapsed\n this.gpuCompute.velocityVariable.material.uniforms.time.value = this.elapsed\n this.gpuCompute.compute()\n let delta = this._sendAmount - this._sendAmountForParticle\n\n this.materials.points.uniforms.hueOffset.value = remap(Math.sin( this.elapsed * 0.003 ), -1.0, 1.0, 0.79, 0.87)\n\n this.materials.points.uniforms.birthThreshold.value = this.birthThreshold\n this.materials.points.uniforms.sendAmountDelta.value = delta\n this.materials.computationPosition.uniforms.birthThreshold.value = this.birthThreshold\n this.materials.computationPosition.uniforms.sendAmountDelta.value = delta\n this.materials.computationVelocity.uniforms.sendAmountDelta.value = delta\n this.materials.computationVelocity.uniforms.birthThreshold.value = this.birthThreshold\n\n\n if ( this.points.material.uniforms.texturePosition ) {\n this.points.material.uniforms.texturePosition.value = this.gpuCompute.getCurrentRenderTarget( this.gpuCompute.positionVariable ).texture\n this.points.material.uniforms.textureVelocity.value = this.gpuCompute.getCurrentRenderTarget( this.gpuCompute.velocityVariable ).texture\n } else {\n this.points.material.uniforms.texturePosition = { value: this.gpuCompute.getCurrentRenderTarget( this.gpuCompute.positionVariable ).texture }\n this.points.material.uniforms.textureVelocity = { value: this.gpuCompute.getCurrentRenderTarget( this.gpuCompute.velocityVariable ).texture }\n }\n this.controls.update()\n this.renderer.render( this.scene, this.camera )\n this.elapsed += time\n }\n\n resize() {\n this.winSize[ 0 ] = window.innerWidth\n this.winSize[ 1 ] = window.innerHeight\n this.aspect = this.winSize[ 0 ] / this.winSize[ 1 ]\n this.slider.refresh()\n if ( this.useOrtho ) {\n let d = this.winSize[ 1 ] * 0.5\n this.camera.left = - d * this.aspect\n this.camera.right = d * this.aspect\n this.camera.top = d\n this.camera.bottom = -d\n } else {\n let fov = this.camera.fov\n let vFOV = fov * ( Math.PI / 180 )\n this.camera.position.z = this.winSize[ 1 ] / (2 * Math.tan(vFOV / 2) )\n this.camera.aspect = this.aspect\n }\n let bbox = this.counter.el.getBoundingClientRect()\n let x = bbox.left + bbox.width * 0.5\n let y = bbox.top + bbox.height * 0.5\n // var vector = new THREE.Vector3( x, y, -1 ).unproject( this.camera );\n // vector.x *= -1 * 20\n // vector.y *= 2.0\n // vector.z = 0.0\n var vec = new THREE.Vector3(); // create once and reuse\n var pos = new THREE.Vector3(); // create once and reuse\n vec.set( ( x / this.winSize[ 0 ] ) * 2 - 1, - ( y / this.winSize[ 1 ] ) * 2 + 1, 0.5 );\n vec.unproject( this.camera );\n vec.sub( this.camera.position ).normalize();\n let distance = - this.camera.position.z / vec.z;\n vec.multiplyScalar( distance )\n pos.copy( this.camera.position ).add( vec );\n this.circle.position.x = pos.x\n this.circle.position.y = pos.y\n pos = pos.multiplyScalar( 1.0 / this.sphereRadius).add( new THREE.Vector3(-this.points.position.x/this.sphereRadius, 0, 0) ) \n this.materials.computationVelocity.uniforms.originPoint.value = pos\n this.materials.computationPosition.uniforms.originPoint.value = pos\n this.materials.points.uniforms.resolution.value.x = this.winSize[ 0 ]\n this.materials.points.uniforms.resolution.value.y = this.winSize[ 1 ]\n\n this.camera.updateProjectionMatrix()\n this.renderer.setSize( this.winSize[ 0 ], this.winSize[ 1 ] )\n\n let vector = new THREE.Vector3();\n let canvas = this.renderer.domElement;\n\n vector.set( this.points.position.x, this.points.position.y, 0.0 );\n vector.project( this.camera );\n vector.x = Math.round( ( vector.x + 1 ) * canvas.width / 2 );\n vector.y = Math.round( ( - vector.y + 1 ) * canvas.height / 2 );\n vector.z = 0;\n document.body.querySelector('.particle-bg').style.transform = `translate3d(${vector.x / 2}px, ${vector.y / 2}px, 0)`\n }\n\n resetScene() {\n this.scene.remove( this.sphereGroup )\n }\n\n destroy() {\n this.scene = null;\n this.camera = null;\n this.controls = null;\n this.gpuCompute.destroy()\n }\n\n fillFibonacciSphere( arr, callback ) {\n\n // https://stackoverflow.com/questions/9600801/evenly-distributing-n-points-on-a-sphere\n let samples = arr.length / 4\n let rnd = 1.0\n let offset = 2.0 / samples\n let increment = Math.PI * (3.0 - Math.sqrt(5.0))\n\n for ( var k = 0, kl = arr.length; k < kl; k += 4 ) {\n let i = Math.floor( k / 4 )\n let y = ((i * offset) - 1) + (offset / 2)\n let r = Math.sqrt(1 - Math.pow(y, 2))\n let phi = ( (i + rnd) % samples) * increment\n let x = Math.cos(phi) * r\n let z = Math.sin(phi) * r\n arr[ k + 0 ] = x;\n arr[ k + 1 ] = y;\n arr[ k + 2 ] = z;\n arr[ k + 3 ] = 0;\n callback && callback( k )\n }\n }\n\n set sendAmount( v ) {\n this._sendAmount = v\n const againstETH = 1 / 200\n v *= userAccount.balance\n document.body.querySelector('.booty-conversion-result').innerHTML = v.toFixed(0)\n document.body.querySelector('.eth-conversion-result').innerHTML = (v * againstETH).toFixed(2)\n // document.body.querySelector('.currency-value .booty-amount').innerHTML = (userAccount.balance - v).toFixed( 0 )\n this.counter.value = Math.round(userAccount.balance - v)\n }\n}\n\nwindow.dumpHashProperty = () => {\n try {\n let params = JSON.parse(decodeURIComponent(window.location.hash.replace('#', '')))\n for ( let name in params ) {\n let param = params[ name ]\n for ( let key in param ) {\n materials[ name ].uniforms[ key ].value = parseFloat( param[ key ] )\n }\n }\n } catch ( e ){\n console.log( e )\n }\n}\n\n// export default App\n\nif (module.hot) {\n\n module.hot.dispose(function () {\n gui.destroy()\n document.body.removeChild(app.renderer.domElement)\n });\n \n module.hot.accept(function () {\n // document.body.removeChild(app.renderer.domElement)\n // app.resetScene()\n // app.setupScene()\n // app.appendTo( document.body )\n });\n}\n\n\ndat.GUI.prototype.addUniform = function( materials, name ) {\n\n let materialName = this.name\n let args = [materials[ materialName ].uniforms[ name ], 'value'].concat(Array.from(arguments).splice(2))\n let ui = this.add.apply( this, args ) \n ui.propertyNameEl = ui.domElement.parentElement.querySelector( '.property-name' )\n ui.propertyNameEl.innerHTML = name\n ui.materialName = materialName\n ui.onChange(( v ) => {\n var params = {}\n let iterateUI = ( folder ) => {\n if (Object.keys( folder.__folders ).length > 0 ) {\n for ( let folderName in folder.__folders ) {\n iterateUI( folder.__folders[ folderName ] )\n }\n } else {\n folder.__controllers.forEach( ( _ui ) => {\n let label = _ui.propertyNameEl.innerText\n params[ _ui.materialName ] = params[ _ui.materialName ] || {}\n params[ _ui.materialName ][ label ] = _ui.object.value\n })\n }\n }\n iterateUI( gui )\n window.location.hash = JSON.stringify( params )\n })\n}\n\ndat.GUI.prototype.loadFromHash = function( materials ) {\n try {\n let params = JSON.parse(decodeURIComponent(window.location.hash.replace('#', '')))\n for ( let name in params ) {\n let param = params[ name ]\n for ( let key in param ) {\n materials[ name ].uniforms[ key ].value = parseFloat( param[ key ] )\n }\n }\n } catch ( e ){\n console.log( e )\n }\n}\n\nlet app = new App()\napp.appendTo( document.body )\napp.engine.start()\nwindow.app = app\n"]}