{"version":3,"sources":["node_modules/@babel/runtime/helpers/createClass.js","node_modules/@babel/runtime/helpers/classCallCheck.js","node_modules/@babel/runtime/helpers/defineProperty.js","node_modules/process/browser.js","config/versionTemplate.txt","lib/es6-promise/utils.js","lib/es6-promise/asap.js","lib/es6-promise/then.js","lib/es6-promise/promise/resolve.js","lib/es6-promise/-internal.js","lib/es6-promise/enumerator.js","lib/es6-promise/promise/all.js","lib/es6-promise/promise/race.js","lib/es6-promise/promise/reject.js","lib/es6-promise/promise.js","lib/es6-promise/polyfill.js","lib/es6-promise.js","node_modules/three/build/three.module.js","js/Model.js","node_modules/@babel/runtime/helpers/typeof.js","js/Lights.js","js/WebViewerOptions.js","node_modules/orbit-controls-es6/build/orbit-controls-es6.umd.js","js/WebViewer.js","js/index.js","bundle.js"],"names":["_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","Constructor","protoProps","staticProps","prototype","module","exports","__esModule","_classCallCheck","instance","TypeError","_defineProperty","obj","value","process","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","setTimeout","e","clearTimeout","runTimeout","fun","call","runClearTimeout","marker","queue","draining","currentQueue","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","nextTick","args","Array","arguments","push","Item","array","apply","title","env","argv","version","versions","noop","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","resolve","_resolve","then","originalThen","originalResolve","Promise","reject","_reject","Resolve","Reject","Number","EPSILON","undefined","Math","pow","isInteger","isFinite","floor","sign","x","Function","get","toString","match","assign","output","index","source","nextKey","hasOwnProperty","EventDispatcher","addEventListener","type","listener","_listeners","indexOf","hasEventListener","removeEventListener","listenerArray","splice","dispatchEvent","event","slice","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","n","m","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","defineProperties","set","isVector2","setScalar","scalar","setX","setY","setComponent","getComponent","clone","constructor","copy","v","add","w","console","warn","addVectors","addScalar","s","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","elements","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","Matrix4","error","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","z","extractRotation","Vector3","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","position","quaternion","_x","_y","_z","_w","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","Quaternion","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","trace","setFromUnitVectors","r","EPS","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","Matrix3","isMatrix3","setFromMatrix4","g","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","rotate","translate","ImageUtils","getDataURL","image","canvas","HTMLCanvasElement","src","document","createElementNS","width","height","context","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","create","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","metadata","generator","wrap","images","url","isArray","dispose","transformUv","uv","Vector4","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","epsilon","epsilon2","getW","WebGLRenderTarget","options","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","isWebGLRenderTarget","setSize","WebGLRenderTargetCube","activeCubeFace","activeMipMapLevel","isWebGLRenderTargetCube","DataTexture","data","isDataTexture","Box3","Infinity","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","constant","intersectsTriangle","v0","f0","f1","f2","testAxis","extents","triangleNormal","satForAxes","axes","j","p0","p1","p2","triangle","distanceToPoint","clampedPoint","getBoundingSphere","Sphere","intersect","union","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","Plane","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","direction","delta","denominator","start","intersectsLine","startSign","endSign","end","coplanarPoint","m1","optionalNormalMatrix","normalMatrix","referencePoint","Frustum","p3","p4","p5","planes","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","physical","clearCoat","clearCoatRoughness","WebGLAnimation","isAnimating","animationLoop","onAnimationFrame","time","frame","requestAnimationFrame","stop","setAnimationLoop","setContext","WebGLAttributes","gl","buffers","WeakMap","createBuffer","bufferType","usage","dynamic","buffer","bindBuffer","bufferData","onUploadCallback","Float32Array","Float64Array","Uint16Array","Int16Array","Uint32Array","Int32Array","Int8Array","Uint8Array","bytesPerElement","BYTES_PER_ELEMENT","updateBuffer","updateRange","bufferSubData","subarray","isInterleavedBufferAttribute","remove","deleteBuffer","delete","Face3","materialIndex","vertexNormals","vertexColors","Euler","_order","DefaultOrder","RotationOrders","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","Layers","mask","channel","enable","toggle","disable","test","layers","object3DId","Object3D","parent","children","DefaultUp","onRotationChange","onQuaternionChange","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","JSON","stringify","serialize","library","element","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","vertex","face","jl","computeBoundingBox","fromBufferGeometry","indices","positions","normals","uvs","uvs2","uv2","addFace","groups","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","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","mergeVertices","verticesMap","unique","changes","precisionPoints","precision","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","_id","materialIndexSort","sort","newUvs1","newUvs2","normalsHash","colorsHash","uvsHash","hasMaterial","hasFaceUv","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","enabled","hash","k","kl","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","BufferAttribute","itemSize","normalized","isBufferAttribute","setArray","setDynamic","copyAt","index1","index2","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","DirectGeometry","computeGroups","fromGeometry","hasFaceVertexUv2","morphTargetsLength","morphTargetsPosition","morphNormalsLength","morphTargetsNormal","hasSkinIndices","hasSkinWeights","vertexUvs","arrayMax","bufferGeometryId","BufferGeometry","morphAttributes","drawRange","getIndex","setIndex","addAttribute","getAttribute","removeAttribute","addGroup","clearGroups","setDrawRange","needsUpdate","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","isNaN","pA","pB","pC","normalizeNormals","attribute1","attributeArray1","attribute2","attributeArray2","attributeSize","toNonIndexed","geometry2","array2","keys","morphAttribute","BoxGeometry","widthSegments","heightSegments","depthSegments","BoxBufferGeometry","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","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","isMaterial","onBeforeCompile","setValues","newValue","currentValue","isRoot","emissiveIntensity","normalMapType","combine","sizeAttenuation","linewidth","gapSize","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","srcPlanes","dstPlanes","ShaderMaterial","defines","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","isShaderMaterial","uniform","Ray","origin","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","segCenter","segDir","optionalPointOnRay","optionalPointOnSegment","segExtent","a01","b0","s0","sqrDist","extDet","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","Triangle","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","MeshBasicMaterial","isMeshBasicMaterial","Mesh","drawMode","updateMorphTargets","setDrawMode","morphTargetInfluences","morphTargetDictionary","ml","String","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","intersectionPoint","intersectionPointWorld","checkIntersection","raycaster","checkBufferGeometryIntersection","intersection","intersects","groupMaterial","faceIndex","fvA","fvB","fvC","isMultiMaterial","faceMaterial","morphInfluences","tl","influence","targets","uvs_f","WebGLBackground","renderer","state","objects","clearColor","clearAlpha","planeMesh","boxMesh","render","renderList","scene","forceClear","setClear","autoClear","clear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","getClearColor","setClearColor","getClearAlpha","setClearAlpha","WebGLBufferRenderer","info","capabilities","mode","setMode","drawArrays","renderInstances","extension","isWebGL2","maxInstancedCount","WebGLCapabilities","maxAnisotropy","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getMaxPrecision","getShaderPrecisionFormat","WebGL2RenderingContext","maxPrecision","logarithmicDepthBuffer","maxTextures","maxVertexTextures","maxTextureSize","maxCubemapSize","maxAttributes","maxVertexUniforms","maxVaryings","maxFragmentUniforms","vertexTextures","floatFragmentTextures","floatVertexTextures","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","numPlanes","numIntersection","init","enableLocalClipping","projectPlanes","beginShadows","endShadows","resetGlobalState","setState","fromCache","nGlobal","lGlobal","dstArray","clippingState","skipTransform","nPlanes","flatSize","viewMatrix","i4","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","buffergeometry","memory","_bufferGeometry","geometryAttributes","getWireframeAttribute","geometryIndex","WebGLIndexedBufferRenderer","drawElements","WebGLInfo","calls","triangles","lines","instanceCount","reset","programs","autoReset","absNumericalSort","WebGLMorphtargets","influencesList","program","objectInfluences","influences","getUniforms","setValue","WebGLObjects","updateList","CubeTexture","DataTexture3D","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","getActiveUniform","getUniformLocation","setOptional","upload","seqWithValue","addLineNumbers","split","join","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","getShaderInfoLog","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMapping","toneMappingName","generateExtensions","rendererExtensions","chunks","envMapCubeUV","objectSpaceNormalMap","filter","filterEmptyLine","generateDefines","fetchAttributeLocations","getActiveAttrib","getAttribLocation","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","pattern","include","unrollLoops","snippet","unroll","WebGLProgram","code","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","gammaFactorDefine","customExtensions","customDefines","createProgram","prefixVertex","prefixFragment","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","getProgramInfoLog","trim","vertexLog","fragmentLog","runnable","haveDiagnostics","getError","diagnostics","prefix","deleteShader","cachedUniforms","cachedAttributes","getAttributes","destroy","deleteProgram","usedTimes","WebGLPrograms","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshMatcapMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","SpriteMaterial","parameterNames","allocateBones","skeleton","bones","nVertexUniforms","nVertexMatrices","getTextureEncodingFromMap","gammaOverrideLinear","getParameters","shadows","nClipPlanes","nClipIntersection","shaderID","isSkinnedMesh","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","list","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","pushLight","pushShadow","shadowLight","setupLights","WebGLRenderStates","renderStates","renderState","isMeshDepthMaterial","isMeshDistanceMaterial","WebGLShadowMap","_renderer","_objects","_frustum","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_lightPositionWorld","_MorphingFlag","_SkinningFlag","_NumberOfMaterialVariants","_depthMaterials","_distanceMaterials","_materialCache","cubeDirections","cubeUps","cube2DViewPorts","useMorphing","useSkinning","depthMaterial","distanceMaterial","autoUpdate","_gl","_state","setTest","setScissorTest","faceCount","shadowCamera","vpWidth","vpHeight","pars","updateProjectionMatrix","isSpotLightShadow","shadowMatrix","setRenderTarget","vpDimensions","renderObject","getDepthMaterial","lightPositionWorld","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","renderBufferDirect","WebGLState","utils","ColorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","depthMask","setFunc","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","colorBuffer","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","enabledCapabilities","compressedTextureFormats","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","texImage2D","emptyTextures","setFlipSided","setCullFace","setBlending","initAttributes","enableAttribute","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","disableUnusedAttributes","disableVertexAttribArray","getCompressedTextureFormats","formats","useProgram","blendFuncSeparate","blendFunc","blendEquationSeparate","convert","setMaterial","frontFaceCW","setPolygonOffset","frontFace","cullFace","setLineWidth","lineWidth","factor","activeTexture","webglSlot","webglType","webglTexture","boundTexture","compressedTexImage2D","texImage3D","WebGLTextures","_videoTextures","_canvas","clampToMaxSize","maxSize","makePowerOfTwo","HTMLImageElement","ImageBitmap","textureNeedsPowerOfTwo","textureNeedsGenerateMipmaps","generateMipmap","textureProperties","__maxMipLevel","LOG2E","getInternalFormat","glFormat","glType","filterFallback","onTextureDispose","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTarget","deallocateRenderTarget","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","slot","updateVideoTexture","__version","complete","uploadTexture","pixelStorei","isCompressed","isCompressedTexture","cubeImage","isPowerOfTwoImage","glInternalFormat","setTextureParameters","mipmap","setTextureCubeDynamic","textureType","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","isDepthTexture","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","renderbufferStorage","framebufferRenderbuffer","setupDepthTexture","isCube","webglDepthTexture","setupDepthRenderbuffer","createRenderbuffer","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","updateRenderTargetMipmap","WebGLUtils","HALF_FLOAT_OES","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_EXT","MAX_EXT","UNSIGNED_INT_24_8_WEBGL","Group","isGroup","Camera","projectionMatrixInverse","PerspectiveCamera","fov","aspect","zoom","focus","view","filmGauge","filmOffset","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","setViewOffset","fullWidth","fullHeight","offsetX","offsetY","clearViewOffset","skew","ArrayCamera","cameras","isArrayCamera","cameraLPos","cameraRPos","setProjectionFromUnion","cameraL","cameraR","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","near2","far2","left2","right2","top2","bottom2","WebVRManager","device","frameData","poseTarget","controllers","standingMatrix","standingMatrixInverse","framebufferScaleFactor","frameOfReferenceType","window","VRFrameData","onVRDisplayPresentChange","tempQuaternion","tempPosition","bounds","cameraVR","isPresenting","currentSize","currentPixelRatio","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","animation","triggers","findGamepad","gamepads","navigator","getGamepads","gamepad","startsWith","updateControllers","controller","pose","hasPosition","orientation","buttonId","buttons","pressed","getController","getDevice","setDevice","setFramebufferScaleFactor","setFrameOfReferenceType","setPoseTarget","getCamera","userHeight","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","poseObject","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","WebXRManager","session","frameOfReference","inputSources","XRDevice","setCompatibleXRDevice","onSessionEvent","inputSource","onSessionEnd","setFramebuffer","setSession","baseLayer","XRWebGLLayer","requestFrameOfReference","getInputSources","updateCamera","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","_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","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","initGLContext","vr","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","bits","preventDefault","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReference","renderObjectImmediate","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","vertexAttribPointer","normalArray","uvArray","colorArray","setProgram","updateBuffers","rangeFactor","setupVertexAttributes","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","compile","isLight","initMaterial","projectObject","opaqueObjects","transparentObjects","overrideMaterial","renderObjects","isImmediateRenderObject","camera2","materialProperties","lightsHash","lightsStateHash","programChange","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","isMeshPhongMaterial","isMeshStandardMaterial","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","markUniformsLightsNeedsUpdate","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","refreshUniformsStandard","isMeshMatcapMaterial","refreshUniformsMatcap","refreshUniformsDepth","refreshUniformsDistance","isMeshNormalMaterial","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","isFog","density","textureUnit","warned","setTexture","readRenderTargetPixels","restore","textureFormat","checkFramebufferStatus","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","FogExp2","Fog","Scene","InterleavedBuffer","isInterleavedBuffer","InterleavedBufferAttribute","interleavedBuffer","Sprite","float32Array","intersectPoint","worldScale","mvPosition","alignedPosition","rotatedPosition","viewWorldMatrix","transformVertex","vertexPosition","LOD","levels","addLevel","getObjectForDistance","matrixPosition","Skeleton","boneInverses","calculateInverses","bone","isBone","offsetMatrix","identityMatrix","getBoneByName","Bone","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","initBones","bind","normalizeSkinWeights","gbone","pos","rotq","scl","sw","vec","skinWeight","linecap","linejoin","Line","computeLineDistances","positionAttribute","linePrecision","localPrecision","localPrecisionSq","vStart","vEnd","interSegment","interRay","distSq","nbVertices","LineSegments","LineLoop","Points","threshold","params","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","VideoTexture","video","readyState","HAVE_CURRENT_DATA","CompressedTexture","CanvasTexture","isCanvasTexture","DepthTexture","WireframeGeometry","o","ol","edge","edges","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","detail","PolyhedronBufferGeometry","vertexBuffer","uvBuffer","subdivide","appplyRadius","generateUVs","getVertexByIndex","subdivideFace","cols","aj","bj","rows","pushVertex","azimuth","inclination","correctUVs","correctSeam","centroid","azi","correctUV","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","DodecahedronGeometry","DodecahedronBufferGeometry","TubeGeometry","tubularSegments","radialSegments","closed","taper","bufferGeometry","TubeBufferGeometry","tangents","binormals","frames","computeFrenetFrames","P","generateBufferData","generateSegment","generateIndices","getPointAt","N","B","TorusKnotGeometry","tube","heightScale","TorusKnotBufferGeometry","P1","P2","T","calculatePositionOnCurve","cu","su","quOverP","cs","TorusGeometry","arc","TorusBufferGeometry","Earcut","triangulate","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","invSize","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","extrudeByPath","splineTube","binormal","position2","getSpacedPoints","ahole","hl","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","ptNextShift_x","ptNextShift_y","sf","v_trans_lensq","direction_eq","contourMovements","holesMovements","oneHoleMovements","verticesMovements","buildLidFaces","buildSideFaces","f3","layeroffset","sidewalls","sl","slen1","slen2","f4","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","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","toJSON$1","shapeHole","indexOffset","shapeVertices","shapeHoles","EdgesGeometry","thresholdAngle","thresholdDot","sourceVertices","face1","face2","CylinderGeometry","radiusTop","radiusBottom","openEnded","CylinderBufferGeometry","indexArray","generateTorso","generateCap","slope","indexRow","sinTheta","cosTheta","centerIndexStart","centerIndexEnd","ConeGeometry","ConeBufferGeometry","CircleGeometry","CircleBufferGeometry","Geometries","freeze","RawShaderMaterial","createElement","fillStyle","fillRect","Materials","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","evaluate","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","settings","DefaultSettings_","getSettings_","copySampleValue_","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","LinearInterpolant","offset1","offset0","weight1","weight0","DiscreteInterpolant","KeyframeTrack","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","track","trackType","json","getInterpolation","ValueTypeName","InterpolantFactoryMethodDiscrete","getValueSize","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","factoryMethod","createInterpolant","shift","timeOffset","timeScale","startTime","endTime","nKeys","validate","valid","prevTime","currTime","optimize","smoothInterpolation","writeIndex","keep","timeNext","offsetP","offsetN","readOffset","writeOffset","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","duration","tracks","resetDuration","getTrackTypeForValueTypeName","typeName","toLowerCase","parseKeyframeTrack","jsonTracks","frameTime","fps","clip","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","parts","animationMorphTargets","clips","parseAnimation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","transform","DefaultLoadingManager","loading","FileLoader","manager","load","cached","dataUriRegex","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","open","callbacks","status","withCredentials","overrideMimeType","header","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","AnimationLoader","loader","CompressedTextureLoader","_parser","loadTexture","texDatas","loaded","mipmapCount","isCubemap","DataTextureLoader","texData","ImageLoader","crossOrigin","onImageLoad","onImageError","substr","setCrossOrigin","CubeTextureLoader","urls","TextureLoader","isJPEG","search","Curve","arcLengthDivisions","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","current","updateArcLengths","arcLengths","targetArcLength","comparison","lengthBefore","lengthAfter","segmentLength","segmentFraction","getTangent","t2","pt1","pt2","getTangentAt","mat","MAX_VALUE","tz","fromJSON","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","isEllipseCurve","twoPi","deltaAngle","samePoints","ArcCurve","aRadius","isArcCurve","CubicPoly","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","calc","t3","pz","CatmullRomCurve3","curveType","isCatmullRomCurve3","intPoint","weight","CatmullRom","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezier","CubicBezierCurve","v3","isCubicBezierCurve","CubicBezierCurve3","isCubicBezierCurve3","LineCurve","isLineCurve","tangent","LineCurve3","isLineCurve3","QuadraticBezierCurve","isQuadraticBezierCurve","QuadraticBezierCurve3","isQuadraticBezierCurve3","SplineCurve","isSplineCurve","Curves","CurvePath","curves","autoClose","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","lens","cacheLengths","sums","resolution","Path","currentPoint","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","npts","absarc","absellipse","ellipse","firstPoint","lastPoint","Shape","getPointsHoles","holesPts","Light","HemisphereLight","LightShadow","SpotLightShadow","SpotLight","power","PointLight","OrthographicCamera","isOrthographicCamera","zoomW","zoomH","scaleW","scaleH","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","MaterialLoader","getTexture","shading","setTextures","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","BufferGeometryLoader","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","JSONLoader","setResourcePath","resourcePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","faceA","faceB","uvLayer","nUvLayers","parseSkin","influencesPerVertex","parseMorphing","dstVertices","srcVertices","morphColors","parseAnimations","outputAnimations","morphAnimationClips","ObjectLoader","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","geometryShapes","loadImage","currentUrl","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","ImageBitmapLoader","createImageBitmap","fetch","setOptions","res","blob","imageBitmap","catch","ShapePath","subPaths","currentPath","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","betterShapeHoles","newShapes","newShapeHoles","mainIdx","tmpPoints","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","tmpHoles","Font","paths","createPaths","chars","line_height","yMax","yMin","underlineThickness","char","ret","createPath","glyph","glyphs","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","_cachedOutline","action","ha","FontLoader","substring","AudioContext","webkitAudioContext","AudioLoader","bufferCopy","decodeAudioData","audioBuffer","StereoCamera","eyeSep","eyeRight","eyeLeft","eyeSepOnProjection","ymax","xmin","xmax","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","Clock","autoStart","oldTime","elapsedTime","running","performance","Date","now","getElapsedTime","getDelta","newTime","AudioListener","gain","createGain","connect","destination","timeDelta","getInput","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","clock","positionX","linearRampToValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","Audio","autoplay","loop","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","getOutput","setNodeSource","audioNode","setMediaElementSource","mediaElement","createMediaElementSource","setBuffer","play","createBufferSource","onended","onEnded","setValueAtTime","pause","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","PositionalAudio","panner","createPanner","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","setDirectionalCone","coneInnerAngle","coneOuterAngle","coneOuterGain","orientationX","orientationY","orientationZ","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getFrequencyData","getByteFrequencyData","getAverageFrequency","PropertyMixer","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","accumulate","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","RESERVED_CHARS_RE","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","firstValidIndex","nCachedObjects_","bindings","unbind","rootNode","findNode","nodeName","root","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","getValue_direct","getValue_array","resolvedProperty","getValue_arrayElement","getValue_toArray","SetterByBindingTypeAndVersioning","setValue_direct","targetObject","setValue_direct_setNeedsUpdate","setValue_direct_setMatrixWorldNeedsUpdate","setValue_array","dest","setValue_array_setNeedsUpdate","setValue_array_setMatrixWorldNeedsUpdate","setValue_arrayElement","setValue_arrayElement_setNeedsUpdate","setValue_arrayElement_setMatrixWorldNeedsUpdate","setValue_fromArray","setValue_fromArray_setNeedsUpdate","setValue_fromArray_setMatrixWorldNeedsUpdate","getValue_unbound","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","AnimationObjectGroup","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","inUse","bindingsPerObject","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","lastBindingsPath","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","_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","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_root","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","pingPong","_setEndings","handle_stop","loopDelta","pending","atStart","atEnd","weightNow","weightThen","AnimationMixer","_initMemoryManager","_accuIndex","_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","Uniform","InstancedBufferGeometry","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","PointCloud","ascSort","intersectObject","setFromCamera","coords","intersectObjects","Spherical","other","makeSafe","setFromCartesianCoords","Cylindrical","Box2","Line3","distanceSq","closestPointToPointParameter","startP","startEnd","clampToLine","startEnd2","startEnd_startP","ImmediateRenderObject","VertexNormalsHelper","nNormals","objGeometry","objPos","objNorm","SpotLightHelper","cone","coneLength","coneWidth","getBoneList","boneList","SkeletonHelper","boneMatrix","matrixWorldInv","PointLightHelper","sphereSize","RectAreaLightHelper","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","FaceNormalsHelper","DirectionalLightHelper","lightPlane","targetLine","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","setPoint","BoxHelper","Box3Helper","PlaneHelper","positions2","lineGeometry","coneGeometry","ArrowHelper","headLength","headWidth","setDirection","setColor","AxesHelper","Face4","LineStrip","LinePieces","MeshFaceMaterial","MultiMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","ClosedSplineCurve3","SplineCurve3","Spline","initFromArray","getControlPointsArray","reparametrizeByArcLength","AxisHelper","BoundingBoxHelper","EdgesHelper","setColors","WireframeHelper","XHRLoader","BinaryTextureLoader","setTexturePath","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","overdraw","wrapRGB","metal","clearTarget","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","shadowMapCullFace","renderReverseSided","renderSingleSided","standing","audioLoader","getData","updateCubeMap","GeometryUtils","geometry1","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","SceneUtils","createMultiMaterialObject","detach","attach","LensFlare","Model","object3D","pivot","getBoundingFigures","_boundingSphere","_boundingBox","boxSize","geo","_typeof","Symbol","iterator","Lights","lightColorDark","lightColorNeutral","lightColorBright","lightOpacity","sunLight","ambientLight","hemisphereLight","spotLight1","spotLight2","privot","createLights","spotLight","WebViewerOptions","originToCenter","WebViewer","orbitControls","resizeRendererToDisplaySize","resize","model","innerWidth","innerHeight","devicePixelRatio","clientWidth","clientHeight","needResize","wrapper","OrbitControls","enableZoom","enableKeys","zoomSpeed","enablePan","offsetWidth","offsetHeight","appendChild","getElementsByTagName","bindEvents","newCameraPosition","err","modelIsEmpty","applyLights","unCenterEmptyBoxes","tweakCameraAndControls","sceneReady","RfaViewer","canvasWrapper","Viewer","loadScene","IsReady","Element"],"mappings":"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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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","file":"bundle.js","sourceRoot":"..","sourcesContent":["function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// 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","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n","export function objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nexport function isFunction(x) {\n return typeof x === 'function';\n}\n\nexport function isMaybeThenable(x) {\n return x !== null && typeof x === 'object';\n}\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nexport var isArray = _isArray;","var len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nexport var asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nexport function setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nexport function setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}","import { invokeCallback, subscribe, FULFILLED, REJECTED, noop, makePromise, PROMISE_ID } from './-internal';\n\nimport { asap } from './asap';\n\nexport default function then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}","import { noop, resolve as _resolve } from '../-internal';\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nexport default function resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n _resolve(promise, object);\n return promise;\n}","import { objectOrFunction, isFunction } from './utils';\n\nimport { asap } from './asap';\n\nimport originalThen from './then';\nimport originalResolve from './promise/resolve';\n\nexport var PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor && then === originalThen && maybeThenable.constructor.resolve === originalResolve) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then)) {\n handleForeignThenable(promise, maybeThenable, then);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then = void 0;\n try {\n then = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nexport { nextId, makePromise, noop, resolve, reject, fulfill, subscribe, publish, publishRejection, initializePromise, invokeCallback, FULFILLED, REJECTED, PENDING, handleMaybeThenable };","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isArray, isMaybeThenable } from './utils';\nimport { noop, reject, fulfill, subscribe, FULFILLED, REJECTED, PENDING, handleMaybeThenable } from './-internal';\n\nimport then from './then';\nimport Promise from './promise';\nimport originalResolve from './promise/resolve';\nimport originalThen from './then';\nimport { makePromise, PROMISE_ID } from './-internal';\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n};\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n\n if (resolve === originalResolve) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === originalThen && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve) {\n return resolve(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\nexport default Enumerator;\n;","import Enumerator from '../enumerator';\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nexport default function all(entries) {\n return new Enumerator(this, entries).promise;\n}","import { isArray } from \"../utils\";\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nexport default function race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}","import { noop, reject as _reject } from '../-internal';\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n _reject(promise, reason);\n return promise;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isFunction } from './utils';\nimport { noop, nextId, PROMISE_ID, initializePromise } from './-internal';\nimport { asap, setAsap, setScheduler } from './asap';\n\nimport all from './promise/all';\nimport race from './promise/race';\nimport Resolve from './promise/resolve';\nimport Reject from './promise/reject';\nimport then from './then';\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise.prototype.then = then;\nexport default Promise;\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = Resolve;\nPromise.reject = Reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;","/*global self*/\nimport Promise from './promise';\n\nexport default function polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise;\n}","import Promise from './es6-promise/promise';\nimport polyfill from './es6-promise/polyfill';\n\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\nexport default Promise;","// 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 = '98';\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 ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t} else if ( 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 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\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;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\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 vWorldDirection;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\nvar cube_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = 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 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = 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\tuvTransform: { value: new Matrix3() },\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 ? 35048 : 35044;\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 = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\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 = 5123;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\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, 35044 );\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\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tconfigurable: true,\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\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromArray( positions, i ) );\n\n\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromArray( colors, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tvar vertexColors = ( colors === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone() ];\n\n\t\t\tvar vertexNormals = ( normals === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromArray( normals, a * 3 ),\n\t\t\t\tnew Vector3().fromArray( normals, b * 3 ),\n\t\t\t\tnew Vector3().fromArray( normals, c * 3 )\n\t\t\t];\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( [\n\t\t\t\t\tnew Vector2().fromArray( uvs, a * 2 ),\n\t\t\t\t\tnew Vector2().fromArray( uvs, b * 2 ),\n\t\t\t\t\tnew Vector2().fromArray( uvs, c * 2 )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromArray( uvs2, a * 2 ),\n\t\t\t\t\tnew Vector2().fromArray( uvs2, b * 2 ),\n\t\t\t\t\tnew Vector2().fromArray( uvs2, c * 2 )\n\t\t\t\t] );\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.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 {\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.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 || background.isWebGLRenderTargetCube ) ) {\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\ttype: 'BackgroundCubeMaterial',\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.isWebGLRenderTargetCube ) ? background.texture : background;\n\t\t\tboxMesh.material.uniforms.tFlip.value = ( background.isWebGLRenderTargetCube ) ? 1 : - 1;\n\n\t\t\t// push to the pre-sorted opaque render list\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\ttype: 'BackgroundMaterial',\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\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\t// push to the pre-sorted opaque render list\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( 35633, 36338 ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( 35632, 36338 ).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( 35633, 36337 ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( 35632, 36337 ).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( 34930 );\n\tvar maxVertexTextures = gl.getParameter( 35660 );\n\tvar maxTextureSize = gl.getParameter( 3379 );\n\tvar maxCubemapSize = gl.getParameter( 34076 );\n\n\tvar maxAttributes = gl.getParameter( 34921 );\n\tvar maxVertexUniforms = gl.getParameter( 36347 );\n\tvar maxVaryings = gl.getParameter( 36348 );\n\tvar maxFragmentUniforms = gl.getParameter( 36349 );\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, 34963 );\n\n\t\t}\n\n\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\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 ], 34962 );\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, 34963 );\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 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 5:\n\t\t\tcase 6:\n\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\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, 35718 );\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, 35713 ) === 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 === 35633 ? '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, 35721 );\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, 35633, vertexGlsl );\n\tvar glFragmentShader = WebGLShader( gl, 35632, 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, 35714 ) === false ) {\n\n\t\trunnable = false;\n\n\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), '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\tarray.push( renderer.gammaFactor );\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( 3042 );\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( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\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( 512 );\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( 519 );\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( 513 );\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( 515 );\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( 514 );\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( 518 );\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( 516 );\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( 517 );\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( 515 );\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( 515 );\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( 2960 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2960 );\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( 34921 );\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( 35661 );\n\n\tvar lineWidthAvailable = false;\n\tvar version = 0;\n\tvar glVersion = gl.getParameter( 7938 );\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, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tvar emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\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( 34467 );\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( 3042 );\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( 3042 );\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( 32774 );\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( 1, 771, 1, 771 );\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( 1, 1 );\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( 0, 0, 769, 771 );\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( 0, 768, 0, 770 );\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( 770, 771, 1, 771 );\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( 770, 1 );\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( 0, 769 );\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( 0, 768 );\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( 2884 )\n\t\t\t: enable( 2884 );\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( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\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( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\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( 32823 );\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( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + 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 === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) return 33326;\n\t\t\tif ( glType === 5131 ) return 33325;\n\t\t\tif ( glType === 5121 ) return 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) return 34837;\n\t\t\tif ( glType === 5131 ) return 34843;\n\t\t\tif ( glType === 5121 ) return 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) return 34836;\n\t\t\tif ( glType === 5131 ) return 34842;\n\t\t\tif ( glType === 5121 ) return 32856;\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 9728;\n\n\t\t}\n\n\t\treturn 9729;\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( 33984 + slot );\n\t\tstate.bindTexture( 3553, 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( 33984 + slot );\n\t\tstate.bindTexture( 32879, 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( 33984 + slot );\n\t\t\t\tstate.bindTexture( 34067, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t_gl.pixelStorei( 37440, 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( 34067, 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( 34069 + 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( 34069 + 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( 34069 + 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( 34069 + 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( 34067, 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( 33984 + slot );\n\t\t\t\tstate.bindTexture( 34067, 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( 33984 + slot );\n\t\tstate.bindTexture( 34067, 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, 10242, utils.convert( texture.wrapS ) );\n\t\t\t_gl.texParameteri( textureType, 10243, utils.convert( texture.wrapT ) );\n\n\t\t\t_gl.texParameteri( textureType, 10240, utils.convert( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, utils.convert( texture.minFilter ) );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\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, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, 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 = 32879;\n\n\t\t} else {\n\n\t\t\ttextureType = 3553;\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( 33984 + slot );\n\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, 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 = 6402;\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 = 36012;\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 = 33189;\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\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 = 34041;\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( 3553, 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( 3553, 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( 3553, 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( 3553, 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( 3553, 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( 32879, 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( 3553, 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( 3553, 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( 3553, 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( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( 36160, 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( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( 36161, 33189, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t_gl.renderbufferStorage( 36161, 32854, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, 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( 36160, 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( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, 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( 36160, 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( 36160, 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( 36160, 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( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 34067, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 3553, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, 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 ? 34067 : 3553;\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 10497;\n\t\tif ( p === ClampToEdgeWrapping ) return 33071;\n\t\tif ( p === MirroredRepeatWrapping ) return 33648;\n\n\t\tif ( p === NearestFilter ) return 9728;\n\t\tif ( p === NearestMipMapNearestFilter ) return 9984;\n\t\tif ( p === NearestMipMapLinearFilter ) return 9986;\n\n\t\tif ( p === LinearFilter ) return 9729;\n\t\tif ( p === LinearMipMapNearestFilter ) return 9985;\n\t\tif ( p === LinearMipMapLinearFilter ) return 9987;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) return 5131;\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 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\tif ( p === AddEquation ) return 32774;\n\t\tif ( p === SubtractEquation ) return 32778;\n\t\tif ( p === ReverseSubtractEquation ) return 32779;\n\n\t\tif ( p === ZeroFactor ) return 0;\n\t\tif ( p === OneFactor ) return 1;\n\t\tif ( p === SrcColorFactor ) return 768;\n\t\tif ( p === OneMinusSrcColorFactor ) return 769;\n\t\tif ( p === SrcAlphaFactor ) return 770;\n\t\tif ( p === OneMinusSrcAlphaFactor ) return 771;\n\t\tif ( p === DstAlphaFactor ) return 772;\n\t\tif ( p === OneMinusDstAlphaFactor ) return 773;\n\n\t\tif ( p === DstColorFactor ) return 774;\n\t\tif ( p === OneMinusDstColorFactor ) return 775;\n\t\tif ( p === SrcAlphaSaturateFactor ) return 776;\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 32775;\n\t\t\t\tif ( p === MaxEquation ) return 32776;\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 34042;\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 jsantell / https://www.jsantell.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar cameraLPos = new Vector3();\nvar cameraRPos = new Vector3();\n\n/**\n * Assumes 2 cameras that are parallel and share an X-axis, and that\n * the cameras' projection and world matrices have already been set.\n * And that near and far planes are identical for both cameras.\n * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n */\nfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\tvar ipd = cameraLPos.distanceTo( cameraRPos );\n\n\tvar projL = cameraL.projectionMatrix.elements;\n\tvar projR = cameraR.projectionMatrix.elements;\n\n\t// VR systems will have identical far and near planes, and\n\t// most likely identical top and bottom frustum extents.\n\t// Use the left camera for these values.\n\tvar near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\tvar far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\tvar topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\tvar bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\tvar leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\tvar rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\tvar left = near * leftFov;\n\tvar right = near * rightFov;\n\n\t// Calculate the new camera's position offset from the\n\t// left camera. xOffset should be roughly half `ipd`.\n\tvar zOffset = ipd / ( - leftFov + rightFov );\n\tvar xOffset = zOffset * - leftFov;\n\n\t// TODO: Better way to apply this offset?\n\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\tcamera.translateX( xOffset );\n\tcamera.translateZ( zOffset );\n\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\n\n\t// Find the union of the frustum values of the cameras and scale\n\t// the values so that the near plane's position does not change in world space,\n\t// although must now be relative to the new union camera.\n\tvar near2 = near + zOffset;\n\tvar far2 = far + zOffset;\n\tvar left2 = left - xOffset;\n\tvar right2 = right + ( ipd - xOffset );\n\tvar top2 = topFov * far / far2 * near2;\n\tvar bottom2 = bottomFov * far / far2 * near2;\n\n\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\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 framebufferScaleFactor = 1.0;\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 * framebufferScaleFactor;\n\t\t\tvar renderHeight = eyeParameters.renderHeight * framebufferScaleFactor;\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.setFramebufferScaleFactor = function ( value ) {\n\n\t\tframebufferScaleFactor = 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\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\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\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 framebufferScaleFactor = 1.0;\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.setFramebufferScaleFactor = function ( value ) {\n\n\t\tframebufferScaleFactor = value;\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, { framebufferScaleFactor: framebufferScaleFactor } );\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\tfor ( var i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\tvar controller = controllers[ i ];\n\t\t\t\t\tcontroller.userData.inputSource = inputSources[ i ];\n\n\t\t\t\t}\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\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\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\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}\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 |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\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( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tstate.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tstate.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tstate.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 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( 34963, 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( 1 );\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( 4 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\trenderer.setMode( 5 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\trenderer.setMode( 6 );\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( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\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( 34962, 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( 34962, 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\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( 36160, 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( 36160, 36064, 34069 + 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( 36160, 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( 35739 ) ) {\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( 35738 ) && // 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( 36160 ) === 36053 ) {\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( 36160, _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( 3553, 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( 3553, 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( 3553, 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\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.geometry.copy( source.geometry );\n\t\tthis.material.copy( source.material );\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 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 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\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 = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = 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\tsetTimeout( 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\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( 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.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( 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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( 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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( 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 bhouston / http://clara.io/\n */\n\nfunction AnimationLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( AnimationLoader.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.setPath( scope.path );\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, onLoad ) {\n\n\t\tvar animations = [];\n\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\tvar clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\tonLoad( animations );\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 * 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\t\tloader.setPath( this.path );\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 ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\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 = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\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\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 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.itemError( url );\n\t\t\tscope.manager.itemEnd( 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 !== undefined ) ? left : - 1;\n\tthis.right = ( right !== undefined ) ? right : 1;\n\tthis.top = ( top !== undefined ) ? top : 1;\n\tthis.bottom = ( bottom !== undefined ) ? bottom : - 1;\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 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.setPath( scope.path );\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 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\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\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 */\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.setPath( scope.path );\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\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\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 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.resourcePath = '';\n\n}\n\nObject.assign( ObjectLoader.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\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( this.path );\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\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 ( 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.resourcePath ).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 cache = {}; // MultiMaterial\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\tvar material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\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\t\t\t\t\tcache[ data.uuid ] = materials[ data.uuid ];\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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( 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.resourcePath + 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.resourcePath + 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.itemError( url );\n\t\t\tscope.manager.itemEnd( 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.setPath( this.path );\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\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\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, options ) {\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\toptions = 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 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 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\tthis.timeDelta = 0;\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\t\tvar clock = new Clock();\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.timeDelta = clock.getDelta();\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\t// code path for Chrome (see #14393)\n\n\t\t\t\tvar endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\t\tlistener.positionX.linearRampToValueAtTime( position.x, endTime );\n\t\t\t\tlistener.positionY.linearRampToValueAtTime( position.y, endTime );\n\t\t\t\tlistener.positionZ.linearRampToValueAtTime( position.z, endTime );\n\t\t\t\tlistener.forwardX.linearRampToValueAtTime( orientation.x, endTime );\n\t\t\t\tlistener.forwardY.linearRampToValueAtTime( orientation.y, endTime );\n\t\t\t\tlistener.forwardZ.linearRampToValueAtTime( orientation.z, endTime );\n\t\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\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.listener = listener;\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\tif ( panner.positionX ) {\n\n\t\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\t\tvar endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\t\tpanner.positionX.linearRampToValueAtTime( position.x, endTime );\n\t\t\t\tpanner.positionY.linearRampToValueAtTime( position.y, endTime );\n\t\t\t\tpanner.positionZ.linearRampToValueAtTime( position.z, endTime );\n\t\t\t\tpanner.orientationX.linearRampToValueAtTime( orientation.x, endTime );\n\t\t\t\tpanner.orientationY.linearRampToValueAtTime( orientation.y, endTime );\n\t\t\t\tpanner.orientationZ.linearRampToValueAtTime( orientation.z, endTime );\n\n\t\t\t} else {\n\n\t\t\t\tpanner.setPosition( position.x, position.y, position.z );\n\t\t\t\tpanner.setOrientation( orientation.x, orientation.y, orientation.z );\n\n\t\t\t}\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 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.IcosahedronBufferGeometry( 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\nBoxHelper.prototype.copy = function ( source ) {\n\n\tLineSegments.prototype.copy.call( this, source );\n\n\tthis.object = source.object;\n\n\treturn this;\n\n};\n\nBoxHelper.prototype.clone = function () {\n\n\treturn new this.constructor().copy( 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 ( dir === undefined ) dir = new THREE.Vector3( 0, 0, 1 );\n\tif ( origin === undefined ) origin = new THREE.Vector3( 0, 0, 0 );\n\tif ( length === undefined ) length = 1;\n\tif ( color === undefined ) color = 0xffff00;\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\nArrowHelper.prototype.copy = function ( source ) {\n\n\tObject3D.prototype.copy.call( this, source, false );\n\n\tthis.line.copy( source.line );\n\tthis.cone.copy( source.cone );\n\n\treturn this;\n\n};\n\nArrowHelper.prototype.clone = function () {\n\n\treturn new this.constructor().copy( this );\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\nObject.assign( ObjectLoader.prototype, {\n\n\tsetTexturePath: function ( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .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\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\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 removed' );\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, AnimationLoader, 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","import { Object3D, ObjectLoader, Box3, BoxGeometry, MeshStandardMaterial, Mesh } from 'three';\n\n/**\n * Wraps all model-related functionality\n * @class RevitModel\n */\nclass Model {\n /**\n * Creates an instance of RevitModel.\n * @memberof RevitModel\n */\n constructor(object3D) {\n this.object = object3D;\n this.pivot = new Object3D();\n this.pivot.add(this.object);\n // Compute bounding box for geometry-related operations\n // and bounding sphere for lights\n this.getBoundingFigures();\n }\n\n /**\n * Gets _boundingSphere value\n */\n get boundingSphere() {\n return this._boundingSphere;\n }\n\n /**\n * Sets _boundingSphere value\n */\n set boundingSphere(boundingSphere) {\n this._boundingSphere = boundingSphere;\n }\n\n /**\n * Gets _boundingBox value\n */\n get boundingBox() {\n return this._boundingBox;\n }\n\n /**\n * Sets _boundingBox value\n */\n set boundingBox(boundingBox) {\n this._boundingBox = boundingBox;\n }\n\n static load(scene) {\n if (scene && scene.object) {\n this.loader = this.loader || new ObjectLoader(); // a loader for loading a JSON resource\n return this.loader.parse(scene);\n }\n\n const boxSize = 250;\n var geometry = new BoxGeometry(boxSize, boxSize - 1, boxSize - 1);\n var material = new MeshStandardMaterial({ color: 0xb22222 });\n var cube = new Mesh(geometry, material);\n cube.castShadow = true; //default is false\n cube.receiveShadow = true; //default\n\n cube.traverse((geo) => {\n if (!(geo instanceof Mesh))\n return false;\n geo.geometry.translate(-boxSize / 2, boxSize / 2, -boxSize / 2);\n return true;\n });\n\n return cube;\n }\n\n /**\n * Loops over the children of the THREE scene, merge them into a mesh,\n * and compute a bounding sphere for the scene\n * @memberof RevitModel\n */\n getBoundingFigures() {\n this.boundingBox = new Box3().setFromObject(this.object);\n this.boundingSphere = new Box3().setFromObject(this.object).getBoundingSphere(this.boundingSphere);\n this.geometry = null;\n }\n}\n\nexport { Model as default };\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { DirectionalLight, AmbientLight, HemisphereLight, SpotLight } from 'three';\n\nclass Lights {\n\n constructor(boundingSphere, lightColorDark, lightColorNeutral, lightColorBright, lightOpacity) {\n this.boundingSphere = boundingSphere;\n this.lightColorDark = lightColorDark || '#303030';\n this.lightColorNeutral = lightColorNeutral || '#606060';\n this.lightColorBright = lightColorBright || '#909090';\n this.lightOpacity = lightOpacity || 0.75;\n }\n\n createLights() {\n var offset = this.boundingSphere.radius * 6; // get the radius of the bounding sphere for placing lights at certain distance from the object\n var center = this.boundingSphere.center; // get the center of the bounding sphere for pointing lights at it\n\n // the sun as directional light\n this.sunLight = new DirectionalLight(this.lightColorDark);\n this.sunLight.name = \"The sun :)\";\n this.sunLight.position.set(center.x + offset, center.y + offset, -center.z - offset);\n this.sunLight.position.multiplyScalar(50);\n this.sunLight.target.position.set(center.x, center.y, center.z);\n // create a global ambient light object\n this.ambientLight = new AmbientLight(this.lightColorDark);\n this.ambientLight.name = \"Mild ambient light\";\n // create a hemisphere light object\n this.hemisphereLight = new HemisphereLight(this.lightColorDark, this.lightColorBright, this.lightOpacity);\n this.hemisphereLight.name = \"Mild hemisphere light\";\n this.hemisphereLight.position.set(center.x + offset, center.y + offset, center.z + offset);\n let spotLight1 = new SpotLight(this.lightColorBright, this.lightOpacity);\n spotLight1.position.set(-center.x - offset / 2, center.y + offset / 1.5, -center.z - offset / 2);\n spotLight1.target.position.set(center.x, center.y, center.z);\n let spotLight2 = new SpotLight(this.lightColorNeutral, this.lightOpacity);\n spotLight2.position.set(center.x + offset / 2, center.y + offset / 1.5, -center.z - offset / 2);\n spotLight2.target.position.set(center.x, center.y, center.z);\n // create 2 spotlights\n this.spotLights = [spotLight1, spotLight2];\n }\n\n applyLights(scene, privot) {\n this.createLights();\n\n if (this.sunLight instanceof DirectionalLight)\n scene.add(this.sunLight);\n\n if (this.ambientLight instanceof AmbientLight)\n scene.add(this.ambientLight);\n\n if (this.hemisphereLight instanceof HemisphereLight)\n scene.add(this.hemisphereLight);\n\n if (this.spotLights !== null && typeof this.spotLights === 'object' && this.spotLights.constructor === Array) {\n this.spotLights.forEach(spotLight => {\n privot.add(spotLight);\n });\n }\n }\n}\n\nexport { Lights as default };\n","/**\n * Web viewer option class, sets default options\n */\nclass WebViewerOptions {\n /**\n *\n * @param background Body background color\n * @param originToCenter Move scene origin to model center (calculated via bounding sphere)\n * @param rotation The speed of the model rotation, can be positive or negative, set to 0.0 to disable\n */\n constructor(background = \"transparent\", originToCenter = false, rotation = 0.0) {\n this.background = background;\n this.rotation = rotation;\n this.originToCenter = originToCenter;\n }\n}\n\nexport { WebViewerOptions as default };\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('three')) :\n typeof define === 'function' && define.amd ? define(['three'], factory) :\n (global.orbitControls = factory(global.three));\n}(this, (function (three) { 'use strict';\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n }\n\n /**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n\n var OrbitControls =\n /*#__PURE__*/\n function (_EventDispatcher) {\n _inherits(OrbitControls, _EventDispatcher);\n\n function OrbitControls(object, domElement) {\n var _this;\n\n _classCallCheck(this, OrbitControls);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(OrbitControls).call(this));\n _this.object = object;\n _this.domElement = domElement !== undefined ? domElement : document; // Set to false to disable this control\n\n _this.enabled = true; // \"target\" sets the location of focus, where the object orbits around\n\n _this.target = new three.Vector3(); // How far you can dolly in and out ( PerspectiveCamera only )\n\n _this.minDistance = 0;\n _this.maxDistance = Infinity; // How far you can zoom in and out ( OrthographicCamera only )\n\n _this.minZoom = 0;\n _this.maxZoom = Infinity; // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n\n _this.minPolarAngle = 0; // radians\n\n _this.maxPolarAngle = Math.PI; // radians\n // How far you can orbit horizontally, upper and lower limits.\n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\n _this.minAzimuthAngle = -Infinity; // radians\n\n _this.maxAzimuthAngle = Infinity; // radians\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n\n _this.enableDamping = false;\n _this.dampingFactor = 0.25; // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n\n _this.enableZoom = true;\n _this.zoomSpeed = 1.0; // Set to false to disable rotating\n\n _this.enableRotate = true;\n _this.rotateSpeed = 1.0; // Set to false to disable panning\n\n _this.enablePan = true;\n _this.keyPanSpeed = 7.0; // pixels moved per arrow key push\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n\n _this.autoRotate = false;\n _this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n // Set to false to disable use of the keys\n\n _this.enableKeys = true; // The four arrow keys\n\n _this.keys = {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n BOTTOM: 40\n }; // Mouse buttons\n\n _this.mouseButtons = {\n ORBIT: three.MOUSE.LEFT,\n ZOOM: three.MOUSE.MIDDLE,\n PAN: three.MOUSE.RIGHT\n }; // for reset\n\n _this.target0 = _this.target.clone();\n _this.position0 = _this.object.position.clone();\n _this.zoom0 = _this.object.zoom; //\n // public methods\n //\n\n _this.getPolarAngle = function () {\n return spherical.phi;\n };\n\n _this.getAzimuthalAngle = function () {\n return spherical.theta;\n };\n\n _this.reset = function () {\n scope.target.copy(scope.target0);\n scope.object.position.copy(scope.position0);\n scope.object.zoom = scope.zoom0;\n scope.object.updateProjectionMatrix();\n scope.dispatchEvent(changeEvent);\n scope.update();\n state = STATE.NONE;\n }; // this method is exposed, but perhaps it would be better if we can make it private...\n\n\n _this.update = function () {\n var offset = new three.Vector3(); // so camera.up is the orbit axis\n\n var quat = new three.Quaternion().setFromUnitVectors(object.up, new three.Vector3(0, 1, 0));\n var quatInverse = quat.clone().inverse();\n var lastPosition = new three.Vector3();\n var lastQuaternion = new three.Quaternion();\n return function update() {\n var position = scope.object.position;\n offset.copy(position).sub(scope.target); // rotate offset to \"y-axis-is-up\" space\n\n offset.applyQuaternion(quat); // angle from z-axis around y-axis\n\n spherical.setFromVector3(offset);\n\n if (scope.autoRotate && state === STATE.NONE) {\n rotateLeft(getAutoRotationAngle());\n }\n\n spherical.theta += sphericalDelta.theta;\n spherical.phi += sphericalDelta.phi; // restrict theta to be between desired limits\n\n spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta)); // restrict phi to be between desired limits\n\n spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n spherical.makeSafe();\n spherical.radius *= scale; // restrict radius to be between desired limits\n\n spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); // move target to panned location\n\n scope.target.add(panOffset);\n offset.setFromSpherical(spherical); // rotate offset back to \"camera-up-vector-is-up\" space\n\n offset.applyQuaternion(quatInverse);\n position.copy(scope.target).add(offset);\n scope.object.lookAt(scope.target);\n\n if (scope.enableDamping === true) {\n sphericalDelta.theta *= 1 - scope.dampingFactor;\n sphericalDelta.phi *= 1 - scope.dampingFactor;\n } else {\n sphericalDelta.set(0, 0, 0);\n }\n\n scale = 1;\n panOffset.set(0, 0, 0); // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n scope.dispatchEvent(changeEvent);\n lastPosition.copy(scope.object.position);\n lastQuaternion.copy(scope.object.quaternion);\n zoomChanged = false;\n return true;\n }\n\n return false;\n };\n }();\n\n _this.dispose = function () {\n scope.domElement.removeEventListener('contextmenu', onContextMenu, false);\n scope.domElement.removeEventListener('mousedown', onMouseDown, false);\n scope.domElement.removeEventListener('wheel', onMouseWheel, false);\n scope.domElement.removeEventListener('touchstart', onTouchStart, false);\n scope.domElement.removeEventListener('touchend', onTouchEnd, false);\n scope.domElement.removeEventListener('touchmove', onTouchMove, false);\n document.removeEventListener('mousemove', onMouseMove, false);\n document.removeEventListener('mouseup', onMouseUp, false);\n window.removeEventListener('keydown', onKeyDown, false); // scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n }; //\n // internals\n //\n\n\n var scope = _assertThisInitialized(_assertThisInitialized(_this));\n\n var changeEvent = {\n type: 'change'\n };\n var startEvent = {\n type: 'start'\n };\n var endEvent = {\n type: 'end'\n };\n var STATE = {\n NONE: -1,\n ROTATE: 0,\n DOLLY: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_DOLLY: 4,\n TOUCH_PAN: 5\n };\n var state = STATE.NONE;\n var EPS = 0.000001; // current position in spherical coordinates\n\n var spherical = new three.Spherical();\n var sphericalDelta = new three.Spherical();\n var scale = 1;\n var panOffset = new three.Vector3();\n var zoomChanged = false;\n var rotateStart = new three.Vector2();\n var rotateEnd = new three.Vector2();\n var rotateDelta = new three.Vector2();\n var panStart = new three.Vector2();\n var panEnd = new three.Vector2();\n var panDelta = new three.Vector2();\n var dollyStart = new three.Vector2();\n var dollyEnd = new three.Vector2();\n var dollyDelta = new three.Vector2();\n\n function getAutoRotationAngle() {\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n }\n\n function getZoomScale() {\n return Math.pow(0.95, scope.zoomSpeed);\n }\n\n function rotateLeft(angle) {\n sphericalDelta.theta -= angle;\n }\n\n function rotateUp(angle) {\n sphericalDelta.phi -= angle;\n }\n\n var panLeft = function () {\n var v = new three.Vector3();\n return function panLeft(distance, objectMatrix) {\n v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\n v.multiplyScalar(-distance);\n panOffset.add(v);\n };\n }();\n\n var panUp = function () {\n var v = new three.Vector3();\n return function panUp(distance, objectMatrix) {\n v.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n\n v.multiplyScalar(distance);\n panOffset.add(v);\n };\n }(); // deltaX and deltaY are in pixels; right and down are positive\n\n\n var pan = function () {\n var offset = new three.Vector3();\n return function pan(deltaX, deltaY) {\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n if (Object.getPrototypeOf(scope.object).isPerspectiveCamera) {\n // perspective\n var position = scope.object.position;\n offset.copy(position).sub(scope.target);\n var targetDistance = offset.length(); // half of the fov is center to top of screen\n\n targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0); // we actually don't use screenWidth, since perspective camera is fixed to screen height\n\n panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n } else if (Object.getPrototypeOf(scope.object).isOrthographicCamera) {\n // orthographic\n panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n } else {\n // camera neither orthographic nor perspective\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.');\n scope.enablePan = false;\n }\n };\n }();\n\n function dollyIn(dollyScale) {\n if (Object.getPrototypeOf(scope.object).isPerspectiveCamera) {\n scale /= dollyScale;\n } else if (Object.getPrototypeOf(scope.object).isOrthographicCamera) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n } else {\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\n scope.enableZoom = false;\n }\n }\n\n function dollyOut(dollyScale) {\n if (Object.getPrototypeOf(scope.object).isPerspectiveCamera) {\n scale *= dollyScale;\n } else if (Object.getPrototypeOf(scope.object).isOrthographicCamera) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n } else {\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\n scope.enableZoom = false;\n }\n } //\n // event callbacks - update the object state\n //\n\n\n function handleMouseDownRotate(event) {\n // console.log( 'handleMouseDownRotate' );\n rotateStart.set(event.clientX, event.clientY);\n }\n\n function handleMouseDownDolly(event) {\n // console.log( 'handleMouseDownDolly' );\n dollyStart.set(event.clientX, event.clientY);\n }\n\n function handleMouseDownPan(event) {\n // console.log( 'handleMouseDownPan' );\n panStart.set(event.clientX, event.clientY);\n }\n\n function handleMouseMoveRotate(event) {\n // console.log( 'handleMouseMoveRotate' );\n rotateEnd.set(event.clientX, event.clientY);\n rotateDelta.subVectors(rotateEnd, rotateStart);\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement; // rotating across whole screen goes 360 degrees around\n\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed); // rotating up and down along whole screen attempts to go 360, but limited to 180\n\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n rotateStart.copy(rotateEnd);\n scope.update();\n }\n\n function handleMouseMoveDolly(event) {\n // console.log( 'handleMouseMoveDolly' );\n dollyEnd.set(event.clientX, event.clientY);\n dollyDelta.subVectors(dollyEnd, dollyStart);\n\n if (dollyDelta.y > 0) {\n dollyIn(getZoomScale());\n } else if (dollyDelta.y < 0) {\n dollyOut(getZoomScale());\n }\n\n dollyStart.copy(dollyEnd);\n scope.update();\n }\n\n function handleMouseMovePan(event) {\n // console.log( 'handleMouseMovePan' );\n panEnd.set(event.clientX, event.clientY);\n panDelta.subVectors(panEnd, panStart);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n scope.update();\n }\n\n function handleMouseWheel(event) {\n // console.log( 'handleMouseWheel' );\n if (event.deltaY < 0) {\n dollyOut(getZoomScale());\n } else if (event.deltaY > 0) {\n dollyIn(getZoomScale());\n }\n\n scope.update();\n }\n\n function handleKeyDown(event) {\n // console.log( 'handleKeyDown' );\n switch (event.keyCode) {\n case scope.keys.UP:\n pan(0, scope.keyPanSpeed);\n scope.update();\n break;\n\n case scope.keys.BOTTOM:\n pan(0, -scope.keyPanSpeed);\n scope.update();\n break;\n\n case scope.keys.LEFT:\n pan(scope.keyPanSpeed, 0);\n scope.update();\n break;\n\n case scope.keys.RIGHT:\n pan(-scope.keyPanSpeed, 0);\n scope.update();\n break;\n }\n }\n\n function handleTouchStartRotate(event) {\n // console.log( 'handleTouchStartRotate' );\n rotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n }\n\n function handleTouchStartDolly(event) {\n // console.log( 'handleTouchStartDolly' );\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n var distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n }\n\n function handleTouchStartPan(event) {\n // console.log( 'handleTouchStartPan' );\n panStart.set(event.touches[0].pageX, event.touches[0].pageY);\n }\n\n function handleTouchMoveRotate(event) {\n // console.log( 'handleTouchMoveRotate' );\n rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n rotateDelta.subVectors(rotateEnd, rotateStart);\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement; // rotating across whole screen goes 360 degrees around\n\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed); // rotating up and down along whole screen attempts to go 360, but limited to 180\n\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n rotateStart.copy(rotateEnd);\n scope.update();\n }\n\n function handleTouchMoveDolly(event) {\n // console.log( 'handleTouchMoveDolly' );\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n var distance = Math.sqrt(dx * dx + dy * dy);\n dollyEnd.set(0, distance);\n dollyDelta.subVectors(dollyEnd, dollyStart);\n\n if (dollyDelta.y > 0) {\n dollyOut(getZoomScale());\n } else if (dollyDelta.y < 0) {\n dollyIn(getZoomScale());\n }\n\n dollyStart.copy(dollyEnd);\n scope.update();\n }\n\n function handleTouchMovePan(event) {\n // console.log( 'handleTouchMovePan' );\n panEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n panDelta.subVectors(panEnd, panStart);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n scope.update();\n } //\n // event handlers - FSM: listen for events and reset state\n //\n\n\n function onMouseDown(event) {\n if (scope.enabled === false) return;\n event.preventDefault();\n\n if (event.button === scope.mouseButtons.ORBIT) {\n if (scope.enableRotate === false) return;\n handleMouseDownRotate(event);\n state = STATE.ROTATE;\n } else if (event.button === scope.mouseButtons.ZOOM) {\n if (scope.enableZoom === false) return;\n handleMouseDownDolly(event);\n state = STATE.DOLLY;\n } else if (event.button === scope.mouseButtons.PAN) {\n if (scope.enablePan === false) return;\n handleMouseDownPan(event);\n state = STATE.PAN;\n }\n\n if (state !== STATE.NONE) {\n document.addEventListener('mousemove', onMouseMove, false);\n document.addEventListener('mouseup', onMouseUp, false);\n scope.dispatchEvent(startEvent);\n }\n }\n\n function onMouseMove(event) {\n if (scope.enabled === false) return;\n event.preventDefault();\n\n if (state === STATE.ROTATE) {\n if (scope.enableRotate === false) return;\n handleMouseMoveRotate(event);\n } else if (state === STATE.DOLLY) {\n if (scope.enableZoom === false) return;\n handleMouseMoveDolly(event);\n } else if (state === STATE.PAN) {\n if (scope.enablePan === false) return;\n handleMouseMovePan(event);\n }\n }\n\n function onMouseUp(event) {\n if (scope.enabled === false) return;\n document.removeEventListener('mousemove', onMouseMove, false);\n document.removeEventListener('mouseup', onMouseUp, false);\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n\n function onMouseWheel(event) {\n if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) return;\n event.preventDefault();\n event.stopPropagation();\n handleMouseWheel(event);\n scope.dispatchEvent(startEvent); // not sure why these are here...\n\n scope.dispatchEvent(endEvent);\n }\n\n function onKeyDown(event) {\n if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) return;\n handleKeyDown(event);\n }\n\n function onTouchStart(event) {\n if (scope.enabled === false) return;\n\n switch (event.touches.length) {\n case 1:\n // one-fingered touch: rotate\n if (scope.enableRotate === false) return;\n handleTouchStartRotate(event);\n state = STATE.TOUCH_ROTATE;\n break;\n\n case 2:\n // two-fingered touch: dolly\n if (scope.enableZoom === false) return;\n handleTouchStartDolly(event);\n state = STATE.TOUCH_DOLLY;\n break;\n\n case 3:\n // three-fingered touch: pan\n if (scope.enablePan === false) return;\n handleTouchStartPan(event);\n state = STATE.TOUCH_PAN;\n break;\n\n default:\n state = STATE.NONE;\n }\n\n if (state !== STATE.NONE) {\n scope.dispatchEvent(startEvent);\n }\n }\n\n function onTouchMove(event) {\n if (scope.enabled === false) return;\n event.preventDefault();\n event.stopPropagation();\n\n switch (event.touches.length) {\n case 1:\n // one-fingered touch: rotate\n if (scope.enableRotate === false) return;\n if (state !== STATE.TOUCH_ROTATE) return; // is this needed?...\n\n handleTouchMoveRotate(event);\n break;\n\n case 2:\n // two-fingered touch: dolly\n if (scope.enableZoom === false) return;\n if (state !== STATE.TOUCH_DOLLY) return; // is this needed?...\n\n handleTouchMoveDolly(event);\n break;\n\n case 3:\n // three-fingered touch: pan\n if (scope.enablePan === false) return;\n if (state !== STATE.TOUCH_PAN) return; // is this needed?...\n\n handleTouchMovePan(event);\n break;\n\n default:\n state = STATE.NONE;\n }\n }\n\n function onTouchEnd(event) {\n if (scope.enabled === false) return;\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n\n function onContextMenu(event) {\n event.preventDefault();\n } //\n\n\n scope.domElement.addEventListener('contextmenu', onContextMenu, false);\n scope.domElement.addEventListener('mousedown', onMouseDown, false);\n scope.domElement.addEventListener('wheel', onMouseWheel, false);\n scope.domElement.addEventListener('touchstart', onTouchStart, false);\n scope.domElement.addEventListener('touchend', onTouchEnd, false);\n scope.domElement.addEventListener('touchmove', onTouchMove, false);\n window.addEventListener('keydown', onKeyDown, false); // force an update at start\n\n _this.update();\n\n return _this;\n }\n\n _createClass(OrbitControls, [{\n key: \"center\",\n get: function get() {\n console.warn('OrbitControls: .center has been renamed to .target');\n return this.target;\n } // backward compatibility\n\n }, {\n key: \"noZoom\",\n get: function get() {\n console.warn('OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.');\n return !this.enableZoom;\n },\n set: function set(value) {\n console.warn('OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.');\n this.enableZoom = !value;\n }\n }, {\n key: \"noRotate\",\n get: function get() {\n console.warn('OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.');\n return !this.enableRotate;\n },\n set: function set(value) {\n console.warn('OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.');\n this.enableRotate = !value;\n }\n }, {\n key: \"noPan\",\n get: function get() {\n console.warn('OrbitControls: .noPan has been deprecated. Use .enablePan instead.');\n return !this.enablePan;\n },\n set: function set(value) {\n console.warn('OrbitControls: .noPan has been deprecated. Use .enablePan instead.');\n this.enablePan = !value;\n }\n }, {\n key: \"noKeys\",\n get: function get() {\n console.warn('OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.');\n return !this.enableKeys;\n },\n set: function set(value) {\n console.warn('OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.');\n this.enableKeys = !value;\n }\n }, {\n key: \"staticMoving\",\n get: function get() {\n console.warn('OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.');\n return !this.enableDamping;\n },\n set: function set(value) {\n console.warn('OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.');\n this.enableDamping = !value;\n }\n }, {\n key: \"dynamicDampingFactor\",\n get: function get() {\n console.warn('OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.');\n return this.dampingFactor;\n },\n set: function set(value) {\n console.warn('OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.');\n this.dampingFactor = value;\n }\n }]);\n\n return OrbitControls;\n }(three.EventDispatcher);\n\n return OrbitControls;\n\n})));\n","import Model from './Model';\nimport Lights from './Lights';\nimport WebViewerOptions from './WebViewerOptions';\nimport { Scene, PerspectiveCamera, WebGLRenderer, Vector3, Object3D } from 'three';\nimport OrbitControls from 'orbit-controls-es6';\n\n/**\n * The main Revit Web Viewer class\n * @class RevitWebViewer\n */\nclass WebViewer {\n /**\n * Creates an instance of RevitWebViewer.\n * @memberof RevitWebViewer\n */\n constructor(options) {\n /**\n * Render the scene via three.js renderer\n * @memberof WebViewer\n */\n\n this.options = options || new WebViewerOptions(false);\n\n this.render = () => {\n this.orbitControls.update();\n requestAnimationFrame(this.render);\n\n if (this.resizeRendererToDisplaySize(this.renderer)) {\n this.resize();\n }\n\n this.renderer.render(this.scene, this.orbitControls.object);\n if (this.model && this.model.pivot && this.model.pivot.rotation && 0.0 !== this.options.rotation) {\n this.model.pivot.rotation.y -= this.options.rotation;\n }\n };\n this.scene = new Scene();\n this.camera = new PerspectiveCamera(\n 25, // fov — Camera frustum vertical field of view.\n window.innerWidth / window.innerHeight, // spect — Camera frustum aspect ratio.\n 10, // near — Camera frustum near plane.\n 1000000 // far — Camera frustum far plane.\n );\n this.renderer = new WebGLRenderer(// the WebGL renderer displays your beautifully crafted scenes using WebGL.\n {\n alpha: true,\n antialias: true,\n preserveDrawingBuffer: true\n });\n this.renderer.setPixelRatio(window.devicePixelRatio);\n this.model = null;\n this.lights = null;\n }\n\n resizeRendererToDisplaySize(renderer) {\n const canvas = renderer.domElement;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const needResize = canvas.width !== width || canvas.height !== height;\n if (needResize) {\n renderer.setSize(width, height, false);\n }\n return needResize;\n }\n\n init(element, callback) {\n this.wrapper = element;\n // tweaking the renderer object\n this.renderer.setClearColor(0x000000, 0.0);\n\n this.renderer.shadowMap.enabled = false;\n // tweaking camera object\n this.camera.position.set(-window.innerHeight, window.innerHeight / 6, -window.innerHeight);\n // set up orbit controls object\n this.orbitControls = new OrbitControls(this.camera, this.renderer.domElement);\n this.orbitControls.enableZoom = true;\n this.orbitControls.enableKeys = false;\n this.orbitControls.zoomSpeed = 1.0;\n this.orbitControls.enablePan = true; // Set to false to disable panning (ie vertical and horizontal translations)\n // tweak orbit controls in order to uncover the \"top edge\" of the object\n this.orbitControls.target.set(0, -window.innerHeight / 2, 0);\n this.renderer.setSize(this.wrapper.offsetWidth, this.wrapper.offsetHeight);\n this.wrapper.appendChild(this.renderer.domElement);\n // Set background color of the body element if needed\n if (this.options.background) {\n document.getElementsByTagName(\"body\")[0].style.background = this.options.background;\n }\n this.bindEvents();\n this.render();\n\n if (callback) {\n console.log('Calling callback function');\n callback();\n this.resize();\n }\n }\n\n /**\n * Tweak orbit controls and camepra position\n * @memberof WebViewer\n */\n tweakCameraAndControls() {\n if (this.model === null)\n return;\n\n // Re-compute bounds after moving the object\n this.model.getBoundingFigures();\n\n // point the camera at the center of the sphere\n this.orbitControls.target = this.model.boundingSphere.center;\n let zAxis = new Vector3(0, 0, 1);\n let direction = zAxis.applyQuaternion(this.orbitControls.object.quaternion);\n let radius = this.model.boundingSphere.radius;\n let offset = radius / Math.tan(Math.PI / 180.0 * this.orbitControls.object.fov * 0.5);\n direction.multiplyScalar(offset);\n let newCameraPosition = new Vector3();\n newCameraPosition.addVectors(this.orbitControls.target, direction);\n this.camera.position.set(newCameraPosition.x, newCameraPosition.y, newCameraPosition.z);\n this.orbitControls.object.updateProjectionMatrix();\n this.camera.updateProjectionMatrix();\n }\n\n /**\n * Bind global document / window events\n * @memberof WebViewer\n */\n bindEvents() {\n // window resize event\n window.addEventListener('resize', () => {\n if (this.resizeRendererToDisplaySize(this.renderer)) {\n this.resize();\n }\n\n }, false);\n }\n\n resize() {\n const canvas = this.renderer.domElement;\n this.camera.aspect = canvas.clientWidth / canvas.clientHeight;\n this.camera.updateProjectionMatrix();\n this.orbitControls.object.aspect = canvas.clientWidth / canvas.clientHeight;\n this.orbitControls.object.updateProjectionMatrix();\n }\n\n unCenterEmptyBoxes() {\n if (this.model === null)\n return;\n\n this.model.object.traverse((child) => {\n if (!(child.type === 'Mesh' && 'BoxGeometry' === child.geometry.type))\n return false;\n\n var width = child.geometry.parameters.width;\n var height = child.geometry.parameters.height;\n var depth = child.geometry.parameters.depth;\n child.geometry.translate(-(width / 2), height / 2, -(depth / 2));\n return true;\n });\n }\n\n loadScene(scene, callback) {\n\n if (this.scene === null)\n return;\n\n try {\n let object3D = Model.load(scene);\n if (object3D === null) {\n this.scene = new Scene();\n this.model = new Model(new Object3D());\n console.err(\"Object3D is null\");\n return;\n }\n\n let modelIsEmpty = this.model === null || typeof this.model.object === 'undefined';\n if (modelIsEmpty) {\n this.scene = new Scene();\n this.model = new Model(object3D);\n this.lights = new Lights(this.model.boundingSphere);\n this.lights.applyLights(this.scene, this.model.pivot);\n this.scene.add(this.model.pivot); // add( this.model.object );\n } else {\n this.scene.remove(this.model.pivot);\n this.model = new Model(object3D);\n this.scene.add(this.model.pivot); // add( this.model.object );\n }\n\n this.unCenterEmptyBoxes(); // HACK: from Three.js docs \"On creation, the cuboid is centred on the origin...\"\n this.tweakCameraAndControls();\n\n if (this.sceneReady instanceof Function)\n this.sceneReady(this);\n\n if (callback) {\n callback();\n }\n\n this.resize();\n } catch(err) {\n // TODO handle the error\n console.log(err);\n }\n }\n}\n\nexport { WebViewer as default };\n","import { polyfill } from 'es6-promise'; polyfill();\nimport WebViewer from './WebViewer';\n\nexport default class RfaViewer {\n\n constructor() {\n\n }\n\n Initialize = (canvasWrapper, scene) => {\n canvasWrapper.Viewer = canvasWrapper.Viewer || new WebViewer();\n canvasWrapper.Viewer.init(canvasWrapper, function () {\n console.log(\"Finished initializing the RFA Viewer\");\n });\n\n canvasWrapper.Viewer.loadScene(scene, function () {\n if (scene && scene.object)\n console.log(\"Loaded the following scene: \" + scene.object.name);\n });\n }\n\n IsReady = (canvasWrapper) => {\n return canvasWrapper && canvasWrapper.getElementsByTagName(\"canvas\").length;\n }\n\n LoadScene = (canvasWrapper, scene) => {\n canvasWrapper.Viewer = canvasWrapper.Viewer || new WebViewer();\n\n if (!this.IsReady(canvasWrapper)) {\n console.log(\"RFA Viewer is not ready, re-initializing it.\");\n canvasWrapper.Viewer.init(canvasWrapper, function () { this.loadScene(canvasWrapper, scene); });\n return;\n }\n\n canvasWrapper.Viewer.loadScene(scene, function () {\n console.log(\"A new scene has been just loaded into RFA Viewer\");\n });\n }\n}\n\n\n","// Import our styles\nimport './scss/index.scss';\n\nimport RfaViewer from './js/index';\n\nwindow.RfaViewer = document.RfaViewer = Element.prototype.RfaViewer\n = window.RfaViewer || document.RfaViewer || Element.prototype.RfaViewer || new RfaViewer();\n"]}