{"version":3,"sources":["node_modules\\meta-client\\config.js","node_modules\\three\\build\\three.module.js","node_modules\\meta-client\\lib\\Utilities\\log.js","node_modules\\meta-client\\lib\\Utilities\\isMobile.js","node_modules\\meta-client\\lib\\Space\\Device\\Desktop\\Controls\\PointerLockControls.js","node_modules\\meta-client\\lib\\Space\\Device\\Desktop\\DesktopDeviceController.js","node_modules\\meta-client\\lib\\Space\\Device\\Mobile\\MobileDeviceController.js","node_modules\\meta-client\\lib\\Space\\Device\\HeadMountedDisplay\\Controls\\ViveController.js","node_modules\\meta-client\\lib\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","node_modules\\meta-client\\lib\\Space\\Meta\\Graphics\\three\\examples\\js\\loaders\\GLTFLoader.js","node_modules\\meta-client\\lib\\Space\\Meta\\Existence\\Existence.js","node_modules\\oimo\\build\\oimo.module.js","node_modules\\meta-client\\lib\\Space\\Meta\\Meta.js","node_modules\\meta-client\\lib\\Space\\Meta\\Graphics\\Graphics.js","node_modules\\meta-client\\lib\\Space\\Meta\\Graphics\\Geometries\\Cube.js","node_modules\\meta-client\\lib\\Space\\Device\\HeadMountedDisplay\\HeadMountedDisplay.js","node_modules\\meta-client\\lib\\Space\\Device\\Device.js","node_modules\\meta-client\\lib\\Space\\Space.js","node_modules\\meta-client\\lib\\Space\\Meta\\Graphics\\Geometries\\Sphere.js","node_modules\\meta-client\\lib\\Space\\Meta\\Graphics\\Geometries\\Cylinder.js","node_modules\\meta-client\\lib\\Space\\Meta\\Graphics\\Geometries\\Plane.js","node_modules\\meta-client\\lib\\Space\\Meta\\Custom\\Ground.js","node_modules\\meta-client\\lib\\Space\\Meta\\Custom\\Grid.js","node_modules\\meta-client\\lib\\Space\\Meta\\Custom\\Brick.js","node_modules\\meta-client\\lib\\Space\\Meta\\Graphics\\Model\\Model.js","node_modules\\meta-client\\lib\\index.js","index.js"],"names":["version","log","space","color","device","headMountedDisplay","controllerModels","desktop","container","position","x","y","z","camera","globe","opacity","wireframe","transparency","acceleration","mobile","Number","EPSILON","undefined","Math","pow","isInteger","value","isFinite","floor","sign","Function","prototype","Object","defineProperty","get","toString","match","assign","target","TypeError","output","index","arguments","length","source","nextKey","hasOwnProperty","call","EventDispatcher","addEventListener","type","listener","_listeners","listeners","indexOf","push","hasEventListener","removeEventListener","listenerArray","splice","dispatchEvent","event","array","slice","i","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","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","t","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","LN2","floorPowerOfTwo","Vector2","defineProperties","set","isVector2","setScalar","scalar","setX","setY","setComponent","Error","getComponent","clone","constructor","copy","v","add","w","console","warn","addVectors","addScalar","s","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","e","elements","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","dot","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","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","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","dir","sqrSin","len","tDir","onChangeCallback","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","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","projectionMatrix","matrixWorld","unproject","transformDirection","cross","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","normal","angleTo","acos","dz","setFromSpherical","sinPhiRadius","phi","radius","setFromCylindrical","setFromMatrixPosition","setFromMatrixScale","Matrix3","isMatrix3","setFromMatrix4","g","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","rotate","translate","textureId","Texture","image","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","name","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","onUpdate","create","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","getDataURL","canvas","HTMLCanvasElement","document","createElementNS","width","height","context","getContext","ImageData","putImageData","drawImage","toDataURL","metadata","generator","wrap","images","url","Array","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","xax","xay","xaz","xbx","xby","xbz","yax","yay","yaz","ybx","yby","ybz","zax","zay","zaz","zbx","zby","zbz","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","lights_pars_maps","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","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","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_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","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","UniformsLib","diffuse","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","dashed","dashSize","totalSize","depth","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","DYNAMIC_DRAW","STATIC_DRAW","buffer","bindBuffer","bufferData","onUploadCallback","FLOAT","Float32Array","Float64Array","Uint16Array","UNSIGNED_SHORT","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","Int32Array","INT","Int8Array","BYTE","Uint8Array","UNSIGNED_BYTE","bytesPerElement","BYTES_PER_ELEMENT","updateBuffer","updateRange","bufferSubData","subarray","isInterleavedBufferAttribute","remove","deleteBuffer","delete","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","enumerable","modelViewMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","userData","isObject3D","onBeforeRender","onAfterRender","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","q1","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","isCamera","getObjectById","id","getObjectByProperty","getObjectByName","child","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverseVisible","traverseAncestors","force","geometries","materials","shapes","JSON","stringify","serialize","library","element","parameters","shape","material","uuids","extractFromCache","cache","values","key","recursive","parse","Camera","matrixWorldInverse","OrthographicCamera","zoom","view","updateProjectionMatrix","isOrthographicCamera","setViewOffset","fullWidth","fullHeight","enabled","offsetX","offsetY","clearViewOffset","zoomW","zoomH","scaleW","scaleH","Face3","materialIndex","vertexNormals","vertexColors","geometryId","Geometry","colors","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","vertex","face","jl","computeBoundingBox","obj","fromBufferGeometry","indices","positions","normals","uvs","uvs2","uv2","tempNormals","tempUVs","tempUVs2","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","isMesh","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","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","isPoints","isLine","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","overdraw","isMaterial","onBeforeCompile","setValues","newValue","currentValue","isRoot","emissiveIntensity","normalMapType","sizeAttenuation","linewidth","gapSize","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","srcPlanes","dstPlanes","MeshBasicMaterial","combine","isMeshBasicMaterial","ShaderMaterial","defines","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","isShaderMaterial","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","Line3","distanceSq","closestPointToPointParameter","startP","startEnd","clampToLine","startEnd2","startEnd_startP","Triangle","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i0","i1","i2","getArea","getMidpoint","getPlane","edgeList","projectedPoint","minDistance","Mesh","drawMode","updateMorphTargets","setDrawMode","morphTargetInfluences","morphTargetDictionary","ml","String","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","barycoord","intersectionPoint","intersectionPointWorld","uvIntersection","uv1","uv3","checkIntersection","raycaster","checkBufferGeometryIntersection","intersection","intersects","groupMaterial","faceIndex","fvA","fvB","fvC","isMultiMaterial","faceMaterial","morphInfluences","tl","influence","targets","uvs_f","WebGLBackground","renderer","state","objects","clearColor","clearAlpha","planeCamera","planeMesh","boxMesh","render","renderList","scene","forceClear","background","setClear","autoClear","clear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","renderBufferDirect","getClearColor","setClearColor","getClearAlpha","setClearAlpha","WebGLBufferRenderer","info","mode","setMode","drawArrays","renderInstances","extension","drawArraysInstancedANGLE","maxInstancedCount","WebGLCapabilities","maxAnisotropy","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getMaxPrecision","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","maxPrecision","logarithmicDepthBuffer","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","maxCubemapSize","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_ATTRIBS","maxVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","vertexTextures","floatFragmentTextures","floatVertexTextures","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","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","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER","getWireframeAttribute","geometryIndex","WebGLIndexedBufferRenderer","drawElements","drawElementsInstancedANGLE","WebGLInfo","calls","triangles","lines","instanceCount","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","LINE_LOOP","POINTS","reset","programs","autoReset","absNumericalSort","WebGLMorphtargets","influencesList","program","objectInfluences","influences","getUniforms","setValue","WebGLObjects","updateList","CubeTexture","emptyTexture","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","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","uniformObject","parseUniform","path","pathLength","lastIndex","matchEnd","idIsIndex","subscript","next","WebGLUniforms","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","setOptional","upload","seqWithValue","addLineNumbers","split","join","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMapping","toneMappingName","generateExtensions","rendererExtensions","chunks","envMapCubeUV","objectSpaceNormalMap","filter","filterEmptyLine","generateDefines","fetchAttributeLocations","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","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","envMapEncoding","emissiveMapEncoding","depthPacking","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","programLog","getProgramInfoLog","trim","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","prefix","deleteShader","cachedUniforms","cachedAttributes","getAttributes","destroy","deleteProgram","usedTimes","WebGLPrograms","capabilities","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","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","ambient","vector3","matrix42","setup","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","intensity","isAmbientLight","isDirectionalLight","bias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderState","lightsArray","shadowsArray","spritesArray","pushLight","pushShadow","shadowLight","pushSprite","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","BLEND","setTest","setScissorTest","faceCount","shadowCamera","vpWidth","vpHeight","pars","isSpotLightShadow","shadowMatrix","setRenderTarget","vpDimensions","renderObject","getDepthMaterial","lightPositionWorld","result","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","CanvasTexture","isCanvasTexture","WebGLSpriteRenderer","vertexBuffer","elementBuffer","spritePosition","spriteRotation","spriteScale","uvOffset","uvScale","fogType","fogDepth","fillStyle","fillRect","sprites","useProgram","initAttributes","enableAttribute","disableUnusedAttributes","CULL_FACE","vertexAttribPointer","activeTexture","TEXTURE0","oldFogType","sceneFogType","isFog","density","setBlending","setMask","WebGLState","utils","ColorBuffer","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","colorBuffer","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","compressedTextureFormats","currentProgram","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","VERSION","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","texImage2D","RGBA","emptyTextures","TEXTURE_2D","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","setFlipSided","setCullFace","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","vertexAttribDivisorANGLE","disableVertexAttribArray","getCompressedTextureFormats","formats","COMPRESSED_TEXTURE_FORMATS","blendEquationSeparate","FUNC_ADD","blendFuncSeparate","ONE","blendFunc","SRC_ALPHA","ZERO","ONE_MINUS_SRC_COLOR","ONE_MINUS_SRC_ALPHA","SRC_COLOR","convert","setMaterial","frontFaceCW","setPolygonOffset","frontFace","CW","CCW","cullFace","BACK","FRONT","FRONT_AND_BACK","setLineWidth","lineWidth","factor","POLYGON_OFFSET_FILL","SCISSOR_TEST","webglSlot","webglType","webglTexture","boundTexture","compressedTexImage2D","apply","WebGLTextures","_isWebGL2","WebGL2RenderingContext","_videoTextures","_canvas","clampToMaxSize","maxSize","makePowerOfTwo","HTMLImageElement","ImageBitmap","textureNeedsPowerOfTwo","textureNeedsGenerateMipmaps","generateMipmap","textureProperties","__maxMipLevel","LOG2E","filterFallback","LINEAR","onTextureDispose","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTarget","deallocateRenderTarget","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","slot","updateVideoTexture","__version","complete","uploadTexture","pixelStorei","UNPACK_FLIP_Y_WEBGL","isCompressed","isCompressedTexture","cubeImage","isPowerOfTwoImage","glFormat","glType","setTextureParameters","mipmap","setTextureCubeDynamic","textureType","TEXTURE_WRAP_S","TEXTURE_WRAP_T","CLAMP_TO_EDGE","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","isDepthTexture","internalFormat","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DEPTH_STENCIL","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthTexture","isCube","webglDepthTexture","setupDepthRenderbuffer","createRenderbuffer","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","WebGLUtils","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","HALF_FLOAT_OES","ALPHA","RGB","LUMINANCE","LUMINANCE_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","MIN_EXT","MAX_EXT","UNSIGNED_INT_24_8_WEBGL","Group","isGroup","PerspectiveCamera","fov","aspect","focus","filmGauge","filmOffset","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","skew","ArrayCamera","cameras","isArrayCamera","WebVRManager","frameData","poseTarget","controllers","standingMatrix","standingMatrixInverse","window","VRFrameData","onVRDisplayPresentChange","tempQuaternion","tempPosition","cameraL","bounds","cameraR","cameraVR","isPresenting","currentSize","currentPixelRatio","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","animation","isTriggerPressed","findGamepad","gamepads","navigator","getGamepads","gamepad","startsWith","updateControllers","controller","pose","hasPosition","orientation","buttonId","buttons","pressed","userHeight","getController","getDevice","setDevice","setPoseTarget","getCamera","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","poseObject","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","WebXRManager","session","frameOfRef","inputSources","setCompatibleXRDevice","onSessionEvent","inputSource","onSessionEnd","setFramebuffer","setSession","baseLayer","XRWebGLLayer","requestFrameOfReference","frameOfReferenceType","then","getInputSources","updateCamera","onAnimationFrameCallback","getDevicePose","views","getViewport","getViewMatrix","inputPose","getInputPose","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","spriteRenderer","initGLContext","vr","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","preventDefault","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReference","renderObjectImmediate","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","isMeshPhongMaterial","isMeshStandardMaterial","isMeshNormalMaterial","normalArray","nx","ny","nz","uvArray","colorArray","setProgram","geometryProgram","updateBuffers","rangeFactor","setupVertexAttributes","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","compile","isLight","initMaterial","projectObject","opaqueObjects","transparentObjects","overrideMaterial","renderObjects","isSprite","isImmediateRenderObject","camera2","materialProperties","programChange","lightsHash","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","markUniformsLightsNeedsUpdate","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","refreshUniformsStandard","refreshUniformsDepth","refreshUniformsDistance","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","textureUnit","warned","setTexture","readRenderTargetPixels","restore","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","FogExp2","Fog","Scene","SpriteMaterial","isSpriteMaterial","Sprite","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","LineSegments","computeLineDistances","positionAttribute","linePrecision","precisionSq","vStart","vEnd","interSegment","interRay","step","distSq","nbVertices","LineLoop","Points","threshold","params","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","VideoTexture","video","readyState","HAVE_CURRENT_DATA","CompressedTexture","DepthTexture","WireframeGeometry","o","ol","edge","edges","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","detail","PolyhedronBufferGeometry","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","queue","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","concat","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","Materials","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","transform","DefaultLoadingManager","loading","FileLoader","manager","load","cached","setTimeout","dataUriRegex","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","toLowerCase","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","open","callbacks","status","withCredentials","overrideMimeType","header","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","CompressedTextureLoader","_parser","loader","loadTexture","texDatas","loaded","mipmapCount","isCubemap","DataTextureLoader","texData","ImageLoader","crossOrigin","onImageLoad","onImageError","substr","src","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","json","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","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","StringKeyframeTrack","times","interpolation","KeyframeTrack","ValueTypeName","ValueBufferType","DefaultInterpolation","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","BooleanKeyframeTrack","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_","QuaternionLinearInterpolant","QuaternionKeyframeTrack","getValueSize","ColorKeyframeTrack","NumberKeyframeTrack","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","AnimationUtils","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","TimeBufferType","setInterpolation","validate","optimize","trackType","_getTrackTypeForValueTypeName","track","getInterpolation","typeName","VectorKeyframeTrack","InterpolantFactoryMethodDiscrete","factoryMethod","createInterpolant","shift","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","writeIndex","keep","timeNext","offsetP","offsetN","readOffset","writeOffset","AnimationClip","duration","tracks","resetDuration","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","MaterialLoader","setTextures","getTexture","shading","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","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","JSONLoader","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","faceA","faceB","uvLayer","nUvLayers","parseSkin","influencesPerVertex","parseMorphing","dstVertices","srcVertices","morphColors","parseAnimations","outputAnimations","morphAnimationClips","ObjectLoader","substring","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","AudioContext","webkitAudioContext","AudioLoader","bufferCopy","decodeAudioData","audioBuffer","StereoCamera","eyeSep","instance","eyeRight","eyeLeft","eyeSepOnProjection","ymax","xmin","xmax","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","AudioListener","gain","createGain","connect","destination","getInput","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","setValueAtTime","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","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","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getFrequencyData","getByteFrequencyData","getAverageFrequency","PropertyMixer","binding","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","now","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_root","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","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","InterleavedBufferAttribute","interleavedBuffer","InterleavedBuffer","isInterleavedBuffer","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","PointCloud","ascSort","intersectObject","setFromCamera","coords","intersectObjects","Clock","autoStart","oldTime","elapsedTime","running","performance","Date","getElapsedTime","getDelta","newTime","Spherical","other","makeSafe","vec3","Cylindrical","Box2","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","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","midpoint","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","copyIndicesArray","addIndex","addDrawCall","clearDrawCalls","computeOffsets","getArrays","addShapeList","wrapAround","wrapRGB","metal","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","ImageUtils","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","SceneUtils","createMultiMaterialObject","detach","attach","LensFlare","CubeGeometry","BR_NULL","BR_BRUTE_FORCE","BR_SWEEP_AND_PRUNE","BR_BOUNDING_VOLUME_TREE","BODY_NULL","BODY_DYNAMIC","BODY_STATIC","BODY_KINEMATIC","BODY_GHOST","SHAPE_NULL","SHAPE_SPHERE","SHAPE_BOX","SHAPE_CYLINDER","SHAPE_PLANE","SHAPE_PARTICLE","SHAPE_TETRA","JOINT_NULL","JOINT_DISTANCE","JOINT_BALL_AND_SOCKET","JOINT_HINGE","JOINT_WHEEL","JOINT_SLIDER","JOINT_PRISMATIC","AABB_PROX","degtorad","radtodeg","TwoPI","PI90","PI270","INF","EPZ","EPZ2","rand","rnd","int","fix","toFixed","xd","yd","zd","acosClamp","distanceVector","dotVectors","printError","clazz","InfoDisplay","world","infos","broadPhase","broadPhaseType","tt","broadPhaseTime","narrowPhaseTime","solvingTime","totalTime","updateTime","MaxBroadPhaseTime","MaxNarrowPhaseTime","MaxSolvingTime","MaxTotalTime","MaxUpdateTime","setTime","resetMax","calcBroadPhase","calcNarrowPhase","calcEnd","upfps","show","numRigidBodies","numContacts","numContactPoints","numPairChecks","numIslands","types","Vec3","addEqual","subEqual","scaleEqual","subScaledVector","invert","addition","testZero","testDiff","Quat","addTime","vx","EPS2","cz","setFromAxis","rad","setFromMat33","out","fRoot","Mat33","e00","e01","e02","e10","e11","e12","e20","e21","e22","addMatrixs","tem1","tem2","tem","subMatrixs","tm","m2","tm1","tm2","a0","a3","a6","a4","a7","a5","a8","b3","b6","b4","b7","b5","b8","a02","setQuat","a00","a10","a20","b01","addOffset","relX","relY","relZ","zx","subOffset","AABB","intersectTest","aabb","ue","intersectTestTwo","margin","aabb1","aabb2","surfaceArea","intersectsWithPoint","arr","ShapeIdCount","config","proxy","contactLink","relativePosition","relativeRotation","friction","restitution","belongsTo","collidesWith","calculateMassInfo","updateProxy","Box","Width","Height","Depth","halfDepth","dimentions","mass","divid","inertia","di","hz","volume","Cylinder","normalDirection","halfDirection","rsq","inertiaXZ","inertiaY","ShapeConfig","LimitMotor","fixed","lowerLimit","upperLimit","motorSpeed","maxMotorForce","frequency","dampingRatio","setLimit","setMotor","setSpring","Constraint","body1","body2","addedToIsland","preSolve","timeStep","invTimeStep","solve","postSolve","JointLink","joint","body","Joint","invScale","NaN","localAnchorPoint1","localAnchorPoint2","relativeAnchorPoint1","relativeAnchorPoint2","anchorPoint1","anchorPoint2","allowCollision","b1Link","b2Link","setId","setParent","numJoints","updateAnchorPoints","isX","jointLink","awake","removeJoint","LinearConstraint","ii1","ii2","dd","r1x","r1y","r1z","r2x","r2y","r2z","ax1x","ax1y","ax1z","ay1x","ay1y","ay1z","az1x","az1y","az1z","ax2x","ax2y","ax2z","ay2x","ay2y","ay2z","az2x","az2y","az2z","vel","velx","vely","velz","r1","r2","l1","linearVelocity","l2","angularVelocity","inverseInertia","impx","impy","impz","inverseMass","rxx","kk","inv","rvx","rvy","rvz","nimpx","nimpy","nimpz","Rotational3Constraint","limitMotor1","limitMotor2","limitMotor3","cfm1","cfm2","cfm3","i1e00","i1e01","i1e02","i1e10","i1e11","i1e12","i1e20","i1e21","i1e22","i2e00","i2e01","i2e02","i2e10","i2e11","i2e12","i2e20","i2e21","i2e22","ax1","ay1","az1","ax2","ay2","az2","ax3","ay3","az3","a1x1","a1y1","a1z1","a2x1","a2y1","a2z1","a1x2","a1y2","a1z2","a2x2","a2y2","a2z2","a1x3","a1y3","a1z3","a2x3","a2y3","a2z3","lowerLimit1","upperLimit1","limitVelocity1","limitState1","enableMotor1","motorSpeed1","maxMotorForce1","maxMotorImpulse1","lowerLimit2","upperLimit2","limitVelocity2","limitState2","enableMotor2","motorSpeed2","maxMotorForce2","maxMotorImpulse2","lowerLimit3","upperLimit3","limitVelocity3","limitState3","enableMotor3","motorSpeed3","maxMotorForce3","maxMotorImpulse3","k00","k01","k02","k10","k11","k12","k20","k21","k22","kv00","kv11","kv22","dv00","dv11","dv22","d00","d01","d02","d10","d11","d12","d20","d21","d22","limitImpulse1","motorImpulse1","limitImpulse2","motorImpulse2","limitImpulse3","motorImpulse3","ti1","ti2","frequency1","frequency2","frequency3","enableSpring1","enableSpring2","enableSpring3","enableLimit1","enableLimit2","enableLimit3","angle1","angle2","angle3","omega","dmp","totalImpulse1","totalImpulse2","totalImpulse3","solve_","rvn1","rvn2","rvn3","dLimitImpulse1","dLimitImpulse2","dLimitImpulse3","oldMotorImpulse1","oldMotorImpulse2","oldMotorImpulse3","dMotorImpulse1","dMotorImpulse2","dMotorImpulse3","oldLimitImpulse1","oldLimitImpulse2","oldLimitImpulse3","clampState","dImpulse1","dImpulse2","dImpulse3","HingeJoint","lowerAngleLimit","upperAngleLimit","localAxis1","localAxis2","localAngle1","localAngle2","an1","an2","nor","bin","limitMotor","lc","r3","limite","BallAndSocketJoint","TranslationalConstraint","cfm","motorDenom","invMotorDenom","t1x","t1y","t1z","t2x","t2y","t2z","l1x","l1y","l1z","l2x","l2y","l2z","a1x","a1y","a1z","a2x","a2y","a2z","limitVelocity","limitState","enableMotor","maxMotorImpulse","limitImpulse","motorImpulse","enableSpring","enableLimit","rdx","rdy","rdz","w2","totalImpulse","rvn","newMotorImpulse","oldMotorImpulse","newLimitImpulse","oldLimitImpulse","DistanceJoint","AngularConstraint","targetOrientation","relativeOrientation","imp","rn0","rn1","rn2","Translational3Constraint","t1x1","t1y1","t1z1","t2x1","t2y1","t2z1","l1x1","l1y1","l1z1","l2x1","l2y1","l2z1","t1x2","t1y2","t1z2","t2x2","t2y2","t2z2","l1x2","l1y2","l1z2","l2x2","l2y2","l2z2","t1x3","t1y3","t1z3","t2x3","t2y3","t2z3","l1x3","l1y3","l1z3","l2x3","l2y3","l2z3","PrismaticJoint","lowerTranslation","upperTranslation","SliderJoint","rotationalLimitMotor","translationalLimitMotor","WheelJoint","rotationalLimitMotor1","rotationalLimitMotor2","JointConfig","MassInfo","ContactLink","contact","ImpulseDataBuffer","lp1X","lp1Y","lp1Z","lp2X","lp2Y","lp2Z","impulse","ManifoldPoint","warmStarted","localPoint1","localPoint2","normalImpulse","tangentImpulse","binormalImpulse","normalDenominator","tangentDenominator","binormalDenominator","penetration","ContactManifold","numPoints","shape1","shape2","addPointVec","norm","flip","ContactPointDataBuffer","norU1","tanU1","binU1","norU2","tanU2","binU2","norT1","tanT1","binT1","norT2","tanT2","binT2","norTU1","tanTU1","binTU1","norTU2","tanTU2","binTU2","norImp","tanImp","binImp","norDen","tanDen","binDen","norTar","ContactConstraint","manifold","lv1","lv2","av1","av2","tmpC1","tmpC2","tmpP1","tmpP2","tmplv1","tmplv2","tmpav1","tmpav2","num","ps","m1m2","sepV","oldImp1","newImp1","oldImp2","newImp2","Contact","persisting","sleeping","detector","constraint","touching","close","dist","s1Link","s2Link","mixRestitution","restitution1","restitution2","mixFriction","friction1","friction2","updateManifold","numBuffers","detectCollision","lp1x","lp1y","lp1z","lp2x","lp2y","lp2z","distance1","distance2","RigidBody","Position","Rotation","massInfo","newPosition","controlPos","newOrientation","newRotation","currentRotation","controlRot","controlRotInTime","numShapes","sleepPosition","sleepOrientation","isStatic","isDynamic","isKinematic","localInertia","inverseLocalInertia","tmpInertia","allowSleep","sleepTime","updateMesh","removeShape","removeRigidBody","checkContact","setupMass","AdjustPosition","adjustPosition","tmpM","tmpV","shapeMass","rotateInertia","syncShapes","js","sleep","testWakeUp","isLonely","updatePosition","getAxis","rot","applyImpulse","rel","setQuaternion","setRotation","resetPosition","resetQuaternion","resetRotation","getQuaternion","connectMesh","Pair","BroadPhase","numPairs","pairs","createProxy","addProxy","removeProxy","isAvailablePair","detectPairs","collectPairs","addPair","pair","count$1","ProxyIdCount","Proxy","BasicProxy","BruteForceBroadPhase","proxies","SAPAxis","numElements","bufferSize","stack","addElements","newElements","removeElements","minIndex","maxIndex","giveup","pivot","tmp2","ei","ej","calculateTestCount","SAPElement","min1","max1","min2","max2","SAPProxy","sap","SAPBroadPhase","numElementsD","numElementsS","axesD","axesS","axis1","axis2","count1","count2","elementsD","elementsS","activeD","activeS","e1","dyn","e2","DBVTNode","child1","child2","DBVT","freeNodes","numFreeNodes","moveLeaf","leaf","deleteLeaf","insertLeaf","lb","sibling","oldArea","newArea","c1b","c2b","creatingCost","incrementalCost","discendingCost1","discendingCost2","oldParent","newParent","balance","getBalance","grandParent","nh","lh","rh","ll","lr","llh","lrh","rl","rr","rlh","rrh","DBVTProxy","DBVTBroadPhase","tree","leaves","numLeaves","collide","node1","node2","stackCount","CollisionDetector","BoxBoxCollisionDetector","clipVertices1","clipVertices2","used","V1","V2","D1","D2","p1x","p1y","p1z","p2x","p2y","p2z","h1","h2","a3x","a3y","a3z","d1x","d1y","d1z","d2x","d2y","d2z","d3x","d3y","d3z","a4x","a4y","a4z","a5x","a5y","a5z","a6x","a6y","a6z","d4x","d4y","d4z","d5x","d5y","d5z","d6x","d6y","d6z","a7x","a7y","a7z","a8x","a8y","a8z","a9x","a9y","a9z","aax","aay","aaz","abx","aby","abz","acx","acy","acz","adx","ady","adz","aex","aey","aez","afx","afy","afz","right1","right2","right3","right4","right5","right6","right7","right8","right9","righta","rightb","rightc","rightd","righte","rightf","overlap1","overlap2","overlap3","overlap4","overlap5","overlap6","overlap7","overlap8","overlap9","overlapa","overlapb","overlapc","overlapd","overlape","overlapf","invalid7","invalid8","invalid9","invalida","invalidb","invalidc","invalidd","invalide","invalidf","len1","len2","dot1","dot2","dot3","depth2","n1x","n1y","n1z","n2x","n2y","n2z","s1x","s1y","s1z","s2x","s2y","s2z","swap","vy","vz","v1x","v1y","v1z","v2x","v2y","v2z","q1x","q1y","q1z","q2x","q2y","q2z","q3x","q3y","q3z","q4x","q4y","q4z","minDot","minDotIndex","numClipVertices","numAddedClipVertices","tb","flipped","index3","index4","maxDot","BoxCylinderCollisionDetector","getSep","sep","dep","sup","v01x","v01y","v01z","v02x","v02y","v02z","v0x","v0y","v0z","supportPointB","v11x","v11y","v11z","supportPointC","v12x","v12y","v12z","v21x","v21y","v21z","v22x","v22y","v22z","iterations","v31x","v31y","v31z","v32x","v32y","v32z","v3x","v3y","v3z","hit","v41x","v41y","v41z","v42x","v42y","v42z","v4x","v4y","v4z","separation","ldx","ldy","ldz","ox","oy","oz","radx","radz","hh","pbx","pby","pbz","pcx","pcy","pcz","bw","bh","ch","D","nwx","nwy","nwz","nhx","nhy","nhz","ndx","ndy","ndz","dwx","dwy","dwz","dhx","dhy","dhz","ddx","ddy","ddz","ncx","ncy","ncz","dcx","dcy","dcz","dotw","doth","dotd","dotc","cbx","cby","cbz","ccx","ccy","ccz","r00","r01","r02","r10","r11","r12","r20","r21","r22","pd","td","sd","ex","ey","ez","ed","dir1x","dir1y","dir1z","dir2x","dir2y","dir2z","dir1l","dir2l","CylinderCylinderCollisionDetector","supportPoint","c1x","c1y","c1z","c2x","c2y","c2z","depth1","SphereBoxCollisionDetector","psx","psy","psz","pb","hw","hd","invLen","overlap","SphereCylinderCollisionDetector","pc","dirx","diry","dirz","rads","radc","rad2","halfh","SphereSphereCollisionDetector","SpherePlaneCollisionDetector","pn","BoxPlaneCollisionDetector","dix","diy","diz","cc","cc2","World","worldscale","timestep","timerate","timer","preLoop","postLoop","numIterations","broadphase","Btypes","isStat","enableRandomizer","rigidBodies","contacts","unusedContacts","joints","gravity","numShapeTypes","detectors","randX","randA","randB","islandRigidBodies","islandStack","islandConstraints","setInterval","clearInterval","setGravity","ar","getInfo","removeContact","addRigidBody","rigidBody","getByName","addJoint","addContact","newContact","getContact","name1","name2","callSleep","stat","link","exists","islandNumRigidBodies","islandNumConstraints","gVel","isJoint","initJoint","initBody","move","kinematic","posShape","rotShape","sc","neverSleep","massPos","massRot","axe1","axe2","pos1","pos2","limit","spring","motor","jc","collision","M"],"mappings":"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","file":"1.a82ff252.map","sourceRoot":"..","sourcesContent":["import {version} from './package.json';\r\n\r\nexport default {\r\n\r\n    version: version,\r\n    \r\n    log: false,\r\n\r\n    space: {\r\n        color: 0xe0e0e0\r\n    },\r\n\r\n    device: {\r\n\r\n        headMountedDisplay: {\r\n            controllerModels: false\r\n        },\r\n\r\n        desktop: {\r\n            container: {\r\n                position: {\r\n                    x: 0,\r\n                    y: 0,\r\n                    z: 0\r\n                }\r\n            },   \r\n            camera: {\r\n                position: {\r\n                    x: 0,\r\n                    y: 0,\r\n                    z: 3\r\n                }\r\n            },  \r\n            globe: {\r\n                opacity: 0,\r\n                color: 0xff0000,\r\n                wireframe: true,\r\n                transparency: true\r\n            },\r\n            acceleration: 125\r\n        },\r\n\r\n        mobile: {\r\n            container: {\r\n                position: {\r\n                    x: 0,\r\n                    y: 0,\r\n                    z: 0\r\n                }\r\n            },   \r\n            camera: {\r\n                position: {\r\n                    x: 0,\r\n                    y: 0,\r\n                    z: 3\r\n                }\r\n            },  \r\n            globe:{\r\n                opacity: 0,\r\n                color: 0xff0000,\r\n                wireframe: true,\r\n                transparency: true\r\n            }\r\n        }\r\n    }\r\n}","// Polyfills\n\nif ( Number.EPSILON === undefined ) {\n\n\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n}\n\nif ( Number.isInteger === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\tNumber.isInteger = function ( value ) {\n\n\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t};\n\n}\n\n//\n\nif ( Math.sign === undefined ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\tMath.sign = function ( x ) {\n\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t};\n\n}\n\nif ( 'name' in Function.prototype === false ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\tget: function () {\n\n\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t}\n\n\t} );\n\n}\n\nif ( Object.assign === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t( function () {\n\n\t\tObject.assign = function ( target ) {\n\n\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t}\n\n\t\t\tvar output = Object( target );\n\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t};\n\n\t} )();\n\n}\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tvar listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tvar listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nvar REVISION = '94';\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 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 <a1, a2> to range <b1, b2>\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 <low, high> 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 <low, high> 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\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\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\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 () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function project( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\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\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\n\t\t\treturn this.applyMatrix4( matrix );\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\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\n\t\tthis.y = Math.cos( s.phi ) * s.radius;\n\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\tthis.x = c.radius * Math.sin( c.theta );\n\t\tthis.y = c.y;\n\t\tthis.z = c.radius * Math.cos( c.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 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\tfunction getDataURL( image ) {\n\n\t\t\tvar canvas;\n\n\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\tcanvas = image;\n\n\t\t\t} else {\n\n\t\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t} else {\n\n\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t}\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( 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 = 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;\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}\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 ( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty( ) ) return this;\n\n\t\tvar m = matrix.elements;\n\n\t\tvar xax = m[ 0 ] * this.min.x, xay = m[ 1 ] * this.min.x, xaz = m[ 2 ] * this.min.x;\n\t\tvar xbx = m[ 0 ] * this.max.x, xby = m[ 1 ] * this.max.x, xbz = m[ 2 ] * this.max.x;\n\t\tvar yax = m[ 4 ] * this.min.y, yay = m[ 5 ] * this.min.y, yaz = m[ 6 ] * this.min.y;\n\t\tvar ybx = m[ 4 ] * this.max.y, yby = m[ 5 ] * this.max.y, ybz = m[ 6 ] * this.max.y;\n\t\tvar zax = m[ 8 ] * this.min.z, zay = m[ 9 ] * this.min.z, zaz = m[ 10 ] * this.min.z;\n\t\tvar zbx = m[ 8 ] * this.max.z, zby = m[ 9 ] * this.max.z, zbz = m[ 10 ] * this.max.z;\n\n\t\tthis.min.x = Math.min( xax, xbx ) + Math.min( yax, ybx ) + Math.min( zax, zbx ) + m[ 12 ];\n\t\tthis.min.y = Math.min( xay, xby ) + Math.min( yay, yby ) + Math.min( zay, zby ) + m[ 13 ];\n\t\tthis.min.z = Math.min( xaz, xbz ) + Math.min( yaz, ybz ) + Math.min( zaz, zbz ) + m[ 14 ];\n\t\tthis.max.x = Math.max( xax, xbx ) + Math.max( yax, ybx ) + Math.max( zax, zbx ) + m[ 12 ];\n\t\tthis.max.y = Math.max( xay, xby ) + Math.max( yay, yby ) + Math.max( zay, zby ) + m[ 13 ];\n\t\tthis.max.z = Math.max( xaz, xbz ) + Math.max( yaz, ybz ) + Math.max( zaz, zbz ) + m[ 14 ];\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 * @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 p1 = new Vector3(),\n\t\t\tp2 = 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\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\n\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\n\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\n\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\n\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\n\n\t\t\t\t// if both outside plane, no intersection\n\n\t\t\t\tif ( d1 < 0 && d2 < 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\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t}\\n\\treturn 1.0;\\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 )\\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 )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\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(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.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\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.w );\\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.w );\\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.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, 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.x, 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 = \"\\n#ifdef USE_FOG\\nfogDepth = -mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n  varying 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 lights_pars_maps = \"#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( 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(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 = \"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\";\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 cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\nvar cube_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\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 <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\";\n\nvar depth_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\nvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\\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 <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\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 <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\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 <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\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 <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar shadow_vert = \"#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\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_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_pars_maps: lights_pars_maps,\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\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\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};\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\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};\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\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\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearCoat: { value: 0 },\n\t\t\tclearCoatRoughness: { value: 0 }\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAnimation() {\n\n\tvar context = null;\n\tvar isAnimating = false;\n\tvar animationLoop = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tif ( isAnimating === false ) return;\n\n\t\tanimationLoop( time, frame );\n\n\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAttributes( gl ) {\n\n\tvar buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\tvar buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tvar type = gl.FLOAT;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( attribute.dynamic === false ) {\n\n\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else if ( updateRange.count === 0 ) {\n\n\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\n\n\t\t} else {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Euler( x, y, z, order ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._order = order || Euler.DefaultOrder;\n\n}\n\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nEuler.DefaultOrder = 'XYZ';\n\nObject.defineProperties( Euler.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\torder: {\n\n\t\tget: function () {\n\n\t\t\treturn this._order;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._order = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Euler.prototype, {\n\n\tisEuler: true,\n\n\tset: function ( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t},\n\n\tcopy: function ( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\tvar clamp = _Math.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements;\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._y = 0;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromQuaternion: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t};\n\n\t}(),\n\n\tsetFromVector3: function ( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t},\n\n\treorder: function () {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\tvar q = new Quaternion();\n\n\t\treturn function reorder( newOrder ) {\n\n\t\t\tq.setFromEuler( this );\n\n\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t},\n\n\tfromArray: function ( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t},\n\n\ttoVector3: function ( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Layers() {\n\n\tthis.mask = 1 | 0;\n\n}\n\nObject.assign( Layers.prototype, {\n\n\tset: function ( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t},\n\n\tenable: function ( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t},\n\n\ttoggle: function ( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t},\n\n\tdisable: function ( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t},\n\n\ttest: function ( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author elephantatwork / www.elephantatwork.ch\n */\n\nvar object3DId = 0;\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tvar position = new Vector3();\n\tvar rotation = new Euler();\n\tvar quaternion = new Quaternion();\n\tvar scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation.onChange( onRotationChange );\n\tquaternion.onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function () {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateOnWorldAxis: function () {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\ttranslateOnAxis: function () {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function translateX( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function translateY( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function translateZ( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function () {\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function worldToLocal( vector ) {\n\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\t// This method does not support objects with rotated and/or translated parent(s)\n\n\t\tvar m1 = new Matrix4();\n\t\tvar vector = new Vector3();\n\n\t\treturn function lookAt( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\tvector.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tif ( this.isCamera ) {\n\n\t\t\t\tm1.lookAt( this.position, vector, this.up );\n\n\t\t\t} else {\n\n\t\t\t\tm1.lookAt( vector, this.position, this.up );\n\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\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 () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t};\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\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.geometry !== undefined ) {\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 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\tthis.projectionMatrix = 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\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t};\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 alteredq / http://alteredqualia.com/\n * @author arose / http://github.com/arose\n */\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = left;\n\tthis.right = right;\n\tthis.top = top;\n\tthis.bottom = bottom;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tvar cx = ( this.right + this.left ) / 2;\n\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\tvar left = cx - dx;\n\t\tvar right = cx + dx;\n\t\tvar top = cy + dy;\n\t\tvar bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t},\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 * @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 kile / http://kile.stravaganza.org/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author bhouston / http://clara.io\n */\n\nvar geometryId = 0; // Geometry uses even numbers as Id\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tvar scope = this;\n\n\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\tvar attributes = geometry.attributes;\n\n\t\tvar positions = attributes.position.array;\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tvar tempNormals = [];\n\t\tvar tempUVs = [];\n\t\tvar tempUVs2 = [];\n\n\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tvar start = group.start;\n\t\t\t\tvar count = group.count;\n\n\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tvar center = this.boundingSphere.center;\n\t\tvar radius = this.boundingSphere.radius;\n\n\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tvar matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tvar face = this.faces[ f ];\n\n\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\tvar v, vl, f, fl, face, vertices;\n\n\t\tvertices = new Array( this.vertices.length );\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tvar f, fl, face;\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\tvar i, il, f, fl, face;\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t//   otherwise just copy (for faster repeated calls)\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tvar tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar normalMatrix,\n\t\t\tvertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\tif ( uv === undefined ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t}\n\n\t\t\tuvs1.push( uvCopy );\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function () {\n\n\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tvar unique = [], changes = [];\n\n\t\tvar v, key;\n\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\tvar i, il, face;\n\t\tvar indices, j, jl;\n\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tv = this.vertices[ i ];\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tvar faceIndicesToRemove = [];\n\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tface = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tvar diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tvar faces = this.faces;\n\t\tvar length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tvar newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tvar vertices = [];\n\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tvar faces = [];\n\t\tvar normals = [];\n\t\tvar normalsHash = {};\n\t\tvar colors = [];\n\t\tvar colorsHash = {};\n\t\tvar uvs = [];\n\t\tvar uvsHash = {};\n\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\n\t\t\tvar hasMaterial = true;\n\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tvar faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar i, il, j, jl, k, kl;\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tvar vertices = source.vertices;\n\n\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tvar colors = source.colors;\n\n\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tvar faces = source.faces;\n\n\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphTargets = source.morphTargets;\n\n\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tvar morphNormals = source.morphNormals;\n\n\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tvar morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tvar skinWeights = source.skinWeights;\n\n\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tvar skinIndices = source.skinIndices;\n\n\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tvar lineDistances = source.lineDistances;\n\n\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tvar color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectGeometry() {\n\n\tthis.vertices = [];\n\tthis.normals = [];\n\tthis.colors = [];\n\tthis.uvs = [];\n\tthis.uvs2 = [];\n\n\tthis.groups = [];\n\n\tthis.morphTargets = {};\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\t// this.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.verticesNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nObject.assign( DirectGeometry.prototype, {\n\n\tcomputeGroups: function ( geometry ) {\n\n\t\tvar group;\n\t\tvar groups = [];\n\t\tvar materialIndex = undefined;\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tvar faces = geometry.faces;\n\t\tvar vertices = geometry.vertices;\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tvar morphTargets = geometry.morphTargets;\n\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\tvar morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = [];\n\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\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 ].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 ].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.length * 3, 3 );\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\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\t\tvar groups = this.groups;\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\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tthis.addGroup( 0, indices.length );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\n\n\t\t\t\t\tvar group = groups[ j ];\n\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\n\n\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\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// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tvar attribute1 = attributes[ key ];\n\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tvar vector = new Vector3();\n\n\t\treturn function normalizeNormals() {\n\n\t\t\tvar normals = this.attributes.normal;\n\n\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\tvector.normalize();\n\n\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoNonIndexed: function () {\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar geometry2 = new BufferGeometry();\n\n\t\tvar indices = this.index.array;\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tvar index = 0, index2 = 0;\n\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tvar index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: array\n\t\t\t};\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\n\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: attribute.normalized\n\t\t\t};\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tvar boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar name, i, l;\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tvar index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone() );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tvar attributes = source.attributes;\n\n\t\tfor ( name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tvar morphAttributes = source.morphAttributes;\n\n\t\tfor ( name in morphAttributes ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// groups\n\n\t\tvar groups = source.groups;\n\n\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// BoxGeometry\n\nfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'BoxGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\tthis.mergeVertices();\n\n}\n\nBoxGeometry.prototype = Object.create( Geometry.prototype );\nBoxGeometry.prototype.constructor = BoxGeometry;\n\n// BoxBufferGeometry\n\nfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'BoxBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tvar scope = this;\n\n\twidth = width || 1;\n\theight = height || 1;\n\tdepth = depth || 1;\n\n\t// segments\n\n\twidthSegments = Math.floor( widthSegments ) || 1;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar numberOfVertices = 0;\n\tvar groupStart = 0;\n\n\t// build each side of the box geometry\n\n\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\tvar segmentWidth = width / gridX;\n\t\tvar segmentHeight = height / gridY;\n\n\t\tvar widthHalf = width / 2;\n\t\tvar heightHalf = height / 2;\n\t\tvar depthHalf = depth / 2;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar vertexCounter = 0;\n\t\tvar groupCount = 0;\n\n\t\tvar ix, iy;\n\n\t\tvar vector = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = 0;\n\t\t\t\tvector[ v ] = 0;\n\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// uvs\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t// counters\n\n\t\t\t\tvertexCounter += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\t// 1. you need three indices to draw a single face\n\t\t// 2. a single segment consists of two faces\n\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// increase counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t\t// update total number of vertices\n\n\t\tnumberOfVertices += vertexCounter;\n\n\t}\n\n}\n\nBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PlaneGeometry\n\nfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PlaneGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\tthis.mergeVertices();\n\n}\n\nPlaneGeometry.prototype = Object.create( Geometry.prototype );\nPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n// PlaneBufferGeometry\n\nfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PlaneBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\twidth = width || 1;\n\theight = height || 1;\n\n\tvar width_half = width / 2;\n\tvar height_half = height / 2;\n\n\tvar gridX = Math.floor( widthSegments ) || 1;\n\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\tvar gridX1 = gridX + 1;\n\tvar gridY1 = gridY + 1;\n\n\tvar segment_width = width / gridX;\n\tvar segment_height = height / gridY;\n\n\tvar ix, iy;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\tvar y = iy * segment_height - height_half;\n\n\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\tvar x = ix * segment_width - width_half;\n\n\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\tuvs.push( ix / gridX );\n\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\tvar a = ix + gridX1 * iy;\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nvar materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\tthis.lights = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\tthis.visible = true;\n\n\tthis.userData = {};\n\n\tthis.needsUpdate = true;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function () {},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( var key in values ) {\n\n\t\t\tvar newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t}\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.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.overdraw = source.overdraw;\n\n\t\tthis.visible = source.visible;\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.clipShadows = source.clipShadows;\n\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\tdstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tvar n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  depthTest: <bool>,\n *  depthWrite: <bool>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>\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 alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  defines: { \"label\" : \"value\" },\n *  uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n *  fragmentShader: <string>,\n *  vertexShader: <string>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  lights: <bool>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\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 = this.uniforms;\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.distanceToPoint( sphere.center ) <= 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 */\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 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} );\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\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar plane = new Plane();\n\t\tvar edgeList = [ new Line3(), new Line3(), new Line3() ];\n\t\tvar projectedPoint = new Vector3();\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function closestPointToPoint( point, 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 minDistance = Infinity;\n\n\t\t\t// project the point onto the plane of the triangle\n\n\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\n\t\t\tplane.projectPoint( point, projectedPoint );\n\n\t\t\t// check if the projection lies within the triangle\n\n\t\t\tif ( this.containsPoint( projectedPoint ) === true ) {\n\n\t\t\t\t// if so, this is the closest point\n\n\t\t\t\ttarget.copy( projectedPoint );\n\n\t\t\t} else {\n\n\t\t\t\t// if not, the point falls outside the triangle. the target is the closest point to the triangle's edges or vertices\n\n\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\n\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\n\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\n\n\t\t\t\tfor ( var i = 0; i < edgeList.length; i ++ ) {\n\n\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\n\n\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\n\n\t\t\t\t\tif ( distance < minDistance ) {\n\n\t\t\t\t\t\tminDistance = distance;\n\n\t\t\t\t\t\ttarget.copy( closestPoint );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target;\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 * @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 barycoord = new Vector3();\n\n\t\tvar intersectionPoint = new Vector3();\n\t\tvar intersectionPointWorld = new Vector3();\n\n\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\n\n\t\t\tTriangle.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\tuv1.multiplyScalar( barycoord.x );\n\t\t\tuv2.multiplyScalar( barycoord.y );\n\t\t\tuv3.multiplyScalar( barycoord.z );\n\n\t\t\tuv1.add( uv2 ).add( uv3 );\n\n\t\t\treturn uv1.clone();\n\n\t\t}\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 = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\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( i );\n\t\t\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\t\t\tc = index.getX( i + 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( i / 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( i / 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 = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\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 planeCamera, planeMesh;\n\tvar boxMesh;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tvar background = scene.background;\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tuniforms: ShaderLib.cube.uniforms,\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeCamera === undefined ) {\n\n\t\t\t\tplaneCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )\n\t\t\t\t);\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.map = background;\n\n\t\t\t// TODO Push this to renderList\n\n\t\t\trenderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, 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 ) {\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 = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\textension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tvar maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t     gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t     gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tvar maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tvar vertexTextures = maxVertexTextures > 0;\n\tvar floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\n\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\treturn {\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\t// TODO Remove duplicate code\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ geometry.id ];\n\n\t\t}\n\n\t\tattribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tvar index = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( var name in morphAttributes ) {\n\n\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) return attribute;\n\n\t\tvar indices = [];\n\n\t\tvar geometryIndex = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t// console.time( 'wireframe' );\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tvar array = geometryIndex.array;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tvar a = i + 0;\n\t\t\t\tvar b = i + 1;\n\t\t\t\tvar c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// console.timeEnd( 'wireframe' );\n\n\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\treturn attribute;\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\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 = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\textension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLInfo( gl ) {\n\n\tvar memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tvar render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\tinstanceCount = instanceCount || 1;\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.TRIANGLE_STRIP:\n\t\t\tcase gl.TRIANGLE_FAN:\n\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tvar influencesList = {};\n\tvar morphInfluences = new Float32Array( 8 );\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\tvar length = objectInfluences.length;\n\n\t\tvar influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t// Remove current morphAttributes\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\t// Add morphAttributes\n\n\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence ) {\n\n\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\tif ( value ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLObjects( geometries, info ) {\n\n\tvar updateList = {};\n\n\tfunction update( object ) {\n\n\t\tvar frame = info.render.frame;\n\n\t\tvar geometry = object.geometry;\n\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\n/**\n * @author 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 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 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 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 ) {\n\n\t// Note: Don't need an extra 'renderer' parameter, since samplers\n\t// are not allowed in structured uniforms.\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 ] );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n//  - followed by an optional right bracket (found when array index)\n//  - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tvar path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tvar match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\tid = match[ 1 ],\n\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program, renderer ) {\n\n\tUniformContainer.call( this );\n\n\tthis.renderer = renderer;\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\tvar u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tvar v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tvar r = [];\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction addLineNumbers( string ) {\n\n\tvar lines = string.split( '\\n' );\n\n\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tvar shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t}\n\n\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t}\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn shader;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar programIdCount = 0;\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t}\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tvar toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase Uncharted2ToneMapping:\n\t\t\ttoneMappingName = 'Uncharted2';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\textensions = extensions || {};\n\n\tvar chunks = [\n\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || ( parameters.normalMap && ! parameters.objectSpaceNormalMap ) || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tvar chunks = [];\n\n\tfor ( var name in defines ) {\n\n\t\tvar value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tvar attributes = {};\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\tvar info = gl.getActiveAttrib( program, i );\n\t\tvar name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\nfunction parseIncludes( string ) {\n\n\tvar pattern = /^[ \\t]*#include +<([\\w\\d.]+)>/gm;\n\n\tfunction replace( match, include ) {\n\n\t\tvar replace = ShaderChunk[ include ];\n\n\t\tif ( replace === undefined ) {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t\treturn parseIncludes( replace );\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction unrollLoops( string ) {\n\n\tvar pattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\tfunction replace( match, start, end, snippet ) {\n\n\t\tvar unroll = '';\n\n\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t}\n\n\t\treturn unroll;\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction WebGLProgram( renderer, extensions, code, material, shader, parameters ) {\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 = 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 && 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 && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\tparameters.envMap && 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.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ '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.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\tvar vertexGlsl = prefixVertex + vertexShader;\n\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( material.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tvar programLog = gl.getProgramInfoLog( program ).trim();\n\tvar vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\tvar runnable = true;\n\tvar haveDiagnostics = true;\n\n\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\trunnable = false;\n\n\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t} else if ( programLog !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\thaveDiagnostics = false;\n\n\t}\n\n\tif ( haveDiagnostics ) {\n\n\t\tthis.diagnostics = {\n\n\t\t\trunnable: runnable,\n\t\t\tmaterial: material,\n\n\t\t\tprogramLog: programLog,\n\n\t\t\tvertexShader: {\n\n\t\t\t\tlog: vertexLog,\n\t\t\t\tprefix: prefixVertex\n\n\t\t\t},\n\n\t\t\tfragmentShader: {\n\n\t\t\t\tlog: fragmentLog,\n\t\t\t\tprefix: prefixFragment\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// clean up\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tvar cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tvar cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t// DEPRECATED\n\n\tObject.defineProperties( this, {\n\n\t\tuniforms: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\treturn this.getUniforms();\n\n\t\t\t}\n\t\t},\n\n\t\tattributes: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\treturn this.getAttributes();\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\n\t//\n\n\tthis.name = shader.name;\n\tthis.id = programIdCount ++;\n\tthis.code = code;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\tvar programs = [];\n\n\tvar shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'phong',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow'\n\t};\n\n\tvar parameterNames = [\n\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"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\tenvMap: !! material.envMap,\n\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexColors: material.vertexColors,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t};\n\n\t\treturn parameters;\n\n\t};\n\n\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\tvar array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( material.fragmentShader );\n\t\t\tarray.push( material.vertexShader );\n\n\t\t}\n\n\t\tif ( material.defines !== undefined ) {\n\n\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t}\n\n\t\tarray.push( material.onBeforeCompile.toString() );\n\n\t\tarray.push( renderer.gammaOutput );\n\n\t\treturn array.join();\n\n\t};\n\n\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\tvar program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tvar programInfo = programs[ p ];\n\n\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\tprogram = programInfo;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters );\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\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\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\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.distance === 0 ) ? 0.0 : 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.distance === 0 ) ? 0.0 : 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 = state.id + ',' + directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + 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\tvar spritesArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\t\tspritesArray.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 pushSprite( sprite ) {\n\n\t\tspritesArray.push( sprite );\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\t\tspritesArray: spritesArray,\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\tpushSprite: pushSprite\n\t};\n\n}\n\nfunction WebGLRenderStates() {\n\n\tvar renderStates = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\n\t\tvar renderState = renderStates[ hash ];\n\n\t\tif ( renderState === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState();\n\t\t\trenderStates[ hash ] = renderState;\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: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\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: <float>,\n *  nearDistance: <float>,\n *  farDistance: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>\n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tvar _frustum = new Frustum(),\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_shadowMapSize = new Vector2(),\n\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t_lookTarget = new Vector3(),\n\t\t_lightPositionWorld = new Vector3(),\n\n\t\t_MorphingFlag = 1,\n\t\t_SkinningFlag = 2,\n\n\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t_materialCache = {};\n\n\tvar shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tvar cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tvar cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n\tvar cube2DViewPorts = [\n\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\tnew Vector4(), new Vector4(), new Vector4()\n\t];\n\n\t// init\n\n\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\tvar depthMaterial = new MeshDepthMaterial( {\n\n\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_depthMaterials[ i ] = depthMaterial;\n\n\t\t//\n\n\t\tvar distanceMaterial = new MeshDistanceMaterial( {\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_distanceMaterials[ i ] = distanceMaterial;\n\n\t}\n\n\t//\n\n\tvar scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\t// TODO Clean up (needed in case of contextlost)\n\t\tvar _gl = _renderer.context;\n\t\tvar _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.disable( _gl.BLEND );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tvar faceCount;\n\n\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\t\t\tvar shadow = light.shadow;\n\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t// following orientation:\n\t\t\t\t//\n\t\t\t\t//  xzXZ\n\t\t\t\t//   y Y\n\t\t\t\t//\n\t\t\t\t// X - Positive x direction\n\t\t\t\t// x - Negative x direction\n\t\t\t\t// Y - Positive y direction\n\t\t\t\t// y - Negative y direction\n\t\t\t\t// Z - Positive z direction\n\t\t\t\t// z - Negative z direction\n\n\t\t\t\t// positive X\n\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative X\n\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Z\n\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative Z\n\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Y\n\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t// negative Y\n\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\tshadow.update( light );\n\n\t\t\t}\n\n\t\t\tvar shadowMap = shadow.map;\n\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tfaceCount = 6;\n\n\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t} else {\n\n\t\t\t\tfaceCount = 1;\n\n\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t// compute shadow matrix\n\n\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t);\n\n\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t_renderer.clear();\n\n\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t// run a single pass if not\n\n\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t}\n\n\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t};\n\n\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tvar result = null;\n\n\t\tvar materialVariants = _depthMaterials;\n\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\tif ( isPointLight ) {\n\n\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( ! customMaterial ) {\n\n\t\t\tvar useMorphing = false;\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t}\n\n\t\t\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\tvar variantIndex = 0;\n\n\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tresult.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\tvar material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction 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 mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) {\n\n\tvar vertexBuffer, elementBuffer;\n\tvar program, attributes, uniforms;\n\n\tvar texture;\n\n\t// decompose matrixWorld\n\n\tvar spritePosition = new Vector3();\n\tvar spriteRotation = new Quaternion();\n\tvar spriteScale = new Vector3();\n\n\tfunction init() {\n\n\t\tvar vertices = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0,\n\t\t\t  0.5, - 0.5, 1, 0,\n\t\t\t  0.5, 0.5, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 1\n\t\t] );\n\n\t\tvar faces = new Uint16Array( [\n\t\t\t0, 1, 2,\n\t\t\t0, 2, 3\n\t\t] );\n\n\t\tvertexBuffer = gl.createBuffer();\n\t\telementBuffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\tprogram = createProgram();\n\n\t\tattributes = {\n\t\t\tposition: gl.getAttribLocation( program, 'position' ),\n\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t};\n\n\t\tuniforms = {\n\t\t\tuvOffset: gl.getUniformLocation( program, 'uvOffset' ),\n\t\t\tuvScale: gl.getUniformLocation( program, 'uvScale' ),\n\n\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\tcenter: gl.getUniformLocation( program, 'center' ),\n\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\n\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\n\t\t\tmodelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ),\n\t\t\tprojectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ),\n\n\t\t\tfogType: gl.getUniformLocation( program, 'fogType' ),\n\t\t\tfogDensity: gl.getUniformLocation( program, 'fogDensity' ),\n\t\t\tfogNear: gl.getUniformLocation( program, 'fogNear' ),\n\t\t\tfogFar: gl.getUniformLocation( program, 'fogFar' ),\n\t\t\tfogColor: gl.getUniformLocation( program, 'fogColor' ),\n\t\t\tfogDepth: gl.getUniformLocation( program, 'fogDepth' ),\n\n\t\t\talphaTest: gl.getUniformLocation( program, 'alphaTest' )\n\t\t};\n\n\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tcanvas.width = 8;\n\t\tcanvas.height = 8;\n\n\t\tvar context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'white';\n\t\tcontext.fillRect( 0, 0, 8, 8 );\n\n\t\ttexture = new CanvasTexture( canvas );\n\n\t}\n\n\tthis.render = function ( sprites, scene, camera ) {\n\n\t\tif ( sprites.length === 0 ) return;\n\n\t\t// setup gl\n\n\t\tif ( program === undefined ) {\n\n\t\t\tinit();\n\n\t\t}\n\n\t\tstate.useProgram( program );\n\n\t\tstate.initAttributes();\n\t\tstate.enableAttribute( attributes.position );\n\t\tstate.enableAttribute( attributes.uv );\n\t\tstate.disableUnusedAttributes();\n\n\t\tstate.disable( gl.CULL_FACE );\n\t\tstate.enable( gl.BLEND );\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\n\n\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\tgl.uniform1i( uniforms.map, 0 );\n\n\t\tvar oldFogType = 0;\n\t\tvar sceneFogType = 0;\n\t\tvar fog = scene.fog;\n\n\t\tif ( fog ) {\n\n\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\n\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\n\t\t\t\toldFogType = 1;\n\t\t\t\tsceneFogType = 1;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\n\t\t\t\toldFogType = 2;\n\t\t\t\tsceneFogType = 2;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tgl.uniform1i( uniforms.fogType, 0 );\n\t\t\toldFogType = 0;\n\t\t\tsceneFogType = 0;\n\n\t\t}\n\n\n\t\t// update positions and sort\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\n\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\n\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\n\n\t\t}\n\n\t\tsprites.sort( painterSortStable );\n\n\t\t// render all sprites\n\n\t\tvar scale = [];\n\t\tvar center = [];\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\t\t\tvar material = sprite.material;\n\n\t\t\tif ( material.visible === false ) continue;\n\n\t\t\tsprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\n\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\n\n\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\n\n\t\t\tscale[ 0 ] = spriteScale.x;\n\t\t\tscale[ 1 ] = spriteScale.y;\n\n\t\t\tcenter[ 0 ] = sprite.center.x - 0.5;\n\t\t\tcenter[ 1 ] = sprite.center.y - 0.5;\n\n\t\t\tvar fogType = 0;\n\n\t\t\tif ( scene.fog && material.fog ) {\n\n\t\t\t\tfogType = sceneFogType;\n\n\t\t\t}\n\n\t\t\tif ( oldFogType !== fogType ) {\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\n\t\t\t\toldFogType = fogType;\n\n\t\t\t}\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\n\n\t\t\t} else {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\n\n\t\t\t}\n\n\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\n\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\n\n\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\n\t\t\tgl.uniform2fv( uniforms.center, center );\n\t\t\tgl.uniform2fv( uniforms.scale, scale );\n\n\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\t\t\tstate.buffers.depth.setTest( material.depthTest );\n\t\t\tstate.buffers.depth.setMask( material.depthWrite );\n\t\t\tstate.buffers.color.setMask( material.colorWrite );\n\n\t\t\ttextures.setTexture2D( material.map || texture, 0 );\n\n\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\t\t\tsprite.onAfterRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t}\n\n\t\t// restore gl\n\n\t\tstate.enable( gl.CULL_FACE );\n\n\t\tstate.reset();\n\n\t};\n\n\tfunction createProgram() {\n\n\t\tvar program = gl.createProgram();\n\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\n\t\tgl.shaderSource( vertexShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform float rotation;',\n\t\t\t'uniform vec2 center;',\n\t\t\t'uniform vec2 scale;',\n\t\t\t'uniform vec2 uvOffset;',\n\t\t\t'uniform vec2 uvScale;',\n\n\t\t\t'attribute vec2 position;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvUV = uvOffset + uv * uvScale;',\n\n\t\t\t'\tvec2 alignedPosition = ( position - center ) * scale;',\n\n\t\t\t'\tvec2 rotatedPosition;',\n\t\t\t'\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\n\t\t\t'\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\n\n\t\t\t'\tvec4 mvPosition;',\n\n\t\t\t'\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\n\t\t\t'\tmvPosition.xy += rotatedPosition;',\n\n\t\t\t'\tgl_Position = projectionMatrix * mvPosition;',\n\n\t\t\t'\tfogDepth = - mvPosition.z;',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.shaderSource( fragmentShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform vec3 color;',\n\t\t\t'uniform sampler2D map;',\n\t\t\t'uniform float opacity;',\n\n\t\t\t'uniform int fogType;',\n\t\t\t'uniform vec3 fogColor;',\n\t\t\t'uniform float fogDensity;',\n\t\t\t'uniform float fogNear;',\n\t\t\t'uniform float fogFar;',\n\t\t\t'uniform float alphaTest;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvec4 texture = texture2D( map, vUV );',\n\n\t\t\t'\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\n\n\t\t\t'\tif ( gl_FragColor.a < alphaTest ) discard;',\n\n\t\t\t'\tif ( fogType > 0 ) {',\n\n\t\t\t'\t\tfloat fogFactor = 0.0;',\n\n\t\t\t'\t\tif ( fogType == 1 ) {',\n\n\t\t\t'\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );',\n\n\t\t\t'\t\t} else {',\n\n\t\t\t'\t\t\tconst float LOG2 = 1.442695;',\n\t\t\t'\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );',\n\t\t\t'\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\n\n\t\t\t'\t\t}',\n\n\t\t\t'\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );',\n\n\t\t\t'\t}',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.compileShader( vertexShader );\n\t\tgl.compileShader( fragmentShader );\n\n\t\tgl.attachShader( program, vertexShader );\n\t\tgl.attachShader( program, fragmentShader );\n\n\t\tgl.linkProgram( program );\n\n\t\treturn program;\n\n\t}\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn b.id - a.id;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLState( gl, extensions, utils ) {\n\n\tfunction ColorBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar color = new Vector4();\n\t\tvar currentColorMask = null;\n\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentDepthMask = null;\n\t\tvar currentDepthFunc = null;\n\t\tvar currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentStencilMask = null;\n\t\tvar currentStencilFunc = null;\n\t\tvar currentStencilRef = null;\n\t\tvar currentStencilFuncMask = null;\n\t\tvar currentStencilFail = null;\n\t\tvar currentStencilZFail = null;\n\t\tvar currentStencilZPass = null;\n\t\tvar currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t     currentStencilRef \t!== stencilRef \t||\n\t\t\t\t     currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t     currentStencilZFail !== stencilZFail ||\n\t\t\t\t     currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar colorBuffer = new ColorBuffer();\n\tvar depthBuffer = new DepthBuffer();\n\tvar stencilBuffer = new StencilBuffer();\n\n\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\tvar capabilities = {};\n\n\tvar compressedTextureFormats = null;\n\n\tvar currentProgram = null;\n\n\tvar currentBlending = null;\n\tvar currentBlendEquation = null;\n\tvar currentBlendSrc = null;\n\tvar currentBlendDst = null;\n\tvar currentBlendEquationAlpha = null;\n\tvar currentBlendSrcAlpha = null;\n\tvar currentBlendDstAlpha = null;\n\tvar currentPremultipledAlpha = false;\n\n\tvar currentFlipSided = null;\n\tvar currentCullFace = null;\n\n\tvar currentLineWidth = null;\n\n\tvar currentPolygonOffsetFactor = null;\n\tvar currentPolygonOffsetUnits = null;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tvar lineWidthAvailable = false;\n\tvar version = 0;\n\tvar glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tvar currentTextureSlot = null;\n\tvar currentBoundTextures = {};\n\n\tvar currentScissor = new Vector4();\n\tvar currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tvar texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tvar emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tenable( gl.BLEND );\n\tsetBlending( NormalBlending );\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 = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.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 ( capabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tcapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( capabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tcapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction getCompressedTextureFormats() {\n\n\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\tcompressedTextureFormats = [];\n\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t     extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t     extensions.get( 'WEBGL_compressed_texture_etc1' ) ||\n\t\t\t     extensions.get( 'WEBGL_compressed_texture_astc' ) ) {\n\n\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn compressedTextureFormats;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending !== NoBlending ) {\n\n\t\t\tenable( gl.BLEND );\n\n\t\t} else {\n\n\t\t\tdisable( gl.BLEND );\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\tcase AdditiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentBlendEquation = null;\n\t\t\tcurrentBlendSrc = null;\n\t\t\tcurrentBlendDst = null;\n\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t} else {\n\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t}\n\n\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tvar flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\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\tcapabilities = {};\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\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 _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); /* global WebGL2RenderingContext */\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, image );\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, image );\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\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\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\treturn _gl.NEAREST;\n\n\t\t}\n\n\t\treturn _gl.LINEAR;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tvar texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\tdelete _videoTextures[ texture.id ];\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tvar renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t// cube texture\n\n\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t} else {\n\n\t\t\t// 2D texture\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\t// remove all webgl properties\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tvar image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\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', texture );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image.length === 6 ) {\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\tvar cubeImage = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, texture, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t} else {\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t}\n\n\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\tvar extension;\n\n\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture );\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 && 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\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\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\timage = makePowerOfTwo( image );\n\n\t\t}\n\n\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type );\n\n\t\tsetTextureParameters( _gl.TEXTURE_2D, 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\tvar internalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\tif ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( _isWebGL2 ) {\n\n\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\tinternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, 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 {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\tgenerateMipmap( _gl.TEXTURE_2D, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tvar texture = renderTarget.texture;\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tvar id = texture.id;\n\t\tvar frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures[ id ] !== frame ) {\n\n\t\t\t_videoTextures[ id ] = frame;\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.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 ) {\n\n\tfunction convert( p ) {\n\n\t\tvar extension;\n\n\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\tif ( p === OneFactor ) return gl.ONE;\n\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\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\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 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(\n\t\t\t\t_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},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ArrayCamera( array ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array || [];\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebVRManager( renderer ) {\n\n\tvar scope = this;\n\n\tvar device = null;\n\tvar frameData = null;\n\n\tvar poseTarget = null;\n\n\tvar controllers = [];\n\tvar standingMatrix = new Matrix4();\n\tvar standingMatrixInverse = new Matrix4();\n\n\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\tframeData = new window.VRFrameData();\n\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t}\n\n\tvar matrixWorldInverse = new Matrix4();\n\tvar tempQuaternion = new Quaternion();\n\tvar tempPosition = new Vector3();\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\tcameraL.layers.enable( 1 );\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\tcameraR.layers.enable( 2 );\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tfunction isPresenting() {\n\n\t\treturn device !== null && device.isPresenting === true;\n\n\t}\n\n\tvar currentSize, currentPixelRatio;\n\n\tfunction onVRDisplayPresentChange() {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t\tanimation.start();\n\n\t\t} else if ( scope.enabled ) {\n\n\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t}\n\n\t//\n\n\tvar isTriggerPressed = false;\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 ( isTriggerPressed !== gamepad.buttons[ buttonId ].pressed ) {\n\n\t\t\t\t\tisTriggerPressed = gamepad.buttons[ buttonId ].pressed;\n\n\t\t\t\t\tif ( isTriggerPressed ) {\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\tthis.userHeight = 1.6;\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.setPoseTarget = function ( object ) {\n\n\t\tif ( object !== undefined ) poseTarget = object;\n\n\t};\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( device === null ) {\n\n\t\t\tcamera.position.set( 0, scope.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\tvar stageParameters = device.stageParameters;\n\n\t\tif ( stageParameters ) {\n\n\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\n\t\t} else {\n\n\t\t\tstandingMatrix.makeTranslation( 0, scope.userHeight, 0 );\n\n\t\t}\n\n\n\t\tvar pose = frameData.pose;\n\t\tvar poseObject = poseTarget !== null ? poseTarget : camera;\n\n\t\t// We want to manipulate poseObject by its position and quaternion components since users may rely on them.\n\t\tposeObject.matrix.copy( standingMatrix );\n\t\tposeObject.matrix.decompose( poseObject.position, poseObject.quaternion, poseObject.scale );\n\n\t\tif ( pose.orientation !== null ) {\n\n\t\t\ttempQuaternion.fromArray( pose.orientation );\n\t\t\tposeObject.quaternion.multiply( tempQuaternion );\n\n\t\t}\n\n\t\tif ( pose.position !== null ) {\n\n\t\t\ttempQuaternion.setFromRotationMatrix( standingMatrix );\n\t\t\ttempPosition.fromArray( pose.position );\n\t\t\ttempPosition.applyQuaternion( tempQuaternion );\n\t\t\tposeObject.position.add( tempPosition );\n\n\t\t}\n\n\t\tposeObject.updateMatrixWorld();\n\n\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t//\n\n\t\tcameraL.near = camera.near;\n\t\tcameraR.near = camera.near;\n\n\t\tcameraL.far = camera.far;\n\t\tcameraR.far = camera.far;\n\n\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t// TODO (mrdoob) Double check this code\n\n\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\tvar parent = poseObject.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t}\n\n\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t// HACK (mrdoob)\n\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t//\n\n\t\tvar layers = device.getLayers();\n\n\t\tif ( layers.length ) {\n\n\t\t\tvar layer = layers[ 0 ];\n\n\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t}\n\n\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t}\n\n\t\t}\n\n\t\tupdateControllers();\n\n\t\treturn cameraVR;\n\n\t};\n\n\tthis.getStandingMatrix = function () {\n\n\t\treturn standingMatrix;\n\n\t};\n\n\tthis.isPresenting = isPresenting;\n\n\t// Animation Loop\n\n\tvar animation = new WebGLAnimation();\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tanimation.setAnimationLoop( callback );\n\n\t};\n\n\tthis.submitFrame = function () {\n\n\t\tif ( isPresenting() ) device.submitFrame();\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebXRManager( renderer ) {\n\n\tvar gl = renderer.context;\n\n\tvar device = null;\n\tvar session = null;\n\n\tvar frameOfRef = null;\n\n\tvar pose = null;\n\n\tvar controllers = [];\n\tvar inputSources = [];\n\n\tfunction isPresenting() {\n\n\t\treturn session !== null && frameOfRef !== null;\n\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\n\t\tgl.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.setSession = function ( value, options ) {\n\n\t\tsession = value;\n\n\t\tif ( session !== null ) {\n\n\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\tsession.baseLayer = new XRWebGLLayer( session, gl );\n\t\t\tsession.requestFrameOfReference( options.frameOfReferenceType ).then( function ( value ) {\n\n\t\t\t\tframeOfRef = value;\n\n\t\t\t\trenderer.setFramebuffer( session.baseLayer.framebuffer );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t} );\n\n\t\t\t//\n\n\t\t\tinputSources = session.getInputSources();\n\n\t\t\tsession.addEventListener( 'inputsourceschange', function () {\n\n\t\t\t\tinputSources = session.getInputSources();\n\t\t\t\tconsole.log( inputSources );\n\n\t\t\t} );\n\n\t\t}\n\n\t};\n\n\tfunction updateCamera( camera, parent ) {\n\n\t\tif ( parent === null ) {\n\n\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t} else {\n\n\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t}\n\n\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\n\n\t}\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar parent = camera.parent;\n\t\t\tvar cameras = cameraVR.cameras;\n\n\t\t\t// apply camera.parent to cameraVR\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( var i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update camera and its children\n\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\t\tvar children = camera.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t}\n\n\t\treturn camera;\n\n\t};\n\n\tthis.isPresenting = isPresenting;\n\n\t// Animation Loop\n\n\tvar onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tpose = frame.getDevicePose( frameOfRef );\n\n\t\tif ( pose !== null ) {\n\n\t\t\tvar layer = session.baseLayer;\n\t\t\tvar views = frame.views;\n\n\t\t\tfor ( var i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tvar view = views[ i ];\n\t\t\t\tvar viewport = layer.getViewport( view );\n\t\t\t\tvar viewMatrix = pose.getViewMatrix( view );\n\n\t\t\t\tvar camera = cameraVR.cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t// HACK (mrdoob)\n\t\t\t\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\t\t\t\tcameraVR.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfor ( var i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tvar controller = controllers[ i ];\n\n\t\t\tvar inputSource = inputSources[ i ];\n\n\t\t\tif ( inputSource ) {\n\n\t\t\t\tvar inputPose = frame.getInputPose( inputSource, frameOfRef );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\tcontroller.matrix.elements = inputPose.pointerMatrix;\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\t\t_currentGeometryProgram = '',\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\tvar spriteRenderer;\n\n\tvar utils;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\t\textensions.get( 'WEBGL_depth_texture' );\n\t\textensions.get( 'OES_texture_float' );\n\t\textensions.get( 'OES_texture_float_linear' );\n\t\textensions.get( 'OES_texture_half_float' );\n\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\textensions.get( 'OES_standard_derivatives' );\n\t\textensions.get( 'OES_element_index_uint' );\n\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tstate = new WebGLState( _gl, extensions, utils );\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 );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\tspriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, 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 = ( 'xr' in navigator ) ? new WebXRManager( _this ) : new WebVRManager( _this );\n\n\tthis.vr = vr;\n\n\t// shadow map\n\n\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width,\n\t\t\theight: _height\n\t\t};\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( vr.isPresenting() ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = width * _pixelRatio;\n\t\t_canvas.height = height * _pixelRatio;\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width * _pixelRatio,\n\t\t\theight: _height * _pixelRatio\n\t\t};\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = width * pixelRatio;\n\t\t_canvas.height = height * pixelRatio;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function () {\n\n\t\treturn _currentViewport;\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t_viewport.set( x, _height - y - height, width, height );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t_scissor.set( x, _height - y - height, width, height );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tvar bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\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, material ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program, material );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program, material ) {\n\n\t\tstate.initAttributes();\n\n\t\tvar buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\n\t\t\tif ( ! material.isMeshPhongMaterial &&\n\t\t\t\t! material.isMeshStandardMaterial &&\n\t\t\t\t! material.isMeshNormalMaterial &&\n\t\t\t\tmaterial.flatShading === true ) {\n\n\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\n\n\t\t\t\t\tvar array = object.normalArray;\n\n\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\n\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\n\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\n\n\t\t\t\t\tarray[ i + 0 ] = nx;\n\t\t\t\t\tarray[ i + 1 ] = ny;\n\t\t\t\t\tarray[ i + 2 ] = nz;\n\n\t\t\t\t\tarray[ i + 3 ] = nx;\n\t\t\t\t\tarray[ i + 4 ] = ny;\n\t\t\t\t\tarray[ i + 5 ] = nz;\n\n\t\t\t\t\tarray[ i + 6 ] = nx;\n\t\t\t\t\tarray[ i + 7 ] = ny;\n\t\t\t\t\tarray[ i + 8 ] = nz;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.normal );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs && material.map ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.uv );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors && material.vertexColors !== NoColors ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.color );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\tvar program = setProgram( camera, fog, material, object );\n\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );\n\n\t\tvar updateBuffers = false;\n\n\t\tif ( geometryProgram !== _currentGeometryProgram ) {\n\n\t\t\t_currentGeometryProgram = geometryProgram;\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\t//\n\n\t\tvar index = geometry.index;\n\t\tvar position = geometry.attributes.position;\n\t\tvar rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tvar attribute;\n\t\tvar renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar dataCount = Infinity;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdataCount = index.count;\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\tdataCount = position.count;\n\n\t\t}\n\n\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t}\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 ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.initAttributes();\n\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( var name in programAttributes ) {\n\n\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t}\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.material ) {\n\n\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tvar onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( vr.isPresenting() ) return;\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tvar animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\tvr.setAnimationLoop( callback );\n\n\t\tanimation.start();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost ) return;\n\n\t\t// reset caching for this frame\n\n\t\t_currentGeometryProgram = '';\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// custom renderers\n\n\t\tvar spritesArray = currentRenderState.state.spritesArray;\n\n\t\tspriteRenderer.render( spritesArray, scene, camera );\n\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\tif ( renderTarget ) {\n\n\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\tscene.onAfterRender( _this, scene, camera );\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tvr.submitFrame();\n\n\t\t}\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t/*\n\t// TODO Duplicated code (Frustum)\n\n\tvar _sphere = new Sphere();\n\n\tfunction isObjectViewable( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null )\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere ).\n\t\tapplyMatrix4( object.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSpriteViewable( sprite ) {\n\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 0.7071067811865476;\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSphereViewable( sphere ) {\n\n\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\tif ( numPlanes === 0 ) return true;\n\n\t\tvar planes = _this.clippingPlanes,\n\n\t\t\tcenter = sphere.center,\n\t\t\tnegRad = - sphere.radius,\n\t\t\ti = 0;\n\n\t\tdo {\n\n\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t} while ( ++ i !== numPlanes );\n\n\t\treturn true;\n\n\t}\n\t*/\n\n\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushSprite( object );\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\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\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t_currentGeometryProgram = '';\n\n\t\t\trenderObjectImmediate( object, program, material );\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 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 ( materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\tproperties.update( material, 'lightsHash', lights.state.hash );\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\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\n\t\tmaterialProperties.lightsHash = lights.state.hash;\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\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 && materialProperties.lightsHash !== lights.state.hash ) {\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 || camera !== _currentCamera ) {\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\t// Avoid unneeded uniform updates per ArrayCamera's sub-camera\n\n\t\t\tif ( _currentCamera !== ( _currentArrayCamera || camera ) ) {\n\n\t\t\t\t_currentCamera = ( _currentArrayCamera || 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.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.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\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 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 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.setTexture = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTexture( texture, slot ) {\n\n\t\t\tif ( ! warned ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\twarned = true;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTextureCube = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t// TODO: unify these code paths\n\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t} else {\n\n\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\t//\n\n\tthis.setFramebuffer = function ( value ) {\n\n\t\t_framebuffer = value;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tvar framebuffer = _framebuffer;\n\t\tvar isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( framebuffer ) {\n\n\t\t\tvar restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level ) {\n\n\t\tvar width = texture.image.width;\n\t\tvar height = texture.image.height;\n\t\tvar glFormat = utils.convert( texture.format );\n\n\t\tthis.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( _gl.TEXTURE_2D, level || 0, glFormat, position.x, position.y, width, height, 0 );\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\tvar width = srcTexture.image.width;\n\t\tvar height = srcTexture.image.height;\n\t\tvar glFormat = utils.convert( dstTexture.format );\n\t\tvar glType = utils.convert( dstTexture.type );\n\n\t\tthis.setTexture2D( dstTexture, 0 );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction FogExp2( color, density ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nFogExp2.prototype.clone = function () {\n\n\treturn new FogExp2( this.color, this.density );\n\n};\n\nFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'FogExp2',\n\t\tcolor: this.color.getHex(),\n\t\tdensity: this.density\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Fog( color, near, far ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\n\tthis.near = ( near !== undefined ) ? near : 1;\n\tthis.far = ( far !== undefined ) ? far : 1000;\n\n}\n\nFog.prototype.isFog = true;\n\nFog.prototype.clone = function () {\n\n\treturn new Fog( this.color, this.near, this.far );\n\n};\n\nFog.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'Fog',\n\t\tcolor: this.color.getHex(),\n\t\tnear: this.near,\n\t\tfar: this.far\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Scene() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Scene';\n\n\tthis.background = null;\n\tthis.fog = null;\n\tthis.overrideMaterial = null;\n\n\tthis.autoUpdate = true; // checked by the renderer\n\n}\n\nScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Scene,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *\tuvOffset: new THREE.Vector2(),\n *\tuvScale: new THREE.Vector2()\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.fog = false;\n\tthis.lights = false;\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\treturn this;\n\n};\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\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\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\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\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\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: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\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.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\n\t\treturn new LineSegments( geometry, material );\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\t\t\tvar precisionSq = precision * precision;\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\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 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 > precisionSq ) 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 > precisionSq ) 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 > precisionSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\tfor ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\tstart.copy( vertices[ i ] );\n\t\t\t\t\tend.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() )\n\n} );\n\n/**\n * @author mgreter / http://github.com/mgreter\n */\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *  size: <float>,\n *  sizeAttenuation: <bool>\n *\n *  morphTargets: <bool>\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 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// 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: <int>, // number of points on the curves\n *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n *  depth: <float>, // Depth to extrude the shape\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into the original shape bevel goes\n *  bevelSize: <float>, // how far from shape outline is bevel\n *  bevelSegments: <int>, // number of bevel layers\n *\n *  extrudePath: <THREE.Curve> // curve to extrude shape along\n *\n *  UVGenerator: <Object> // 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: <THREE.Font>, // font\n *\n *  size: <float>, // size of the text\n *  height: <float>, // thickness to extrude text\n *  curveSegments: <int>, // number of points on the curves\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into text bevel goes\n *  bevelSize: <float> // 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 astrodud / http://astrodud.isgreat.org/\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: <THREE.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: <hex>,\n *  roughness: <float>,\n *  metalness: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  roughnessMap: new THREE.Texture( <Image> ),\n *\n *  metalnessMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  envMapIntensity: <float>\n *\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\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: <float>\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: <hex>,\n *  specular: <hex>,\n *  shininess: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\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( <Image> )\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: <float>,\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\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: <hex>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\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 alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\n *\n *  scale: <float>,\n *  dashSize: <float>,\n *  gapSize: <float>\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\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tvar scope = this;\n\n\tvar isLoading = false;\n\tvar itemsLoaded = 0;\n\tvar itemsTotal = 0;\n\tvar urlModifier = undefined;\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\t\treturn this;\n\n\t};\n\n}\n\nvar DefaultLoadingManager = new LoadingManager();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar loading = {};\n\nfunction FileLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FileLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tvar response;\n\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tvar response = this.response;\n\n\t\t\t\tCache.add( url, response );\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( value ) {\n\n\t\tthis.requestHeader = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( CompressedTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar images = [];\n\n\t\tvar texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Nikos M. / https://github.com/foo123/\n *\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( DataTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new DataTexture();\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t}\n\n\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction ImageLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( ImageLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction CubeTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( CubeTextureLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new CubeTexture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tvar loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction TextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( TextureLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new Texture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tvar isJPEG = url.search( /\\.(jpg|jpeg)$/ ) > 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 <d\n\n\t},\n\n\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t// getPoint() depends on getLength\n\n\tgetLength: function () {\n\n\t\tvar lens = this.getCurveLengths();\n\t\treturn lens[ lens.length - 1 ];\n\n\t},\n\n\t// cacheLengths must be recalculated.\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.cacheLengths = null;\n\t\tthis.getCurveLengths();\n\n\t},\n\n\t// Compute lengths and cache them\n\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\n\tgetCurveLengths: function () {\n\n\t\t// We use cache values if curves and cache array are same length\n\n\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\treturn this.cacheLengths;\n\n\t\t}\n\n\t\t// Get length of sub-curve\n\t\t// Push sums into cached array\n\n\t\tvar lengths = [], sums = 0;\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tsums += this.curves[ i ].getLength();\n\t\t\tlengths.push( sums );\n\n\t\t}\n\n\t\tthis.cacheLengths = lengths;\n\n\t\treturn lengths;\n\n\t},\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 40;\n\n\t\tvar points = [];\n\n\t\tfor ( var i = 0; i <= divisions; i ++ ) {\n\n\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t}\n\n\t\tif ( this.autoClose ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tgetPoints: function ( divisions ) {\n\n\t\tdivisions = divisions || 12;\n\n\t\tvar points = [], last;\n\n\t\tfor ( var i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\tvar curve = curves[ i ];\n\t\t\tvar resolution = ( curve && curve.isEllipseCurve ) ? divisions * 2\n\t\t\t\t: ( curve && ( curve.isLineCurve || curve.isLineCurve3 ) ) ? 1\n\t\t\t\t\t: ( curve && curve.isSplineCurve ) ? divisions * curve.points.length\n\t\t\t\t\t\t: divisions;\n\n\t\t\tvar pts = curve.getPoints( resolution );\n\n\t\t\tfor ( var j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\tvar point = pts[ j ];\n\n\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\tpoints.push( point );\n\t\t\t\tlast = point;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.autoClose && points.length > 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 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 *\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 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 * 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 * 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 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 * 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 * @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 *\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\tthis.validate();\n\tthis.optimize();\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\tparse: function ( json ) {\n\n\t\tif ( json.type === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t\t}\n\n\t\tvar trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type );\n\n\t\tif ( json.times === undefined ) {\n\n\t\t\tvar times = [], values = [];\n\n\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\tjson.times = times;\n\t\t\tjson.values = values;\n\n\t\t}\n\n\t\t// derived classes can define a static parse method\n\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\treturn trackType.parse( json );\n\n\t\t} else {\n\n\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t}\n\n\t},\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\t_getTrackTypeForValueTypeName: function ( typeName ) {\n\n\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\tcase 'scalar':\n\t\t\tcase 'double':\n\t\t\tcase 'float':\n\t\t\tcase 'number':\n\t\t\tcase 'integer':\n\n\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\tcase 'vector':\n\t\t\tcase 'vector2':\n\t\t\tcase 'vector3':\n\t\t\tcase 'vector4':\n\n\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\tcase 'color':\n\n\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\tcase 'quaternion':\n\n\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\tcase 'bool':\n\t\t\tcase 'boolean':\n\n\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\tcase 'string':\n\n\t\t\t\treturn StringKeyframeTrack;\n\n\t\t}\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\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;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\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 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\tthis.optimize();\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( KeyframeTrack.parse( 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},\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\toptimize: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction MaterialLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.textures = {};\n\n}\n\nObject.assign( MaterialLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tvar material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\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.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// 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\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\treturn material;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferGeometryLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( BufferGeometryLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tvar attributes = json.data.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t}\n\n\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tvar center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nvar TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nvar LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\t// Merges multi-byte utf-8 characters.\n\t\treturn decodeURIComponent( escape( s ) );\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tvar index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\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, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = 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, texturePath ) {\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, texturePath, this.crossOrigin );\n\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ObjectLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.texturePath = '';\n\n}\n\nObject.assign( ObjectLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.texturePath === '' ) {\n\n\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\t\treturn this;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tparse: function ( json, onLoad ) {\n\n\t\tvar shapes = this.parseShape( json.shapes );\n\t\tvar geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tvar textures = this.parseTextures( json.textures, images );\n\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\tif ( json.animations ) {\n\n\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t}\n\n\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t},\n\n\tparseShape: function ( json ) {\n\n\t\tvar shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t},\n\n\tparseGeometries: function ( json, shapes ) {\n\n\t\tvar geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar geometry;\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t},\n\n\tparseMaterials: function ( json, textures ) {\n\n\t\tvar materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t},\n\n\tparseAnimations: function ( json ) {\n\n\t\tvar animations = [];\n\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\tvar data = json[ i ];\n\n\t\t\tvar clip = AnimationClip.parse( data );\n\n\t\t\tif ( data.uuid !== undefined ) clip.uuid = data.uuid;\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t},\n\n\tparseImages: function ( json, onLoad ) {\n\n\t\tvar scope = this;\n\t\tvar images = {};\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\tvar loader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( var i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tvar image = json[ i ];\n\t\t\t\tvar url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( var j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar currentUrl = url[ j ];\n\n\t\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( currentUrl ) ? currentUrl : scope.texturePath + currentUrl;\n\n\t\t\t\t\t\timages[ image.uuid ].push( loadImage( path ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t},\n\n\tparseTextures: function ( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tvar textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( Array.isArray( images[ data.image ] ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( images[ data.image ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture = new Texture( images[ data.image ] );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t},\n\n\tparseObject: function ( data, geometries, materials ) {\n\n\t\tvar object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tvar levels = data.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tvar level = levels[ l ];\n\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n} );\n\nvar TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tSphericalReflectionMapping: SphericalReflectionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nvar TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nvar TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n};\n\n/**\n * @author thespite / http://clicktorelease.com/\n */\n\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\tthis.options = undefined;\n\n}\n\nImageBitmapLoader.prototype = {\n\n\tconstructor: ImageBitmapLoader,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tfetch( url ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t} );\n\n\t},\n\n\tsetCrossOrigin: function ( /* value */ ) {\n\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n **/\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tvar shapes = [];\n\n\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success    or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t//  with the horizontal line through inPt, left of inPt\n\t\t\t//  not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tvar inside = false;\n\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\tvar subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tvar betterShapeHoles = [];\n\t\tvar newShapes = [];\n\t\tvar newShapeHoles = [];\n\t\tvar mainIdx = 0;\n\t\tvar tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tvar ambiguous = false;\n\t\t\tvar toChange = [];\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar tmpHoles;\n\n\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size ) {\n\n\t\tif ( size === undefined ) size = 100;\n\n\t\tvar shapes = [];\n\t\tvar paths = createPaths( text, size, this.data );\n\n\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, data ) {\n\n\tvar chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // see #13988\n\tvar scale = size / data.resolution;\n\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tvar paths = [];\n\n\tvar offsetX = 0, offsetY = 0;\n\n\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\tvar char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tvar ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tvar glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) return;\n\n\tvar path = new ShapePath();\n\n\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\tvar action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction FontLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FontLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tvar font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar context;\n\nvar AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( context === undefined ) {\n\n\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\tcontext = value;\n\n\t}\n\n};\n\n/**\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction AudioLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( AudioLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\tvar bufferCopy = buffer.slice( 0 );\n\n\t\t\tvar context = AudioContext.getContext();\n\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t} );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: ( function () {\n\n\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\tvar eyeRight = new Matrix4();\n\t\tvar eyeLeft = new Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tinstance = this;\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * Camera for rendering cube maps\n *\t- renders scene into axis-aligned cube\n *\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CubeCamera( near, far, cubeResolution ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tvar fov = 90, aspect = 1;\n\n\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tvar renderTarget = this.renderTarget;\n\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderTarget.activeCubeFace = 0;\n\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 1;\n\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 2;\n\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 3;\n\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 4;\n\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderTarget.activeCubeFace = 5;\n\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tvar renderTarget = this.renderTarget;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\trenderTarget.activeCubeFace = i;\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioListener() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'AudioListener';\n\n\tthis.context = AudioContext.getContext();\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( this.context.destination );\n\n\tthis.filter = null;\n\n}\n\nAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: AudioListener,\n\n\tgetInput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tremoveFilter: function ( ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.filter;\n\n\t},\n\n\tsetFilter: function ( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t},\n\n\tgetMasterVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetMasterVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar listener = this.context.listener;\n\t\t\tvar up = this.up;\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tif ( listener.positionX ) {\n\n\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t} else {\n\n\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction Audio( listener ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Audio';\n\n\tthis.context = listener.context;\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( listener.getInput() );\n\n\tthis.autoplay = false;\n\n\tthis.buffer = null;\n\tthis.loop = false;\n\tthis.startTime = 0;\n\tthis.offset = 0;\n\tthis.playbackRate = 1;\n\tthis.isPlaying = false;\n\tthis.hasPlaybackControl = true;\n\tthis.sourceType = 'empty';\n\n\tthis.filters = [];\n\n}\n\nAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Audio,\n\n\tgetOutput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tsetNodeSource: function ( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetMediaElementSource: function ( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetBuffer: function ( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t},\n\n\tplay: function () {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar source = this.context.createBufferSource();\n\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\tthis.startTime = this.context.currentTime;\n\t\tsource.start( this.startTime, this.offset );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\treturn this.connect();\n\n\t},\n\n\tpause: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.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.offset = 0;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t},\n\n\tconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilters: function () {\n\n\t\treturn this.filters;\n\n\t},\n\n\tsetFilters: function ( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value;\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t},\n\n\tsetFilter: function ( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t},\n\n\tsetPlaybackRate: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetPlaybackRate: function () {\n\n\t\treturn this.playbackRate;\n\n\t},\n\n\tonEnded: function () {\n\n\t\tthis.isPlaying = false;\n\n\t},\n\n\tgetLoop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t},\n\n\tsetLoop: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PositionalAudio( listener ) {\n\n\tAudio.call( this, listener );\n\n\tthis.panner = this.context.createPanner();\n\tthis.panner.connect( this.gain );\n\n}\n\nPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\tconstructor: PositionalAudio,\n\n\tgetOutput: function () {\n\n\t\treturn this.panner;\n\n\t},\n\n\tgetRefDistance: function () {\n\n\t\treturn this.panner.refDistance;\n\n\t},\n\n\tsetRefDistance: function ( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetRolloffFactor: function () {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t},\n\n\tsetRolloffFactor: function ( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetDistanceModel: function () {\n\n\t\treturn this.panner.distanceModel;\n\n\t},\n\n\tsetDistanceModel: function ( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxDistance: function () {\n\n\t\treturn this.panner.maxDistance;\n\n\t},\n\n\tsetMaxDistance: function ( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t},\n\n\tsetDirectionalCone: function ( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar panner = this.panner;\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\tpanner.setPosition( position.x, position.y, position.z );\n\t\t\tpanner.setOrientation( orientation.x, orientation.y, orientation.z );\n\n\t\t};\n\n\t} )()\n\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioAnalyser( audio, fftSize ) {\n\n\tthis.analyser = audio.context.createAnalyser();\n\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\taudio.getOutput().connect( this.analyser );\n\n}\n\nObject.assign( AudioAnalyser.prototype, {\n\n\tgetFrequencyData: function () {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t},\n\n\tgetAverageFrequency: function () {\n\n\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n} );\n\n/**\n *\n * Buffered scene graph property that allows weighted accumulation.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tvar bufferType = Float64Array,\n\t\tmixFunction;\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tbufferType = Array;\n\t\t\tmixFunction = this._select;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\n\t}\n\n\tthis.buffer = new bufferType( valueSize * 4 );\n\t// layout: [ incoming | accu0 | accu1 | orig ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\n\tthis._mixBufferRegion = mixFunction;\n\n\tthis.cumulativeWeight = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu<i>'\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<i>' 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\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\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\n\t\tif ( deltaTime === 0 ) return time;\n\n\t\tvar duration = this._clip.duration,\n\n\t\t\tloop = this.loop,\n\t\t\tloopCount = this._loopCount;\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\tvar pingPong = ( loop === LoopPingPong );\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 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 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 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, meshPerAttribute ) {\n\n\tBufferAttribute.call( this, array, itemSize );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Clock( autoStart ) {\n\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\tthis.startTime = 0;\n\tthis.oldTime = 0;\n\tthis.elapsedTime = 0;\n\n\tthis.running = false;\n\n}\n\nObject.assign( Clock.prototype, {\n\n\tstart: function () {\n\n\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t},\n\n\tgetElapsedTime: function () {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t},\n\n\tgetDelta: function () {\n\n\t\tvar diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The poles (phi) are at the positive and negative y axis.\n * The equator starts at positive z.\n */\n\nfunction Spherical( radius, phi, theta ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\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 ( vec3 ) {\n\n\t\tthis.radius = vec3.length();\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( vec3.x, vec3.z ); // equator angle around y-up axis\n\t\t\tthis.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\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 ( vec3 ) {\n\n\t\tthis.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z );\n\t\tthis.theta = Math.atan2( vec3.x, vec3.z );\n\t\tthis.y = vec3.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 alteredq / http://alteredqualia.com/\n */\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length * 3;\n\n\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\nVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\nVertexNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\tvar idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction SpotLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = [\n\t\t0, 0, 0, \t0, 0, 1,\n\t\t0, 0, 0, \t1, 0, 1,\n\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t0, 0, 0, \t0, 1, 1,\n\t\t0, 0, 0, \t0, - 1, 1\n\t];\n\n\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\tvar p2 = ( j / l ) * Math.PI * 2;\n\n\t\tpositions.push(\n\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t);\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.cone = new LineSegments( geometry, material );\n\tthis.add( this.cone );\n\n\tthis.update();\n\n}\n\nSpotLightHelper.prototype = Object.create( Object3D.prototype );\nSpotLightHelper.prototype.constructor = SpotLightHelper;\n\nSpotLightHelper.prototype.dispose = function () {\n\n\tthis.cone.geometry.dispose();\n\tthis.cone.material.dispose();\n\n};\n\nSpotLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\tvar vector2 = new Vector3();\n\n\treturn function update() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n}();\n\n/**\n * @author Sean Griffin / http://twitter.com/sgrif\n * @author Michael Guerrero / http://realitymeltdown.com\n * @author mrdoob / http://mrdoob.com/\n * @author ikerr / http://verold.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction getBoneList( object ) {\n\n\tvar boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nfunction SkeletonHelper( object ) {\n\n\tvar bones = getBoneList( object );\n\n\tvar geometry = new BufferGeometry();\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar color1 = new Color( 0, 0, 1 );\n\tvar color2 = new Color( 0, 1, 0 );\n\n\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\tvar bone = bones[ i ];\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t}\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.root = object;\n\tthis.bones = bones;\n\n\tthis.matrix = object.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n}\n\nSkeletonHelper.prototype = Object.create( LineSegments.prototype );\nSkeletonHelper.prototype.constructor = SkeletonHelper;\n\nSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\tvar vector = new Vector3();\n\n\tvar boneMatrix = new Matrix4();\n\tvar matrixWorldInv = new Matrix4();\n\n\treturn function updateMatrixWorld( force ) {\n\n\t\tvar bones = this.bones;\n\n\t\tvar geometry = this.geometry;\n\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PointLightHelper( light, sphereSize, color ) {\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.color = color;\n\n\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.matrix = this.light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n\n\t/*\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tvar d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n}\n\nPointLightHelper.prototype = Object.create( Mesh.prototype );\nPointLightHelper.prototype.constructor = PointLightHelper;\n\nPointLightHelper.prototype.dispose = function () {\n\n\tthis.geometry.dispose();\n\tthis.material.dispose();\n\n};\n\nPointLightHelper.prototype.update = function () {\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.material.color.copy( this.light.color );\n\n\t}\n\n\t/*\n\tvar d = this.light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.visible = true;\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\t*/\n\n};\n\n/**\n * @author abelnation / http://github.com/abelnation\n * @author Mugen87 / http://github.com/Mugen87\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction RectAreaLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\tthis.line = new Line( geometry, material );\n\tthis.add( this.line );\n\n\n\tthis.update();\n\n}\n\nRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\nRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\nRectAreaLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nRectAreaLightHelper.prototype.update = function () {\n\n\t// calculate new dimensions of the helper\n\n\tvar hx = this.light.width * 0.5;\n\tvar hy = this.light.height * 0.5;\n\n\tvar position = this.line.geometry.attributes.position;\n\tvar array = position.array;\n\n\t// update vertices\n\n\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\tposition.needsUpdate = true;\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.line.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.line.material.color.copy( this.light.color );\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction HemisphereLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new OctahedronBufferGeometry( size );\n\tgeometry.rotateY( Math.PI * 0.5 );\n\n\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\tvar position = geometry.getAttribute( 'position' );\n\tvar colors = new Float32Array( position.count * 3 );\n\n\tgeometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\tthis.add( new Mesh( geometry, this.material ) );\n\n\tthis.update();\n\n}\n\nHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\nHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\nHemisphereLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nHemisphereLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\n\tvar color1 = new Color();\n\tvar color2 = new Color();\n\n\treturn function update() {\n\n\t\tvar mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\tcolor1.copy( this.light.color );\n\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction GridHelper( size, divisions, color1, color2 ) {\n\n\tsize = size || 10;\n\tdivisions = divisions || 10;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar center = divisions / 2;\n\tvar step = size / divisions;\n\tvar halfSize = size / 2;\n\n\tvar vertices = [], colors = [];\n\n\tfor ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\tvar color = i === center ? color1 : color2;\n\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nGridHelper.prototype = Object.create( LineSegments.prototype );\nGridHelper.prototype.constructor = GridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n * @author Hectate / http://www.github.com/Hectate\n */\n\nfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\tradius = radius || 10;\n\tradials = radials || 16;\n\tcircles = circles || 8;\n\tdivisions = divisions || 64;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar x, z;\n\tvar v, i, j, r, color;\n\n\t// create the radials\n\n\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\tx = Math.sin( v ) * radius;\n\t\tz = Math.cos( v ) * radius;\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tvertices.push( x, 0, z );\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tcolors.push( color.r, color.g, color.b );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t}\n\n\t// create the circles\n\n\tfor ( i = 0; i <= circles; i ++ ) {\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tr = radius - ( radius / circles * i );\n\n\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t// first vertex\n\n\t\t\tv = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t// second vertex\n\n\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nPolarGridHelper.prototype = Object.create( LineSegments.prototype );\nPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t// FaceNormalsHelper only supports THREE.Geometry\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length;\n\n\t} else {\n\n\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\tthis.update();\n\n}\n\nFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\nFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\nFaceNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tvar vertices = objGeometry.vertices;\n\n\t\tvar faces = objGeometry.faces;\n\n\t\tvar idx = 0;\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar normal = face.normal;\n\n\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t.divideScalar( 3 )\n\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction DirectionalLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tif ( size === undefined ) size = 1;\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [\n\t\t- size, size, 0,\n\t\tsize, size, 0,\n\t\tsize, - size, 0,\n\t\t- size, - size, 0,\n\t\t- size, size, 0\n\t], 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.lightPlane = new Line( geometry, material );\n\tthis.add( this.lightPlane );\n\n\tgeometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\tthis.targetLine = new Line( geometry, material );\n\tthis.add( this.targetLine );\n\n\tthis.update();\n\n}\n\nDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\nDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\nDirectionalLightHelper.prototype.dispose = function () {\n\n\tthis.lightPlane.geometry.dispose();\n\tthis.lightPlane.material.dispose();\n\tthis.targetLine.geometry.dispose();\n\tthis.targetLine.material.dispose();\n\n};\n\nDirectionalLightHelper.prototype.update = function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar v3 = new Vector3();\n\n\treturn function update() {\n\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\tv3.subVectors( v2, v1 );\n\n\t\tthis.lightPlane.lookAt( v3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( v3 );\n\t\tthis.targetLine.scale.z = v3.length();\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author Mugen87 / https://github.com/Mugen87\n *\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nfunction CameraHelper( camera ) {\n\n\tvar geometry = new BufferGeometry();\n\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar pointMap = {};\n\n\t// colors\n\n\tvar colorFrustum = new Color( 0xffaa00 );\n\tvar colorCone = new Color( 0xff0000 );\n\tvar colorUp = new Color( 0x00aaff );\n\tvar colorTarget = new Color( 0xffffff );\n\tvar colorCross = new Color( 0x333333 );\n\n\t// near\n\n\taddLine( 'n1', 'n2', colorFrustum );\n\taddLine( 'n2', 'n4', colorFrustum );\n\taddLine( 'n4', 'n3', colorFrustum );\n\taddLine( 'n3', 'n1', colorFrustum );\n\n\t// far\n\n\taddLine( 'f1', 'f2', colorFrustum );\n\taddLine( 'f2', 'f4', colorFrustum );\n\taddLine( 'f4', 'f3', colorFrustum );\n\taddLine( 'f3', 'f1', colorFrustum );\n\n\t// sides\n\n\taddLine( 'n1', 'f1', colorFrustum );\n\taddLine( 'n2', 'f2', colorFrustum );\n\taddLine( 'n3', 'f3', colorFrustum );\n\taddLine( 'n4', 'f4', colorFrustum );\n\n\t// cone\n\n\taddLine( 'p', 'n1', colorCone );\n\taddLine( 'p', 'n2', colorCone );\n\taddLine( 'p', 'n3', colorCone );\n\taddLine( 'p', 'n4', colorCone );\n\n\t// up\n\n\taddLine( 'u1', 'u2', colorUp );\n\taddLine( 'u2', 'u3', colorUp );\n\taddLine( 'u3', 'u1', colorUp );\n\n\t// target\n\n\taddLine( 'c', 't', colorTarget );\n\taddLine( 'p', 'c', colorCross );\n\n\t// cross\n\n\taddLine( 'cn1', 'cn2', colorCross );\n\taddLine( 'cn3', 'cn4', colorCross );\n\n\taddLine( 'cf1', 'cf2', colorCross );\n\taddLine( 'cf3', 'cf4', colorCross );\n\n\tfunction addLine( a, b, color ) {\n\n\t\taddPoint( a, color );\n\t\taddPoint( b, color );\n\n\t}\n\n\tfunction addPoint( id, color ) {\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\tpointMap[ id ] = [];\n\n\t\t}\n\n\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.camera = camera;\n\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\tthis.matrix = camera.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.pointMap = pointMap;\n\n\tthis.update();\n\n}\n\nCameraHelper.prototype = Object.create( LineSegments.prototype );\nCameraHelper.prototype.constructor = CameraHelper;\n\nCameraHelper.prototype.update = function () {\n\n\tvar geometry, pointMap;\n\n\tvar vector = new Vector3();\n\tvar camera = new Camera();\n\n\tfunction setPoint( point, x, y, z ) {\n\n\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\tvar points = pointMap[ point ];\n\n\t\tif ( points !== undefined ) {\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn function update() {\n\n\t\tgeometry = this.geometry;\n\t\tpointMap = this.pointMap;\n\n\t\tvar w = 1, h = 1;\n\n\t\t// we need just camera projection matrix\n\t\t// world matrix must be identity\n\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\tsetPoint( 'f2', w, - h, 1 );\n\t\tsetPoint( 'f3', - w, h, 1 );\n\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n */\n\nfunction BoxHelper( object, color ) {\n\n\tthis.object = object;\n\n\tif ( color === undefined ) color = 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\tvar positions = new Float32Array( 8 * 3 );\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nBoxHelper.prototype = Object.create( LineSegments.prototype );\nBoxHelper.prototype.constructor = BoxHelper;\n\nBoxHelper.prototype.update = ( function () {\n\n\tvar box = new Box3();\n\n\treturn function update( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tbox.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tvar min = box.min;\n\t\tvar max = box.max;\n\n\t\t/*\n\t\t  5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tvar position = this.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t};\n\n} )();\n\nBoxHelper.prototype.setFromObject = function ( object ) {\n\n\tthis.object = object;\n\tthis.update();\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3Helper( box, hex ) {\n\n\tthis.type = 'Box3Helper';\n\n\tthis.box = box;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\tvar positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.geometry.computeBoundingSphere();\n\n}\n\nBox3Helper.prototype = Object.create( LineSegments.prototype );\nBox3Helper.prototype.constructor = Box3Helper;\n\nBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar box = this.box;\n\n\tif ( box.isEmpty() ) return;\n\n\tbox.getCenter( this.position );\n\n\tbox.getSize( this.scale );\n\n\tthis.scale.multiplyScalar( 0.5 );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction PlaneHelper( plane, size, hex ) {\n\n\tthis.type = 'PlaneHelper';\n\n\tthis.plane = plane;\n\n\tthis.size = ( size === undefined ) ? 1 : size;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tgeometry.computeBoundingSphere();\n\n\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t//\n\n\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\tvar geometry2 = new BufferGeometry();\n\tgeometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\tgeometry2.computeBoundingSphere();\n\n\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) );\n\n}\n\nPlaneHelper.prototype = Object.create( Line.prototype );\nPlaneHelper.prototype.constructor = PlaneHelper;\n\nPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar scale = - this.plane.constant;\n\n\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\tthis.lookAt( this.plane.normal );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author zz85 / http://github.com/zz85\n * @author bhouston / http://clara.io\n *\n * Creates an arrow for visualizing directions\n *\n * Parameters:\n *  dir - Vector3\n *  origin - Vector3\n *  length - Number\n *  color - color in hex value\n *  headLength - Number\n *  headWidth - Number\n */\n\nvar lineGeometry, coneGeometry;\n\nfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t// dir is assumed to be normalized\n\n\tObject3D.call( this );\n\n\tif ( color === undefined ) color = 0xffff00;\n\tif ( length === undefined ) length = 1;\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tif ( lineGeometry === undefined ) {\n\n\t\tlineGeometry = new BufferGeometry();\n\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\tconeGeometry.translate( 0, - 0.5, 0 );\n\n\t}\n\n\tthis.position.copy( origin );\n\n\tthis.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) );\n\tthis.line.matrixAutoUpdate = false;\n\tthis.add( this.line );\n\n\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\n\tthis.cone.matrixAutoUpdate = false;\n\tthis.add( this.cone );\n\n\tthis.setDirection( dir );\n\tthis.setLength( length, headLength, headWidth );\n\n}\n\nArrowHelper.prototype = Object.create( Object3D.prototype );\nArrowHelper.prototype.constructor = ArrowHelper;\n\nArrowHelper.prototype.setDirection = ( function () {\n\n\tvar axis = new Vector3();\n\tvar radians;\n\n\treturn function setDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tradians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t}\n\n\t};\n\n}() );\n\nArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\n\tthis.line.updateMatrix();\n\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\tthis.cone.position.y = length;\n\tthis.cone.updateMatrix();\n\n};\n\nArrowHelper.prototype.setColor = function ( color ) {\n\n\tthis.line.material.color.copy( color );\n\tthis.cone.material.color.copy( color );\n\n};\n\n/**\n * @author sroucheray / http://sroucheray.org/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AxesHelper( size ) {\n\n\tsize = size || 1;\n\n\tvar vertices = [\n\t\t0, 0, 0,\tsize, 0, 0,\n\t\t0, 0, 0,\t0, size, 0,\n\t\t0, 0, 0,\t0, 0, size\n\t];\n\n\tvar colors = [\n\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t0, 0, 1,\t0, 0.6, 1\n\t];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nAxesHelper.prototype = Object.create( LineSegments.prototype );\nAxesHelper.prototype.constructor = AxesHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nvar LineStrip = 0;\n\nvar LinePieces = 1;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials ) {\n\n\tif ( materials === undefined ) materials = [];\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tvar pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tvar pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tvar geometry = new Geometry();\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\tthis.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( _Math, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn _Math.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tvar v1;\n\n\t\treturn function getPosition() {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t};\n\n\t}(),\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\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\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\nvar ImageUtils = {\n\n\tcrossOrigin: undefined,\n\n\tloadTexture: function ( url, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\tvar loader = new TextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\tvar loader = new CubeTextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadCompressedTexture: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t},\n\n\tloadCompressedTextureCube: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t}\n\n};\n\n//\n\nfunction Projector() {\n\n\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\tthis.projectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\tvector.project( camera );\n\n\t};\n\n\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\tvector.unproject( camera );\n\n\t};\n\n\tthis.pickingRay = function () {\n\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t};\n\n}\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tthis.clear = function () {};\n\tthis.render = function () {};\n\tthis.setClearColor = function () {};\n\tthis.setSize = function () {};\n\n}\n\n//\n\nvar SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js' );\n\n}\n\nexport { WebGLRenderTargetCube, WebGLRenderTarget, WebGLRenderer, ShaderLib, UniformsLib, UniformsUtils, ShaderChunk, FogExp2, Fog, Scene, Sprite, LOD, SkinnedMesh, Skeleton, Bone, Mesh, LineSegments, LineLoop, Line, Points, Group, VideoTexture, DataTexture, CompressedTexture, CubeTexture, CanvasTexture, DepthTexture, Texture, CompressedTextureLoader, DataTextureLoader, CubeTextureLoader, TextureLoader, ObjectLoader, MaterialLoader, BufferGeometryLoader, DefaultLoadingManager, LoadingManager, JSONLoader, ImageLoader, ImageBitmapLoader, FontLoader, FileLoader, Loader, LoaderUtils, Cache, AudioLoader, SpotLightShadow, SpotLight, PointLight, RectAreaLight, HemisphereLight, DirectionalLightShadow, DirectionalLight, AmbientLight, LightShadow, Light, StereoCamera, PerspectiveCamera, OrthographicCamera, CubeCamera, ArrayCamera, Camera, AudioListener, PositionalAudio, AudioContext, AudioAnalyser, Audio, VectorKeyframeTrack, StringKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, ColorKeyframeTrack, BooleanKeyframeTrack, PropertyMixer, PropertyBinding, KeyframeTrack, AnimationUtils, AnimationObjectGroup, AnimationMixer, AnimationClip, Uniform, InstancedBufferGeometry, BufferGeometry, Geometry, InterleavedBufferAttribute, InstancedInterleavedBuffer, InterleavedBuffer, InstancedBufferAttribute, Face3, Object3D, Raycaster, Layers, EventDispatcher, Clock, QuaternionLinearInterpolant, LinearInterpolant, DiscreteInterpolant, CubicInterpolant, Interpolant, Triangle, _Math as Math, Spherical, Cylindrical, Plane, Frustum, Sphere, Ray, Matrix4, Matrix3, Box3, Box2, Line3, Euler, Vector4, Vector3, Vector2, Quaternion, Color, ImmediateRenderObject, VertexNormalsHelper, SpotLightHelper, SkeletonHelper, PointLightHelper, RectAreaLightHelper, HemisphereLightHelper, GridHelper, PolarGridHelper, FaceNormalsHelper, DirectionalLightHelper, CameraHelper, BoxHelper, Box3Helper, PlaneHelper, ArrowHelper, AxesHelper, Shape, Path, ShapePath, Font, CurvePath, Curve, 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, 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, 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, ImageUtils, Projector, CanvasRenderer, SceneUtils, LensFlare };\n","'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.default=log;var _config=require('../../config');var _config2=_interopRequireDefault(_config);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var _DEFAULT={COLOR:{PRIMARY:'#ff0000',SECONDARY:'#0000ff',TEXT:'#ffffff'}};function log(msg){var name=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'Meta';var mode=arguments.length>2&&arguments[2]!==undefined?arguments[2]:_config2.default.log;var style=arguments.length>3&&arguments[3]!==undefined?arguments[3]:'background: linear-gradient('+_DEFAULT.COLOR.PRIMARY+', '+_DEFAULT.COLOR.SECONDARY+');color: '+_DEFAULT.COLOR.TEXT+';';if(mode)console.log(' %c [Meta]['+name+'] - '+msg,style)}","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});var isMobile={Android:function Android(){return navigator.userAgent.match(/Android/i)},BlackBerry:function BlackBerry(){return navigator.userAgent.match(/BlackBerry/i)},iOS:function iOS(){return navigator.userAgent.match(/iPhone|iPad|iPod/i)},Opera:function Opera(){return navigator.userAgent.match(/Opera Mini/i)},Windows:function Windows(){return navigator.userAgent.match(/IEMobile/i)||navigator.userAgent.match(/WPDesktop/i)},any:function any(){return isMobile.Android()||isMobile.BlackBerry()||isMobile.iOS()||isMobile.Opera()||isMobile.Windows()}};exports.default=isMobile;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _three=require('three');function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var onMouseMove=null;var scope=void 0;var PointerLockControls=function(){function PointerLockControls(camera){_classCallCheck(this,PointerLockControls);scope=this;this.camera=camera;this.pitchObject=new _three.Object3D;this.pitchObject.add(camera);this.yawObject=new _three.Object3D;this.yawObject.add(this.pitchObject);onMouseMove=function onMouseMove(event){if(scope.enabled===false)return;var movementX=event.movementX||event.mozMovementX||event.webkitMovementX||0;var movementY=event.movementY||event.mozMovementY||event.webkitMovementY||0;scope.yawObject.rotation.y-=movementX*0.002;scope.pitchObject.rotation.x-=movementY*0.002;scope.pitchObject.rotation.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,scope.pitchObject.rotation.x))};document.addEventListener('mousemove',onMouseMove,false);this.getDirection();this.enabled=false}_createClass(PointerLockControls,[{key:'disable',value:function disable(){this.enabled=false;scope.camera.rotation.set(0,scope.yawObject.rotation.y,0);this.pitchObject.rotation.set(0,0,0);this.yawObject.rotation.set(0,0,0);document.removeEventListener('mousemove',onMouseMove,false)}},{key:'enable',value:function enable(){this.enabled=true;this.pitchObject.rotation.x=scope.camera.rotation.x;this.pitchObject.rotation.z=0;this.yawObject.rotation.y=scope.camera.rotation.y;scope.camera.rotation.set(0,0,0);document.addEventListener('mousemove',onMouseMove,false)}},{key:'getObject',value:function getObject(){return this.yawObject}},{key:'getDirection',value:function getDirection(){var _this=this;var direction=new _three.Vector3(0,0,-1);var rotation=new _three.Euler(0,0,0,'YXZ');return function(v){rotation.set(_this.pitchObject.rotation.x,_this.yawObject.rotation.y,0);v.copy(direction).applyEuler(rotation);return v}}}]);return PointerLockControls}();exports.default=PointerLockControls;;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _config=require('../../../../config');var _config2=_interopRequireDefault(_config);var _log=require('../../../Utilities/log');var _log2=_interopRequireDefault(_log);var _three=require('three');var _PointerLockControls=require('./Controls/PointerLockControls');var _PointerLockControls2=_interopRequireDefault(_PointerLockControls);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var name='DesktopDeviceController';var scope=void 0;var raycaster=new _three.Raycaster;var raycasterGlobe=new _three.Raycaster;var mouse=new _three.Vector2;mouse.x=null;mouse.y=null;var offset=new _three.Vector3;var intersection=new _three.Vector3;var onMouseMove=void 0,onMouseDown=void 0,onMouseUp=void 0,onKeyDown=void 0,onKeyUp=void 0;var selected=null,hovered=null;var selectedGlobe=null;var selectedGlobePoint=null;var intersectsGlobePlane=null;var MetaPosition=null;var globePlane=null;var moveForward=false;var moveBackward=false;var moveLeft=false;var moveRight=false;var moveUp=false;var moveDown=false;var prevTime=performance.now();var velocity=new _three.Vector3;var metaEntered=false;var metaEnteredData=null;var keys={enter:false,space:false,esc:false};var globe=void 0;var plane=void 0;var data=void 0;function prepare(event){event.preventDefault();event.stopPropagation()}var DesktopDeviceController=function(){function DesktopDeviceController(space){_classCallCheck(this,DesktopDeviceController);scope=this;this.space=space;globe=new _three.Mesh(new _three.SphereGeometry(Math.abs(_config2.default.device.desktop.camera.position.z),32,32),new _three.MeshBasicMaterial({color:_config2.default.device.desktop.globe.color,wireframe:_config2.default.device.desktop.globe.wireframe,transparent:_config2.default.device.desktop.globe.transparency,opacity:_config2.default.device.desktop.globe.opacity,side:_three.DoubleSide}));space.camera.add(globe);space.container.position.copy(_config2.default.device.desktop.container.position);space.camera.position.copy(_config2.default.device.desktop.camera.position);space.scene.fog.far=Math.abs(_config2.default.device.desktop.camera.position.z*5);this.controls=new _PointerLockControls2.default(space.camera);space.scene.add(scope.controls.getObject());this.controls.enabled=false;space.device=this;var havePointerLock='pointerLockElement'in document||'mozPointerLockElement'in document||'webkitPointerLockElement'in document;if(havePointerLock){var element=document.body;var pointerlockchange=function pointerlockchange(event){if(document.pointerLockElement===element||document.mozPointerLockElement===element||document.webkitPointerLockElement===element){scope.controls.enabled=true}else{scope.controls.enabled=false}};var pointerlockerror=function pointerlockerror(event){(0,_log2.default)('[DesktopDevice] - Controls - Pointerlock error.',name)};document.addEventListener('pointerlockchange',pointerlockchange,false);document.addEventListener('mozpointerlockchange',pointerlockchange,false);document.addEventListener('webkitpointerlockchange',pointerlockchange,false);document.addEventListener('pointerlockerror',pointerlockerror,false);document.addEventListener('mozpointerlockerror',pointerlockerror,false);document.addEventListener('webkitpointerlockerror',pointerlockerror,false)}onKeyDown=function onKeyDown(event){switch(event.keyCode){case 13:keys.enter=true;break;case 27:keys.esc=true;break;case 32:keys.space=true;break;case 38:case 87:moveForward=true;break;case 37:case 65:moveLeft=true;break;case 40:case 83:moveBackward=true;break;case 39:case 68:moveRight=true;break;case 86:moveUp=true;break;case 16:moveDown=true;break;}switch(event.charCode){case 32:moveUp=true;break;}if(keys.enter&&keys.space){scope.space.go('release');element.requestPointerLock=element.requestPointerLock||element.mozRequestPointerLock||element.webkitRequestPointerLock;element.requestPointerLock()}};onKeyUp=function onKeyUp(event){switch(event.keyCode){case 13:keys.enter=false;break;case 27:keys.esc=false;break;case 32:keys.space=false;break;case 38:case 87:moveForward=false;break;case 37:case 65:moveLeft=false;break;case 40:case 83:moveBackward=false;break;case 39:case 68:moveRight=false;break;case 86:moveUp=false;break;case 16:moveDown=false;break;}switch(event.charCode){case 32:moveUp=false;break;}};onMouseDown=function onMouseDown(event){prepare(event);if(scope.controls.enabled===true)return;mouse.x=event.clientX/window.innerWidth*2-1;mouse.y=-(event.clientY/window.innerHeight)*2+1;raycaster.setFromCamera(mouse,space.camera);var intersects=raycaster.intersectObjects(scope.space.container.children);if(intersects.length>0){selected=intersects[0].object;scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===selected.id){MetaPosition=intersects[0].point;MetaPosition.z=MetaPosition.z+Math.abs(_config2.default.device.desktop.container.position.z);MetaPosition.y=MetaPosition.y+Math.abs(_config2.default.device.desktop.container.position.y);var _data={position:MetaPosition};Meta.go('touch',_data);plane=new _three.Mesh(new _three.PlaneGeometry(100,100,10,10),new _three.MeshBasicMaterial({wireframe:true,transparent:true,opacity:false}));plane.position.copy(MetaPosition);scope.space.container.add(plane)}})}else{(0,_log2.default)('Looking for space reaches',name);var _intersectsGlobe=raycaster.intersectObject(globe);if(_intersectsGlobe.length>0){selectedGlobe=_intersectsGlobe[0].object;selectedGlobePoint=_intersectsGlobe[0].point;selectedGlobePoint.z=selectedGlobePoint.z+Math.abs(_config2.default.device.desktop.container.position.z);selectedGlobePoint.y=selectedGlobePoint.y+Math.abs(_config2.default.device.desktop.container.position.y);globePlane=new _three.Mesh(new _three.PlaneGeometry(100,100,10,10),new _three.MeshBasicMaterial({wireframe:_config2.default.device.desktop.globe.wireframe,transparent:true,opacity:_config2.default.device.desktop.globe.opacity}));globePlane.position.copy(selectedGlobePoint);scope.space.scene.add(globePlane);var _data2={position:selectedGlobePoint};(0,_log2.default)('about to trigger space touch');scope.space.go('touch',_data2)};}};onMouseMove=function onMouseMove(event){prepare(event);if(scope.controls.enabled===true)return;mouse.x=event.clientX/window.innerWidth*2-1;mouse.y=-(event.clientY/window.innerHeight)*2+1;raycaster.setFromCamera(mouse,space.camera);if(globePlane){(0,_log2.default)('Intersected globe',name);intersectsGlobePlane=raycaster.intersectObject(globePlane);if(intersectsGlobePlane.length>0){var position=intersectsGlobePlane[0].point;position.z=position.z+Math.abs(_config2.default.device.desktop.container.position.z);position.y=position.y+Math.abs(_config2.default.device.desktop.container.position.y);var _data3={position:position};scope.space.go('touch',_data3)}}else{(0,_log2.default)('Intersected space',name);var _intersectsGlobe=raycaster.intersectObject(globe);if(_intersectsGlobe.length>0){var _position=_intersectsGlobe[0].point;_position.z=_position.z+Math.abs(_config2.default.device.desktop.container.position.z);_position.y=_position.y+Math.abs(_config2.default.device.desktop.container.position.y);var _data4={position:_position};scope.space.go('point',_data4)}}if(selected){var _intersects=raycaster.intersectObject(plane);if(_intersects.length>0){var object=_intersects[0].object;MetaPosition=_intersects[0].point;MetaPosition.z=MetaPosition.z+Math.abs(_config2.default.device.desktop.container.position.z);MetaPosition.y=MetaPosition.y+Math.abs(_config2.default.device.desktop.container.position.y);scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===selected.id){var _data5={position:MetaPosition};Meta.go('touch',_data5)}})}}var intersects=raycaster.intersectObjects(scope.space.container.children);if(intersects.length>0){(0,_log2.default)('Intersected Meta',name);var _position2=intersects[0].point;_position2.z=_position2.z+Math.abs(_config2.default.device.desktop.container.position.z);_position2.y=_position2.y+Math.abs(_config2.default.device.desktop.container.position.y);var _data6={position:_position2};scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===intersects[0].object.id){Meta.go('point',_data6);if(!Meta._entered){Meta.go('enter',_data6);Meta._entered=true}else{Meta.go('leave',_data6);Meta._entered=false}}})}else{scope.space.Meta.forEach(function(Meta){if(Meta._entered){Meta.go('leave',data);Meta._entered=false}})}};onMouseUp=function onMouseUp(event){prepare(event);if(scope.controls.enabled===true)return;if(globePlane){scope.space.container.remove(globePlane);globePlane=false}raycaster.setFromCamera(mouse,space.camera);var _intersectsGlobe=raycaster.intersectObjects(scope.space.camera.children);if(_intersectsGlobe.length>0){(0,_log2.default)('Intersected globe (onMouseDown)',name);selectedGlobe=_intersectsGlobe[0].object;var point=_intersectsGlobe[0].point;point.z=point.z+Math.abs(_config2.default.device.desktop.container.position.z);point.y=point.y+Math.abs(_config2.default.device.desktop.container.position.y);var _data7={position:point};scope.space.go('release',_data7)}if(selected){scope.space.container.remove(plane);plane=null;space.Meta.find(function(Meta){if(Meta.graphics.mesh.id===selected.id){var _data8={position:MetaPosition};Meta.go('release',_data8)}});selected=null}else{}};this.init();return this}_createClass(DesktopDeviceController,[{key:'init',value:function init(){document.addEventListener('keydown',onKeyDown,false);document.addEventListener('keyup',onKeyUp,false);addEventListener('mousemove',onMouseMove,false);addEventListener('mousedown',onMouseDown,false);addEventListener('mouseup',onMouseUp,false)}},{key:'deactivate',value:function deactivate(){document.removeEventListener('keydown',onKeyDown,false);document.removeEventListener('keyup',onKeyUp,false);removeEventListener('mousemove',onMouseMove,false);removeEventListener('mousedown',onMouseDown,false);removeEventListener('mouseup',onMouseUp,false)}},{key:'render',value:function render(space){if(!this.controls.enabled)return;var time=performance.now();var delta=(time-prevTime)/1000;var acceleration=_config2.default.device.desktop.acceleration;velocity.x-=velocity.x*10*delta;velocity.z-=velocity.z*10*delta;velocity.y-=velocity.y*10*delta;if(moveForward)velocity.z-=acceleration*delta;if(moveBackward)velocity.z+=acceleration*delta;if(moveLeft)velocity.x-=acceleration*delta;if(moveRight)velocity.x+=acceleration*delta;if(moveDown)velocity.y-=acceleration*delta;if(moveUp)velocity.y+=acceleration*delta;scope.controls.getObject().translateX(velocity.x*delta);scope.controls.getObject().translateY(velocity.y*delta);scope.controls.getObject().translateZ(velocity.z*delta);prevTime=time}}]);return DesktopDeviceController}();exports.default=DesktopDeviceController;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _config=require('../../../../config');var _config2=_interopRequireDefault(_config);var _three=require('three');var _log=require('../../../Utilities/log');var _log2=_interopRequireDefault(_log);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}function prepare(event){event.preventDefault()}var name='DesktopDeviceController';var scope=void 0;var raycaster=new _three.Raycaster;var raycasterGlobe=new _three.Raycaster;var mouse=new _three.Vector2;mouse.x=null;mouse.y=null;var offset=new _three.Vector3;var intersection=new _three.Vector3;var onMouseMove=void 0,onMouseDown=void 0,onMouseUp=void 0,onKeyDown=void 0,onKeyUp=void 0;var selected=null,hovered=null;var selectedGlobe=null;var selectedGlobePoint=null;var intersectsGlobePlane=null;var MetaPosition=null;var globePlane=null;var moveForward=false;var moveBackward=false;var moveLeft=false;var moveRight=false;var moveUp=false;var moveDown=false;var prevTime=performance.now();var velocity=new _three.Vector3;var metaEntered=false;var metaEnteredData=null;var keys={enter:false,space:false,esc:false};var globe=void 0;var plane=void 0;var data=void 0;var _DEFAULT={ACCELERATION:250,FOG:{FAR:25},CONTAINER:{SCALE:1,POSITION:{Y:-2,Z:-10}},GLOBE:{RADIUS:10.5}};var MobileDeviceController=function(){function MobileDeviceController(space){_classCallCheck(this,MobileDeviceController);scope=this;this.space=space;globe=new _three.Mesh(new _three.SphereGeometry(Math.abs(_config2.default.device.mobile.camera.position.z),32,32),new _three.MeshBasicMaterial({color:_config2.default.device.mobile.globe.color,wireframe:_config2.default.device.mobile.globe.wireframe,transparent:_config2.default.device.mobile.globe.transparency,opacity:_config2.default.device.mobile.globe.opacity,side:_three.DoubleSide}));space.camera.add(globe);space.container.position.copy(_config2.default.device.mobile.container.position);space.camera.position.copy(_config2.default.device.mobile.camera.position);space.scene.fog.far=Math.abs(_config2.default.device.mobile.camera.position.z*2);onKeyDown=function onKeyDown(event){switch(event.keyCode){case 13:keys.enter=true;break;case 27:keys.esc=true;break;case 32:keys.space=true;break;case 38:case 87:moveForward=true;break;case 37:case 65:moveLeft=true;break;case 40:case 83:moveBackward=true;break;case 39:case 68:moveRight=true;break;case 32:moveUp=true;break;case 16:moveDown=true;break;}if(keys.enter&&keys.space){scope.space.go('release');element.requestPointerLock=element.requestPointerLock||element.mozRequestPointerLock||element.webkitRequestPointerLock;element.requestPointerLock()}};onKeyUp=function onKeyUp(event){switch(event.keyCode){case 13:keys.enter=false;break;case 27:keys.esc=false;break;case 32:keys.space=false;break;case 38:case 87:moveForward=false;break;case 37:case 65:moveLeft=false;break;case 40:case 83:moveBackward=false;break;case 39:case 68:moveRight=false;break;case 32:moveUp=false;break;case 16:moveDown=false;break;}};onMouseDown=function onMouseDown(event){prepare(event);mouse.x=+(event.touches[0].pageX/window.innerWidth)*2-1;mouse.y=-(event.touches[0].pageY/window.innerHeight)*2+1;raycaster.setFromCamera(mouse,space.camera);var intersects=raycaster.intersectObjects(scope.space.container.children);if(intersects.length>0){selected=intersects[0].object;scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===selected.id){MetaPosition=intersects[0].point;MetaPosition.z=MetaPosition.z+Math.abs(_config2.default.device.mobile.container.position.z);MetaPosition.y=MetaPosition.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data={position:MetaPosition};Meta.go('touch',_data);plane=new _three.Mesh(new _three.PlaneGeometry(100,100,10,10),new _three.MeshBasicMaterial({wireframe:true,transparent:true,opacity:false}));plane.position.copy(MetaPosition);scope.space.container.add(plane)}})}else{(0,_log2.default)('Looking for space reaches',name);var _intersectsGlobe=raycaster.intersectObject(globe);if(_intersectsGlobe.length>0){selectedGlobe=_intersectsGlobe[0].object;selectedGlobePoint=_intersectsGlobe[0].point;selectedGlobePoint.z=selectedGlobePoint.z+Math.abs(_config2.default.device.mobile.container.position.z);selectedGlobePoint.y=selectedGlobePoint.y+Math.abs(_config2.default.device.mobile.container.position.y);globePlane=new _three.Mesh(new _three.PlaneGeometry(100,100,10,10),new _three.MeshBasicMaterial({wireframe:_config2.default.device.desktop.globe.wireframe,transparent:true,opacity:_config2.default.device.desktop.globe.opacity}));globePlane.position.copy(selectedGlobePoint);scope.space.scene.add(globePlane);var _data2={position:selectedGlobePoint};(0,_log2.default)('about to trigger space touch');scope.space.go('touch',_data2)};}};onMouseMove=function onMouseMove(event){prepare(event);mouse.x=+(event.touches[0].pageX/window.innerWidth)*2-1;mouse.y=-(event.touches[0].pageY/window.innerHeight)*2+1;raycaster.setFromCamera(mouse,space.camera);if(globePlane){(0,_log2.default)('Intersected globe',name);intersectsGlobePlane=raycaster.intersectObject(globePlane);if(intersectsGlobePlane.length>0){var position=intersectsGlobePlane[0].point;position.z=position.z+Math.abs(_config2.default.device.mobile.container.position.z);position.y=position.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data3={position:position};scope.space.go('touch',_data3)}}else{(0,_log2.default)('Intersected space',name);var _intersectsGlobe=raycaster.intersectObject(globe);if(_intersectsGlobe.length>0){var _position=_intersectsGlobe[0].point;_position.z=_position.z+Math.abs(_config2.default.device.mobile.container.position.z);_position.y=_position.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data4={position:_position};scope.space.go('point',_data4)}}if(selected){var _intersects=raycaster.intersectObject(plane);if(_intersects.length>0){var object=_intersects[0].object;MetaPosition=_intersects[0].point;MetaPosition.z=MetaPosition.z+Math.abs(_config2.default.device.mobile.container.position.z);MetaPosition.y=MetaPosition.y+Math.abs(_config2.default.device.mobile.container.position.y);scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===selected.id){var _data5={position:MetaPosition};Meta.go('touch',_data5)}})}}var intersects=raycaster.intersectObjects(scope.space.container.children);if(intersects.length>0){(0,_log2.default)('Intersected Meta',name);var _position2=intersects[0].point;_position2.z=_position2.z+Math.abs(_config2.default.device.mobile.container.position.z);_position2.y=_position2.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data6={position:_position2};scope.space.Meta.forEach(function(Meta){if(Meta.graphics.mesh.id===intersects[0].object.id){Meta.go('point',_data6);if(!Meta._entered){Meta.go('enter',_data6);Meta._entered=true}else{Meta.go('leave',_data6);Meta._entered=false}}})}else{scope.space.Meta.forEach(function(Meta){if(Meta._entered){Meta.go('leave',data);Meta._entered=false}})}};onMouseUp=function onMouseUp(event){prepare(event);if(globePlane){scope.space.container.remove(globePlane);globePlane=false}raycaster.setFromCamera(mouse,space.camera);var _intersectsGlobe=raycaster.intersectObjects(scope.space.camera.children);if(_intersectsGlobe.length>0){(0,_log2.default)('Intersected globe (onMouseDown)',name);selectedGlobe=_intersectsGlobe[0].object;var point=_intersectsGlobe[0].point;point.z=point.z+Math.abs(_config2.default.device.mobile.container.position.z);point.y=point.y+Math.abs(_config2.default.device.mobile.container.position.y);var _data7={position:point};scope.space.go('release',_data7)}if(selected){scope.space.container.remove(plane);plane=null;space.Meta.find(function(Meta){if(Meta.graphics.mesh.id===selected.id){var _data8={position:MetaPosition};Meta.go('release',_data8)}});selected=null}else{}};this.init();return this}_createClass(MobileDeviceController,[{key:'init',value:function init(){document.addEventListener('keydown',onKeyDown,false);document.addEventListener('keyup',onKeyUp,false);addEventListener('touchmove',onMouseMove,false);addEventListener('touchstart',onMouseDown,false);addEventListener('touchend',onMouseUp,false)}},{key:'deactivate',value:function deactivate(){document.removeEventListener('keydown',onKeyDown,false);document.removeEventListener('keyup',onKeyUp,false);removeEventListener('ontouchmove',onMouseMove,false);removeEventListener('ontouchstart',onMouseDown,false);removeEventListener('ontouchend',onMouseUp,false)}},{key:'render',value:function render(space){}}]);return MobileDeviceController}();exports.default=MobileDeviceController;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.ViveController=ViveController;var _three=require('three');function ViveController(id){_three.Object3D.call(this);var scope=this;var gamepad;var axes=[0,0];var thumbpadIsPressed=false;var triggerIsPressed=false;var gripsArePressed=false;var menuIsPressed=false;function findGamepad(id){var gamepads=navigator.getGamepads&&navigator.getGamepads();for(var i=0,j=0;i<gamepads.length;i++){var gamepad=gamepads[i];if(gamepad&&(gamepad.id==='OpenVR Gamepad'||gamepad.id.startsWith('Oculus Touch')||gamepad.id.startsWith('Spatial Controller'))){if(j===id)return gamepad;j++}}}this.matrixAutoUpdate=false;this.standingMatrix=new _three.Matrix4;this.getGamepad=function(){return gamepad};this.getButtonState=function(button){if(button==='thumbpad')return thumbpadIsPressed;if(button==='trigger')return triggerIsPressed;if(button==='grips')return gripsArePressed;if(button==='menu')return menuIsPressed};this.update=function(){gamepad=findGamepad(id);if(gamepad!==undefined&&gamepad.pose!==undefined){if(gamepad.pose===null)return;var pose=gamepad.pose;if(pose.position!==null)scope.position.fromArray(pose.position);if(pose.orientation!==null)scope.quaternion.fromArray(pose.orientation);scope.matrix.compose(scope.position,scope.quaternion,scope.scale);scope.matrix.premultiply(scope.standingMatrix);scope.matrixWorldNeedsUpdate=true;scope.visible=true;if(axes[0]!==gamepad.axes[0]||axes[1]!==gamepad.axes[1]){axes[0]=gamepad.axes[0];axes[1]=gamepad.axes[1];scope.dispatchEvent({type:'axischanged',axes:axes})}if(thumbpadIsPressed!==gamepad.buttons[0].pressed){thumbpadIsPressed=gamepad.buttons[0].pressed;scope.dispatchEvent({type:thumbpadIsPressed?'thumbpaddown':'thumbpadup',axes:axes})}if(triggerIsPressed!==gamepad.buttons[1].pressed){triggerIsPressed=gamepad.buttons[1].pressed;scope.dispatchEvent({type:triggerIsPressed?'triggerdown':'triggerup'})}if(gripsArePressed!==gamepad.buttons[2].pressed){gripsArePressed=gamepad.buttons[2].pressed;scope.dispatchEvent({type:gripsArePressed?'gripsdown':'gripsup'})}if(menuIsPressed!==gamepad.buttons[3].pressed){menuIsPressed=gamepad.buttons[3].pressed;scope.dispatchEvent({type:menuIsPressed?'menudown':'menuup'})}}else{scope.visible=false}}};ViveController.prototype=Object.create(_three.Object3D.prototype);ViveController.prototype.constructor=ViveController;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _three=require('three');function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var scope=void 0;function defaultOnError(err){throw new Error(err)}var OBJLoader=function(){function OBJLoader(manager){_classCallCheck(this,OBJLoader);scope=this;this.manager=manager!==undefined?manager:_three.DefaultLoadingManager;this.materials=null;this.regexp={vertex_pattern:/^v\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,normal_pattern:/^vn\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,uv_pattern:/^vt\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,face_vertex:/^f\\s+(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)(?:\\s+(-?\\d+))?/,face_vertex_uv:/^f\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+))?/,face_vertex_uv_normal:/^f\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+))?/,face_vertex_normal:/^f\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)(?:\\s+(-?\\d+)\\/\\/(-?\\d+))?/,object_pattern:/^[og]\\s*(.+)?/,smoothing_pattern:/^s\\s+(\\d+|on|off)/,material_library_pattern:/^mtllib /,material_use_pattern:/^usemtl /}}_createClass(OBJLoader,[{key:'load',value:function load(url,onLoad,onProgress,onError){this.onError=onError||defaultOnError;var loader=new _three.FileLoader(scope.manager);loader.setPath(this.path);loader.load(url,function(text){onLoad(scope.parse(text))},onProgress,onError)}},{key:'setPath',value:function setPath(value){this.path=value}},{key:'setMaterials',value:function setMaterials(materials){this.materials=materials}},{key:'_createParserState',value:function _createParserState(){var state={objects:[],object:{},vertices:[],normals:[],uvs:[],materialLibraries:[],startObject:function startObject(name,fromDeclaration){if(this.object&&this.object.fromDeclaration===false){this.object.name=name;this.object.fromDeclaration=fromDeclaration!==false;return}var previousMaterial=this.object&&typeof this.object.currentMaterial==='function'?this.object.currentMaterial():undefined;if(this.object&&typeof this.object._finalize==='function'){this.object._finalize(true)}this.object={name:name||'',fromDeclaration:fromDeclaration!==false,geometry:{vertices:[],normals:[],uvs:[]},materials:[],smooth:true,startMaterial:function startMaterial(name,libraries){var previous=this._finalize(false);if(previous&&(previous.inherited||previous.groupCount<=0)){this.materials.splice(previous.index,1)}var material={index:this.materials.length,name:name||'',mtllib:Array.isArray(libraries)&&libraries.length>0?libraries[libraries.length-1]:'',smooth:previous!==undefined?previous.smooth:this.smooth,groupStart:previous!==undefined?previous.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:false,clone:function clone(index){var cloned={index:typeof index==='number'?index:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:false};cloned.clone=this.clone.bind(cloned);return cloned}};this.materials.push(material);return material},currentMaterial:function currentMaterial(){if(this.materials.length>0){return this.materials[this.materials.length-1]}return undefined},_finalize:function _finalize(end){var lastMultiMaterial=this.currentMaterial();if(lastMultiMaterial&&lastMultiMaterial.groupEnd===-1){lastMultiMaterial.groupEnd=this.geometry.vertices.length/3;lastMultiMaterial.groupCount=lastMultiMaterial.groupEnd-lastMultiMaterial.groupStart;lastMultiMaterial.inherited=false}if(end&&this.materials.length>1){for(var mi=this.materials.length-1;mi>=0;mi--){if(this.materials[mi].groupCount<=0){this.materials.splice(mi,1)}}}if(end&&this.materials.length===0){this.materials.push({name:'',smooth:this.smooth})}return lastMultiMaterial}};if(previousMaterial&&previousMaterial.name&&typeof previousMaterial.clone==='function'){var declared=previousMaterial.clone(0);declared.inherited=true;this.object.materials.push(declared)}this.objects.push(this.object)},finalize:function finalize(){if(this.object&&typeof this.object._finalize==='function'){this.object._finalize(true)}},parseVertexIndex:function parseVertexIndex(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/3)*3},parseNormalIndex:function parseNormalIndex(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/3)*3},parseUVIndex:function parseUVIndex(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/2)*2},addVertex:function addVertex(a,b,c){var src=this.vertices;var dst=this.object.geometry.vertices;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[b+2]);dst.push(src[c+0]);dst.push(src[c+1]);dst.push(src[c+2])},addVertexLine:function addVertexLine(a){var src=this.vertices;var dst=this.object.geometry.vertices;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2])},addNormal:function addNormal(a,b,c){var src=this.normals;var dst=this.object.geometry.normals;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[b+2]);dst.push(src[c+0]);dst.push(src[c+1]);dst.push(src[c+2])},addUV:function addUV(a,b,c){var src=this.uvs;var dst=this.object.geometry.uvs;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[c+0]);dst.push(src[c+1])},addUVLine:function addUVLine(a){var src=this.uvs;var dst=this.object.geometry.uvs;dst.push(src[a+0]);dst.push(src[a+1])},addFace:function addFace(a,b,c,d,ua,ub,uc,ud,na,nb,nc,nd){var vLen=this.vertices.length;var ia=this.parseVertexIndex(a,vLen);var ib=this.parseVertexIndex(b,vLen);var ic=this.parseVertexIndex(c,vLen);var id;if(d===undefined){this.addVertex(ia,ib,ic)}else{id=this.parseVertexIndex(d,vLen);this.addVertex(ia,ib,id);this.addVertex(ib,ic,id)}if(ua!==undefined){var uvLen=this.uvs.length;ia=this.parseUVIndex(ua,uvLen);ib=this.parseUVIndex(ub,uvLen);ic=this.parseUVIndex(uc,uvLen);if(d===undefined){this.addUV(ia,ib,ic)}else{id=this.parseUVIndex(ud,uvLen);this.addUV(ia,ib,id);this.addUV(ib,ic,id)}}if(na!==undefined){var nLen=this.normals.length;ia=this.parseNormalIndex(na,nLen);ib=na===nb?ia:this.parseNormalIndex(nb,nLen);ic=na===nc?ia:this.parseNormalIndex(nc,nLen);if(d===undefined){this.addNormal(ia,ib,ic)}else{id=this.parseNormalIndex(nd,nLen);this.addNormal(ia,ib,id);this.addNormal(ib,ic,id)}}},addLineGeometry:function addLineGeometry(vertices,uvs){this.object.geometry.type='Line';var vLen=this.vertices.length;var uvLen=this.uvs.length;for(var vi=0,l=vertices.length;vi<l;vi++){this.addVertexLine(this.parseVertexIndex(vertices[vi],vLen))}for(var uvi=0,l=uvs.length;uvi<l;uvi++){this.addUVLine(this.parseUVIndex(uvs[uvi],uvLen))}}};state.startObject('',false);return state}},{key:'parse',value:function parse(text,debug){if(typeof debug==='undefined'){debug=true}if(debug){console.time('OBJLoader')}var state=this._createParserState();if(text.indexOf('\\r\\n')!==-1){text=text.replace(/\\r\\n/g,'\\n')}if(text.indexOf('\\\\\\n')!==-1){text=text.replace(/\\\\\\n/g,'')}var lines=text.split('\\n');var line='',lineFirstChar='',lineSecondChar='';var lineLength=0;var result=[];var trimLeft=typeof''.trimLeft==='function';for(var i=0,l=lines.length;i<l;i++){line=lines[i];line=trimLeft?line.trimLeft():line.trim();lineLength=line.length;if(lineLength===0)continue;lineFirstChar=line.charAt(0);if(lineFirstChar==='#')continue;if(lineFirstChar==='v'){lineSecondChar=line.charAt(1);if(lineSecondChar===' '&&(result=this.regexp.vertex_pattern.exec(line))!==null){state.vertices.push(parseFloat(result[1]),parseFloat(result[2]),parseFloat(result[3]))}else if(lineSecondChar==='n'&&(result=this.regexp.normal_pattern.exec(line))!==null){state.normals.push(parseFloat(result[1]),parseFloat(result[2]),parseFloat(result[3]))}else if(lineSecondChar==='t'&&(result=this.regexp.uv_pattern.exec(line))!==null){state.uvs.push(parseFloat(result[1]),parseFloat(result[2]))}else{this.onError('Unexpected vertex/normal/uv line: \\''+line+'\\'')}}else if(lineFirstChar==='f'){if((result=this.regexp.face_vertex_uv_normal.exec(line))!==null){state.addFace(result[1],result[4],result[7],result[10],result[2],result[5],result[8],result[11],result[3],result[6],result[9],result[12])}else if((result=this.regexp.face_vertex_uv.exec(line))!==null){state.addFace(result[1],result[3],result[5],result[7],result[2],result[4],result[6],result[8])}else if((result=this.regexp.face_vertex_normal.exec(line))!==null){state.addFace(result[1],result[3],result[5],result[7],undefined,undefined,undefined,undefined,result[2],result[4],result[6],result[8])}else if((result=this.regexp.face_vertex.exec(line))!==null){state.addFace(result[1],result[2],result[3],result[4])}else{this.onError('Unexpected face line: \\''+line+'\\'')}}else if(lineFirstChar==='l'){var lineParts=line.substring(1).trim().split(' ');var lineVertices=[],lineUVs=[];if(line.indexOf('/')===-1){lineVertices=lineParts}else{for(var li=0,llen=lineParts.length;li<llen;li++){var parts=lineParts[li].split('/');if(parts[0]!=='')lineVertices.push(parts[0]);if(parts[1]!=='')lineUVs.push(parts[1])}}state.addLineGeometry(lineVertices,lineUVs)}else if((result=this.regexp.object_pattern.exec(line))!==null){var name=(' '+result[0].substr(1).trim()).substr(1);state.startObject(name)}else if(this.regexp.material_use_pattern.test(line)){state.object.startMaterial(line.substring(7).trim(),state.materialLibraries)}else if(this.regexp.material_library_pattern.test(line)){state.materialLibraries.push(line.substring(7).trim())}else if((result=this.regexp.smoothing_pattern.exec(line))!==null){var value=result[1].trim().toLowerCase();state.object.smooth=value==='1'||value==='on';var material=state.object.currentMaterial();if(material){material.smooth=state.object.smooth}}else{if(line==='\\0')continue;this.onError('Unexpected line: \\''+line+'\\'')}}state.finalize();var container=new _three.Group;container.materialLibraries=[].concat(state.materialLibraries);for(var i=0,l=state.objects.length;i<l;i++){var object=state.objects[i];var geometry=object.geometry;var materials=object.materials;var isLine=geometry.type==='Line';if(geometry.vertices.length===0)continue;var buffergeometry=new _three.BufferGeometry;buffergeometry.addAttribute('position',new _three.BufferAttribute(new Float32Array(geometry.vertices),3));if(geometry.normals.length>0){buffergeometry.addAttribute('normal',new _three.BufferAttribute(new Float32Array(geometry.normals),3))}else{buffergeometry.computeVertexNormals()}if(geometry.uvs.length>0){buffergeometry.addAttribute('uv',new _three.BufferAttribute(new Float32Array(geometry.uvs),2))}var createdMaterials=[];for(var mi=0,miLen=materials.length;mi<miLen;mi++){var sourceMaterial=materials[mi];var material=undefined;if(this.materials!==null){material=this.materials.create(sourceMaterial.name);if(isLine&&material&&!(material instanceof _three.LineBasicMaterial)){var materialLine=new _three.LineBasicMaterial;materialLine.copy(material);material=materialLine}}if(!material){material=!isLine?new _three.MeshPhongMaterial:new _three.LineBasicMaterial;material.name=sourceMaterial.name}material.shading=sourceMaterial.smooth?_three.SmoothShading:_three.FlatShading;createdMaterials.push(material)}var mesh;if(createdMaterials.length>1){for(var mi=0,miLen=materials.length;mi<miLen;mi++){var sourceMaterial=materials[mi];buffergeometry.addGroup(sourceMaterial.groupStart,sourceMaterial.groupCount,mi)}var multiMaterial=new _three.MultiMaterial(createdMaterials);mesh=!isLine?new _three.Mesh(buffergeometry,multiMaterial):new _three.LineSegments(buffergeometry,multiMaterial)}else{mesh=!isLine?new _three.Mesh(buffergeometry,createdMaterials[0]):new _three.LineSegments(buffergeometry,createdMaterials[0])}mesh.name=object.name;container.add(mesh)}if(debug){console.timeEnd('OBJLoader')}return container}}]);return OBJLoader}();exports.default=OBJLoader;;","'use strict';var _three=require('three');var THREE=_interopRequireWildcard(_three);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}console.log('hello');THREE.GLTFLoader=function(){function GLTFLoader(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this.dracoLoader=null}GLTFLoader.prototype={constructor:GLTFLoader,crossOrigin:'anonymous',load:function load(url,onLoad,onProgress,onError){var scope=this;var path=this.path!==undefined?this.path:THREE.LoaderUtils.extractUrlBase(url);var loader=new THREE.FileLoader(scope.manager);loader.setResponseType('arraybuffer');loader.load(url,function(data){try{scope.parse(data,path,onLoad,onError)}catch(e){if(onError!==undefined){onError(e)}else{throw e}}},onProgress,onError)},setCrossOrigin:function setCrossOrigin(value){this.crossOrigin=value;return this},setPath:function setPath(value){this.path=value;return this},setDRACOLoader:function setDRACOLoader(dracoLoader){this.dracoLoader=dracoLoader;return this},parse:function parse(data,path,onLoad,onError){var content;var extensions={};if(typeof data==='string'){content=data}else{var magic=THREE.LoaderUtils.decodeText(new Uint8Array(data,0,4));if(magic===BINARY_EXTENSION_HEADER_MAGIC){try{extensions[EXTENSIONS.KHR_BINARY_GLTF]=new GLTFBinaryExtension(data)}catch(error){if(onError)onError(error);return}content=extensions[EXTENSIONS.KHR_BINARY_GLTF].content}else{content=THREE.LoaderUtils.decodeText(new Uint8Array(data))}}var json=JSON.parse(content);if(json.asset===undefined||json.asset.version[0]<2){if(onError)onError(new Error('THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.'));return}if(json.extensionsUsed){for(var i=0;i<json.extensionsUsed.length;++i){var extensionName=json.extensionsUsed[i];var extensionsRequired=json.extensionsRequired||[];switch(extensionName){case EXTENSIONS.KHR_LIGHTS:extensions[extensionName]=new GLTFLightsExtension(json);break;case EXTENSIONS.KHR_MATERIALS_UNLIT:extensions[extensionName]=new GLTFMaterialsUnlitExtension(json);break;case EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:extensions[extensionName]=new GLTFMaterialsPbrSpecularGlossinessExtension;break;case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:extensions[extensionName]=new GLTFDracoMeshCompressionExtension(json,this.dracoLoader);break;case EXTENSIONS.MSFT_TEXTURE_DDS:extensions[EXTENSIONS.MSFT_TEXTURE_DDS]=new GLTFTextureDDSExtension;break;default:if(extensionsRequired.indexOf(extensionName)>=0){console.warn('THREE.GLTFLoader: Unknown extension \"'+extensionName+'\".')}}}}var parser=new GLTFParser(json,extensions,{path:path||this.path||'',crossOrigin:this.crossOrigin,manager:this.manager});parser.parse(function(scene,scenes,cameras,animations,json){var glTF={scene:scene,scenes:scenes,cameras:cameras,animations:animations,asset:json.asset,parser:parser,userData:{}};addUnknownExtensionsToUserData(extensions,glTF,json);onLoad(glTF)},onError)}};function GLTFRegistry(){var objects={};return{get:function get(key){return objects[key]},add:function add(key,object){objects[key]=object},remove:function remove(key){delete objects[key]},removeAll:function removeAll(){objects={}}}}var EXTENSIONS={KHR_BINARY_GLTF:'KHR_binary_glTF',KHR_DRACO_MESH_COMPRESSION:'KHR_draco_mesh_compression',KHR_LIGHTS:'KHR_lights',KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:'KHR_materials_pbrSpecularGlossiness',KHR_MATERIALS_UNLIT:'KHR_materials_unlit',MSFT_TEXTURE_DDS:'MSFT_texture_dds'};function GLTFTextureDDSExtension(){if(!THREE.DDSLoader){throw new Error('THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader')}this.name=EXTENSIONS.MSFT_TEXTURE_DDS;this.ddsLoader=new THREE.DDSLoader}function GLTFLightsExtension(json){this.name=EXTENSIONS.KHR_LIGHTS;this.lights={};var extension=json.extensions&&json.extensions[EXTENSIONS.KHR_LIGHTS]||{};var lights=extension.lights||{};for(var lightId in lights){var light=lights[lightId];var lightNode;var color=new THREE.Color().fromArray(light.color);switch(light.type){case'directional':lightNode=new THREE.DirectionalLight(color);lightNode.target.position.set(0,0,1);lightNode.add(lightNode.target);break;case'point':lightNode=new THREE.PointLight(color);break;case'spot':lightNode=new THREE.SpotLight(color);light.spot=light.spot||{};light.spot.innerConeAngle=light.spot.innerConeAngle!==undefined?light.spot.innerConeAngle:0;light.spot.outerConeAngle=light.spot.outerConeAngle!==undefined?light.spot.outerConeAngle:Math.PI/4;lightNode.angle=light.spot.outerConeAngle;lightNode.penumbra=1-light.spot.innerConeAngle/light.spot.outerConeAngle;lightNode.target.position.set(0,0,1);lightNode.add(lightNode.target);break;case'ambient':lightNode=new THREE.AmbientLight(color);break;}if(lightNode){lightNode.decay=2;if(light.intensity!==undefined){lightNode.intensity=light.intensity}lightNode.name=light.name||'light_'+lightId;this.lights[lightId]=lightNode}}}function GLTFMaterialsUnlitExtension(json){this.name=EXTENSIONS.KHR_MATERIALS_UNLIT}GLTFMaterialsUnlitExtension.prototype.getMaterialType=function(material){return THREE.MeshBasicMaterial};GLTFMaterialsUnlitExtension.prototype.extendParams=function(materialParams,material,parser){var pending=[];materialParams.color=new THREE.Color(1,1,1);materialParams.opacity=1;var metallicRoughness=material.pbrMetallicRoughness;if(metallicRoughness){if(Array.isArray(metallicRoughness.baseColorFactor)){var array=metallicRoughness.baseColorFactor;materialParams.color.fromArray(array);materialParams.opacity=array[3]}if(metallicRoughness.baseColorTexture!==undefined){pending.push(parser.assignTexture(materialParams,'map',metallicRoughness.baseColorTexture.index))}}return Promise.all(pending)};var BINARY_EXTENSION_BUFFER_NAME='binary_glTF';var BINARY_EXTENSION_HEADER_MAGIC='glTF';var BINARY_EXTENSION_HEADER_LENGTH=12;var BINARY_EXTENSION_CHUNK_TYPES={JSON:1313821514,BIN:5130562};function GLTFBinaryExtension(data){this.name=EXTENSIONS.KHR_BINARY_GLTF;this.content=null;this.body=null;var headerView=new DataView(data,0,BINARY_EXTENSION_HEADER_LENGTH);this.header={magic:THREE.LoaderUtils.decodeText(new Uint8Array(data.slice(0,4))),version:headerView.getUint32(4,true),length:headerView.getUint32(8,true)};if(this.header.magic!==BINARY_EXTENSION_HEADER_MAGIC){throw new Error('THREE.GLTFLoader: Unsupported glTF-Binary header.')}else if(this.header.version<2){throw new Error('THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.')}var chunkView=new DataView(data,BINARY_EXTENSION_HEADER_LENGTH);var chunkIndex=0;while(chunkIndex<chunkView.byteLength){var chunkLength=chunkView.getUint32(chunkIndex,true);chunkIndex+=4;var chunkType=chunkView.getUint32(chunkIndex,true);chunkIndex+=4;if(chunkType===BINARY_EXTENSION_CHUNK_TYPES.JSON){var contentArray=new Uint8Array(data,BINARY_EXTENSION_HEADER_LENGTH+chunkIndex,chunkLength);this.content=THREE.LoaderUtils.decodeText(contentArray)}else if(chunkType===BINARY_EXTENSION_CHUNK_TYPES.BIN){var byteOffset=BINARY_EXTENSION_HEADER_LENGTH+chunkIndex;this.body=data.slice(byteOffset,byteOffset+chunkLength)}chunkIndex+=chunkLength}if(this.content===null){throw new Error('THREE.GLTFLoader: JSON content not found.')}}function GLTFDracoMeshCompressionExtension(json,dracoLoader){if(!dracoLoader){throw new Error('THREE.GLTFLoader: No DRACOLoader instance provided.')}this.name=EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;this.json=json;this.dracoLoader=dracoLoader}GLTFDracoMeshCompressionExtension.prototype.decodePrimitive=function(primitive,parser){var json=this.json;var dracoLoader=this.dracoLoader;var bufferViewIndex=primitive.extensions[this.name].bufferView;var gltfAttributeMap=primitive.extensions[this.name].attributes;var threeAttributeMap={};var attributeNormalizedMap={};var attributeTypeMap={};for(var attributeName in gltfAttributeMap){if(!(attributeName in ATTRIBUTES))continue;threeAttributeMap[ATTRIBUTES[attributeName]]=gltfAttributeMap[attributeName]}for(attributeName in primitive.attributes){if(ATTRIBUTES[attributeName]!==undefined&&gltfAttributeMap[attributeName]!==undefined){var accessorDef=json.accessors[primitive.attributes[attributeName]];var componentType=WEBGL_COMPONENT_TYPES[accessorDef.componentType];attributeTypeMap[ATTRIBUTES[attributeName]]=componentType;attributeNormalizedMap[ATTRIBUTES[attributeName]]=accessorDef.normalized===true}}return parser.getDependency('bufferView',bufferViewIndex).then(function(bufferView){return new Promise(function(resolve){dracoLoader.decodeDracoFile(bufferView,function(geometry){for(var attributeName in geometry.attributes){var attribute=geometry.attributes[attributeName];var normalized=attributeNormalizedMap[attributeName];if(normalized!==undefined)attribute.normalized=normalized}resolve(geometry)},threeAttributeMap,attributeTypeMap)})})};function GLTFMaterialsPbrSpecularGlossinessExtension(){return{name:EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,specularGlossinessParams:['color','map','lightMap','lightMapIntensity','aoMap','aoMapIntensity','emissive','emissiveIntensity','emissiveMap','bumpMap','bumpScale','normalMap','displacementMap','displacementScale','displacementBias','specularMap','specular','glossinessMap','glossiness','alphaMap','envMap','envMapIntensity','refractionRatio'],getMaterialType:function getMaterialType(){return THREE.ShaderMaterial},extendParams:function extendParams(params,material,parser){var pbrSpecularGlossiness=material.extensions[this.name];var shader=THREE.ShaderLib['standard'];var uniforms=THREE.UniformsUtils.clone(shader.uniforms);var specularMapParsFragmentChunk=['#ifdef USE_SPECULARMAP','\\tuniform sampler2D specularMap;','#endif'].join('\\n');var glossinessMapParsFragmentChunk=['#ifdef USE_GLOSSINESSMAP','\\tuniform sampler2D glossinessMap;','#endif'].join('\\n');var specularMapFragmentChunk=['vec3 specularFactor = specular;','#ifdef USE_SPECULARMAP','\\tvec4 texelSpecular = texture2D( specularMap, vUv );','\\ttexelSpecular = sRGBToLinear( texelSpecular );','\\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture','\\tspecularFactor *= texelSpecular.rgb;','#endif'].join('\\n');var glossinessMapFragmentChunk=['float glossinessFactor = glossiness;','#ifdef USE_GLOSSINESSMAP','\\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );','\\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture','\\tglossinessFactor *= texelGlossiness.a;','#endif'].join('\\n');var lightPhysicalFragmentChunk=['PhysicalMaterial material;','material.diffuseColor = diffuseColor.rgb;','material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );','material.specularColor = specularFactor.rgb;'].join('\\n');var fragmentShader=shader.fragmentShader.replace('uniform float roughness;','uniform vec3 specular;').replace('uniform float metalness;','uniform float glossiness;').replace('#include <roughnessmap_pars_fragment>',specularMapParsFragmentChunk).replace('#include <metalnessmap_pars_fragment>',glossinessMapParsFragmentChunk).replace('#include <roughnessmap_fragment>',specularMapFragmentChunk).replace('#include <metalnessmap_fragment>',glossinessMapFragmentChunk).replace('#include <lights_physical_fragment>',lightPhysicalFragmentChunk);delete uniforms.roughness;delete uniforms.metalness;delete uniforms.roughnessMap;delete uniforms.metalnessMap;uniforms.specular={value:new THREE.Color().setHex(1118481)};uniforms.glossiness={value:0.5};uniforms.specularMap={value:null};uniforms.glossinessMap={value:null};params.vertexShader=shader.vertexShader;params.fragmentShader=fragmentShader;params.uniforms=uniforms;params.defines={'STANDARD':''};params.color=new THREE.Color(1,1,1);params.opacity=1;var pending=[];if(Array.isArray(pbrSpecularGlossiness.diffuseFactor)){var array=pbrSpecularGlossiness.diffuseFactor;params.color.fromArray(array);params.opacity=array[3]}if(pbrSpecularGlossiness.diffuseTexture!==undefined){pending.push(parser.assignTexture(params,'map',pbrSpecularGlossiness.diffuseTexture.index))}params.emissive=new THREE.Color(0,0,0);params.glossiness=pbrSpecularGlossiness.glossinessFactor!==undefined?pbrSpecularGlossiness.glossinessFactor:1;params.specular=new THREE.Color(1,1,1);if(Array.isArray(pbrSpecularGlossiness.specularFactor)){params.specular.fromArray(pbrSpecularGlossiness.specularFactor)}if(pbrSpecularGlossiness.specularGlossinessTexture!==undefined){var specGlossIndex=pbrSpecularGlossiness.specularGlossinessTexture.index;pending.push(parser.assignTexture(params,'glossinessMap',specGlossIndex));pending.push(parser.assignTexture(params,'specularMap',specGlossIndex))}return Promise.all(pending)},createMaterial:function createMaterial(params){var material=new THREE.ShaderMaterial({defines:params.defines,vertexShader:params.vertexShader,fragmentShader:params.fragmentShader,uniforms:params.uniforms,fog:true,lights:true,opacity:params.opacity,transparent:params.transparent});material.isGLTFSpecularGlossinessMaterial=true;material.color=params.color;material.map=params.map===undefined?null:params.map;material.lightMap=null;material.lightMapIntensity=1;material.aoMap=params.aoMap===undefined?null:params.aoMap;material.aoMapIntensity=1;material.emissive=params.emissive;material.emissiveIntensity=1;material.emissiveMap=params.emissiveMap===undefined?null:params.emissiveMap;material.bumpMap=params.bumpMap===undefined?null:params.bumpMap;material.bumpScale=1;material.normalMap=params.normalMap===undefined?null:params.normalMap;if(params.normalScale)material.normalScale=params.normalScale;material.displacementMap=null;material.displacementScale=1;material.displacementBias=0;material.specularMap=params.specularMap===undefined?null:params.specularMap;material.specular=params.specular;material.glossinessMap=params.glossinessMap===undefined?null:params.glossinessMap;material.glossiness=params.glossiness;material.alphaMap=null;material.envMap=params.envMap===undefined?null:params.envMap;material.envMapIntensity=1;material.refractionRatio=0.98;material.extensions.derivatives=true;return material},cloneMaterial:function cloneMaterial(source){var target=source.clone();target.isGLTFSpecularGlossinessMaterial=true;var params=this.specularGlossinessParams;for(var i=0,il=params.length;i<il;i++){target[params[i]]=source[params[i]]}return target},refreshUniforms:function refreshUniforms(renderer,scene,camera,geometry,material,group){if(material.isGLTFSpecularGlossinessMaterial!==true){return}var uniforms=material.uniforms;var defines=material.defines;uniforms.opacity.value=material.opacity;uniforms.diffuse.value.copy(material.color);uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity);uniforms.map.value=material.map;uniforms.specularMap.value=material.specularMap;uniforms.alphaMap.value=material.alphaMap;uniforms.lightMap.value=material.lightMap;uniforms.lightMapIntensity.value=material.lightMapIntensity;uniforms.aoMap.value=material.aoMap;uniforms.aoMapIntensity.value=material.aoMapIntensity;var uvScaleMap;if(material.map){uvScaleMap=material.map}else if(material.specularMap){uvScaleMap=material.specularMap}else if(material.displacementMap){uvScaleMap=material.displacementMap}else if(material.normalMap){uvScaleMap=material.normalMap}else if(material.bumpMap){uvScaleMap=material.bumpMap}else if(material.glossinessMap){uvScaleMap=material.glossinessMap}else if(material.alphaMap){uvScaleMap=material.alphaMap}else if(material.emissiveMap){uvScaleMap=material.emissiveMap}if(uvScaleMap!==undefined){if(uvScaleMap.isWebGLRenderTarget){uvScaleMap=uvScaleMap.texture}if(uvScaleMap.matrixAutoUpdate===true){uvScaleMap.updateMatrix()}uniforms.uvTransform.value.copy(uvScaleMap.matrix)}uniforms.envMap.value=material.envMap;uniforms.envMapIntensity.value=material.envMapIntensity;uniforms.flipEnvMap.value=material.envMap&&material.envMap.isCubeTexture?-1:1;uniforms.refractionRatio.value=material.refractionRatio;uniforms.specular.value.copy(material.specular);uniforms.glossiness.value=material.glossiness;uniforms.glossinessMap.value=material.glossinessMap;uniforms.emissiveMap.value=material.emissiveMap;uniforms.bumpMap.value=material.bumpMap;uniforms.normalMap.value=material.normalMap;uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias;if(uniforms.glossinessMap.value!==null&&defines.USE_GLOSSINESSMAP===undefined){defines.USE_GLOSSINESSMAP='';defines.USE_ROUGHNESSMAP=''}if(uniforms.glossinessMap.value===null&&defines.USE_GLOSSINESSMAP!==undefined){delete defines.USE_GLOSSINESSMAP;delete defines.USE_ROUGHNESSMAP}}}}function GLTFCubicSplineInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){THREE.Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}GLTFCubicSplineInterpolant.prototype=Object.create(THREE.Interpolant.prototype);GLTFCubicSplineInterpolant.prototype.constructor=GLTFCubicSplineInterpolant;GLTFCubicSplineInterpolant.prototype.interpolate_=function(i1,t0,t,t1){var result=this.resultBuffer;var values=this.sampleValues;var stride=this.valueSize;var stride2=stride*2;var stride3=stride*3;var td=t1-t0;var p=(t-t0)/td;var pp=p*p;var ppp=pp*p;var offset1=i1*stride3;var offset0=offset1-stride3;var s0=2*ppp-3*pp+1;var s1=ppp-2*pp+p;var s2=-2*ppp+3*pp;var s3=ppp-pp;for(var i=0;i!==stride;i++){var p0=values[offset0+i+stride];var m0=values[offset0+i+stride2]*td;var p1=values[offset1+i+stride];var m1=values[offset1+i]*td;result[i]=s0*p0+s1*m0+s2*p1+s3*m1}return result};var WEBGL_CONSTANTS={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123};var WEBGL_TYPE={5126:Number,35675:THREE.Matrix3,35676:THREE.Matrix4,35664:THREE.Vector2,35665:THREE.Vector3,35666:THREE.Vector4,35678:THREE.Texture};var WEBGL_COMPONENT_TYPES={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var WEBGL_FILTERS={9728:THREE.NearestFilter,9729:THREE.LinearFilter,9984:THREE.NearestMipMapNearestFilter,9985:THREE.LinearMipMapNearestFilter,9986:THREE.NearestMipMapLinearFilter,9987:THREE.LinearMipMapLinearFilter};var WEBGL_WRAPPINGS={33071:THREE.ClampToEdgeWrapping,33648:THREE.MirroredRepeatWrapping,10497:THREE.RepeatWrapping};var WEBGL_TEXTURE_FORMATS={6406:THREE.AlphaFormat,6407:THREE.RGBFormat,6408:THREE.RGBAFormat,6409:THREE.LuminanceFormat,6410:THREE.LuminanceAlphaFormat};var WEBGL_TEXTURE_DATATYPES={5121:THREE.UnsignedByteType,32819:THREE.UnsignedShort4444Type,32820:THREE.UnsignedShort5551Type,33635:THREE.UnsignedShort565Type};var WEBGL_SIDES={1028:THREE.BackSide,1029:THREE.FrontSide};var WEBGL_DEPTH_FUNCS={512:THREE.NeverDepth,513:THREE.LessDepth,514:THREE.EqualDepth,515:THREE.LessEqualDepth,516:THREE.GreaterEqualDepth,517:THREE.NotEqualDepth,518:THREE.GreaterEqualDepth,519:THREE.AlwaysDepth};var WEBGL_BLEND_EQUATIONS={32774:THREE.AddEquation,32778:THREE.SubtractEquation,32779:THREE.ReverseSubtractEquation};var WEBGL_BLEND_FUNCS={0:THREE.ZeroFactor,1:THREE.OneFactor,768:THREE.SrcColorFactor,769:THREE.OneMinusSrcColorFactor,770:THREE.SrcAlphaFactor,771:THREE.OneMinusSrcAlphaFactor,772:THREE.DstAlphaFactor,773:THREE.OneMinusDstAlphaFactor,774:THREE.DstColorFactor,775:THREE.OneMinusDstColorFactor,776:THREE.SrcAlphaSaturateFactor};var WEBGL_TYPE_SIZES={'SCALAR':1,'VEC2':2,'VEC3':3,'VEC4':4,'MAT2':4,'MAT3':9,'MAT4':16};var ATTRIBUTES={POSITION:'position',NORMAL:'normal',TEXCOORD_0:'uv',TEXCOORD0:'uv',TEXCOORD:'uv',TEXCOORD_1:'uv2',COLOR_0:'color',COLOR0:'color',COLOR:'color',WEIGHTS_0:'skinWeight',WEIGHT:'skinWeight',JOINTS_0:'skinIndex',JOINT:'skinIndex'};var PATH_PROPERTIES={scale:'scale',translation:'position',rotation:'quaternion',weights:'morphTargetInfluences'};var INTERPOLATION={CUBICSPLINE:THREE.InterpolateSmooth,LINEAR:THREE.InterpolateLinear,STEP:THREE.InterpolateDiscrete};var STATES_ENABLES={2884:'CULL_FACE',2929:'DEPTH_TEST',3042:'BLEND',3089:'SCISSOR_TEST',32823:'POLYGON_OFFSET_FILL',32926:'SAMPLE_ALPHA_TO_COVERAGE'};var ALPHA_MODES={OPAQUE:'OPAQUE',MASK:'MASK',BLEND:'BLEND'};function resolveURL(url,path){if(typeof url!=='string'||url==='')return'';if(/^(https?:)?\\/\\//i.test(url))return url;if(/^data:.*,.*$/i.test(url))return url;if(/^blob:.*$/i.test(url))return url;return path+url}function createDefaultMaterial(){return new THREE.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:false,depthTest:true,side:THREE.FrontSide})}function addUnknownExtensionsToUserData(knownExtensions,object,objectDef){for(var name in objectDef.extensions){if(knownExtensions[name]===undefined){object.userData.gltfExtensions=object.userData.gltfExtensions||{};object.userData.gltfExtensions[name]=objectDef.extensions[name]}}}function addMorphTargets(geometry,targets,accessors){var hasMorphPosition=false;var hasMorphNormal=false;for(var i=0,il=targets.length;i<il;i++){var target=targets[i];if(target.POSITION!==undefined)hasMorphPosition=true;if(target.NORMAL!==undefined)hasMorphNormal=true;if(hasMorphPosition&&hasMorphNormal)break}if(!hasMorphPosition&&!hasMorphNormal)return;var morphPositions=[];var morphNormals=[];for(var i=0,il=targets.length;i<il;i++){var target=targets[i];var attributeName='morphTarget'+i;if(hasMorphPosition){if(target.POSITION!==undefined){var positionAttribute=cloneBufferAttribute(accessors[target.POSITION]);positionAttribute.name=attributeName;var position=geometry.attributes.position;for(var j=0,jl=positionAttribute.count;j<jl;j++){positionAttribute.setXYZ(j,positionAttribute.getX(j)+position.getX(j),positionAttribute.getY(j)+position.getY(j),positionAttribute.getZ(j)+position.getZ(j))}}else{positionAttribute=geometry.attributes.position}morphPositions.push(positionAttribute)}if(hasMorphNormal){var normalAttribute;if(target.NORMAL!==undefined){var normalAttribute=cloneBufferAttribute(accessors[target.NORMAL]);normalAttribute.name=attributeName;var normal=geometry.attributes.normal;for(var j=0,jl=normalAttribute.count;j<jl;j++){normalAttribute.setXYZ(j,normalAttribute.getX(j)+normal.getX(j),normalAttribute.getY(j)+normal.getY(j),normalAttribute.getZ(j)+normal.getZ(j))}}else{normalAttribute=geometry.attributes.normal}morphNormals.push(normalAttribute)}}if(hasMorphPosition)geometry.morphAttributes.position=morphPositions;if(hasMorphNormal)geometry.morphAttributes.normal=morphNormals}function updateMorphTargets(mesh,meshDef){mesh.updateMorphTargets();if(meshDef.weights!==undefined){for(var i=0,il=meshDef.weights.length;i<il;i++){mesh.morphTargetInfluences[i]=meshDef.weights[i]}}if(meshDef.extras&&Array.isArray(meshDef.extras.targetNames)){var targetNames=meshDef.extras.targetNames;if(mesh.morphTargetInfluences.length===targetNames.length){mesh.morphTargetDictionary={};for(var i=0,il=targetNames.length;i<il;i++){mesh.morphTargetDictionary[targetNames[i]]=i}}else{console.warn('THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.')}}}function isPrimitiveEqual(a,b){if(a.indices!==b.indices){return false}return isObjectEqual(a.attributes,b.attributes)}function isObjectEqual(a,b){if(Object.keys(a).length!==Object.keys(b).length)return false;for(var key in a){if(a[key]!==b[key])return false}return true}function isArrayEqual(a,b){if(a.length!==b.length)return false;for(var i=0,il=a.length;i<il;i++){if(a[i]!==b[i])return false}return true}function getCachedGeometry(cache,newPrimitive){for(var i=0,il=cache.length;i<il;i++){var cached=cache[i];if(isPrimitiveEqual(cached.primitive,newPrimitive))return cached.promise}return null}function getCachedCombinedGeometry(cache,geometries){for(var i=0,il=cache.length;i<il;i++){var cached=cache[i];if(isArrayEqual(geometries,cached.baseGeometries))return cached.geometry}return null}function getCachedMultiPassGeometry(cache,geometry,primitives){for(var i=0,il=cache.length;i<il;i++){var cached=cache[i];if(geometry===cached.baseGeometry&&isArrayEqual(primitives,cached.primitives))return cached.geometry}return null}function cloneBufferAttribute(attribute){if(attribute.isInterleavedBufferAttribute){var count=attribute.count;var itemSize=attribute.itemSize;var array=attribute.array.slice(0,count*itemSize);for(var i=0;i<count;++i){array[i]=attribute.getX(i);if(itemSize>=2)array[i+1]=attribute.getY(i);if(itemSize>=3)array[i+2]=attribute.getZ(i);if(itemSize>=4)array[i+3]=attribute.getW(i)}return new THREE.BufferAttribute(array,itemSize,attribute.normalized)}return attribute.clone()}function isMultiPassGeometry(primitives){if(primitives.length<2)return false;var primitive0=primitives[0];var targets0=primitive0.targets||[];if(primitive0.indices===undefined)return false;for(var i=1,il=primitives.length;i<il;i++){var primitive=primitives[i];if(primitive0.mode!==primitive.mode)return false;if(primitive.indices===undefined)return false;if(!isObjectEqual(primitive0.attributes,primitive.attributes))return false;var targets=primitive.targets||[];if(targets0.length!==targets.length)return false;for(var j=0,jl=targets0.length;j<jl;j++){if(!isObjectEqual(targets0[j],targets[j]))return false}}return true}function GLTFParser(json,extensions,options){this.json=json||{};this.extensions=extensions||{};this.options=options||{};this.cache=new GLTFRegistry;this.primitiveCache=[];this.multiplePrimitivesCache=[];this.multiPassGeometryCache=[];this.textureLoader=new THREE.TextureLoader(this.options.manager);this.textureLoader.setCrossOrigin(this.options.crossOrigin);this.fileLoader=new THREE.FileLoader(this.options.manager);this.fileLoader.setResponseType('arraybuffer')}GLTFParser.prototype.parse=function(onLoad,onError){var json=this.json;this.cache.removeAll();this.markDefs();this.getMultiDependencies(['scene','animation','camera']).then(function(dependencies){var scenes=dependencies.scenes||[];var scene=scenes[json.scene||0];var animations=dependencies.animations||[];var cameras=dependencies.cameras||[];onLoad(scene,scenes,cameras,animations,json)}).catch(onError)};GLTFParser.prototype.markDefs=function(){var nodeDefs=this.json.nodes||[];var skinDefs=this.json.skins||[];var meshDefs=this.json.meshes||[];var meshReferences={};var meshUses={};for(var skinIndex=0,skinLength=skinDefs.length;skinIndex<skinLength;skinIndex++){var joints=skinDefs[skinIndex].joints;for(var i=0,il=joints.length;i<il;i++){nodeDefs[joints[i]].isBone=true}}for(var nodeIndex=0,nodeLength=nodeDefs.length;nodeIndex<nodeLength;nodeIndex++){var nodeDef=nodeDefs[nodeIndex];if(nodeDef.mesh!==undefined){if(meshReferences[nodeDef.mesh]===undefined){meshReferences[nodeDef.mesh]=meshUses[nodeDef.mesh]=0}meshReferences[nodeDef.mesh]++;if(nodeDef.skin!==undefined){meshDefs[nodeDef.mesh].isSkinnedMesh=true}}}this.json.meshReferences=meshReferences;this.json.meshUses=meshUses};GLTFParser.prototype.getDependency=function(type,index){var cacheKey=type+':'+index;var dependency=this.cache.get(cacheKey);if(!dependency){switch(type){case'scene':dependency=this.loadScene(index);break;case'node':dependency=this.loadNode(index);break;case'mesh':dependency=this.loadMesh(index);break;case'accessor':dependency=this.loadAccessor(index);break;case'bufferView':dependency=this.loadBufferView(index);break;case'buffer':dependency=this.loadBuffer(index);break;case'material':dependency=this.loadMaterial(index);break;case'texture':dependency=this.loadTexture(index);break;case'skin':dependency=this.loadSkin(index);break;case'animation':dependency=this.loadAnimation(index);break;case'camera':dependency=this.loadCamera(index);break;default:throw new Error('Unknown type: '+type);}this.cache.add(cacheKey,dependency)}return dependency};GLTFParser.prototype.getDependencies=function(type){var dependencies=this.cache.get(type);if(!dependencies){var parser=this;var defs=this.json[type+(type==='mesh'?'es':'s')]||[];dependencies=Promise.all(defs.map(function(def,index){return parser.getDependency(type,index)}));this.cache.add(type,dependencies)}return dependencies};GLTFParser.prototype.getMultiDependencies=function(types){var results={};var pendings=[];for(var i=0,il=types.length;i<il;i++){var type=types[i];var value=this.getDependencies(type);value=value.then(function(key,value){results[key]=value}.bind(this,type+(type==='mesh'?'es':'s')));pendings.push(value)}return Promise.all(pendings).then(function(){return results})};GLTFParser.prototype.loadBuffer=function(bufferIndex){var bufferDef=this.json.buffers[bufferIndex];var loader=this.fileLoader;if(bufferDef.type&&bufferDef.type!=='arraybuffer'){throw new Error('THREE.GLTFLoader: '+bufferDef.type+' buffer type is not supported.')}if(bufferDef.uri===undefined&&bufferIndex===0){return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body)}var options=this.options;return new Promise(function(resolve,reject){loader.load(resolveURL(bufferDef.uri,options.path),resolve,undefined,function(){reject(new Error('THREE.GLTFLoader: Failed to load buffer \"'+bufferDef.uri+'\".'))})})};GLTFParser.prototype.loadBufferView=function(bufferViewIndex){var bufferViewDef=this.json.bufferViews[bufferViewIndex];return this.getDependency('buffer',bufferViewDef.buffer).then(function(buffer){var byteLength=bufferViewDef.byteLength||0;var byteOffset=bufferViewDef.byteOffset||0;return buffer.slice(byteOffset,byteOffset+byteLength)})};GLTFParser.prototype.loadAccessor=function(accessorIndex){var parser=this;var json=this.json;var accessorDef=this.json.accessors[accessorIndex];if(accessorDef.bufferView===undefined&&accessorDef.sparse===undefined){return null}var pendingBufferViews=[];if(accessorDef.bufferView!==undefined){pendingBufferViews.push(this.getDependency('bufferView',accessorDef.bufferView))}else{pendingBufferViews.push(null)}if(accessorDef.sparse!==undefined){pendingBufferViews.push(this.getDependency('bufferView',accessorDef.sparse.indices.bufferView));pendingBufferViews.push(this.getDependency('bufferView',accessorDef.sparse.values.bufferView))}return Promise.all(pendingBufferViews).then(function(bufferViews){var bufferView=bufferViews[0];var itemSize=WEBGL_TYPE_SIZES[accessorDef.type];var TypedArray=WEBGL_COMPONENT_TYPES[accessorDef.componentType];var elementBytes=TypedArray.BYTES_PER_ELEMENT;var itemBytes=elementBytes*itemSize;var byteOffset=accessorDef.byteOffset||0;var byteStride=json.bufferViews[accessorDef.bufferView].byteStride;var normalized=accessorDef.normalized===true;var array,bufferAttribute;if(byteStride&&byteStride!==itemBytes){var ibCacheKey='InterleavedBuffer:'+accessorDef.bufferView+':'+accessorDef.componentType;var ib=parser.cache.get(ibCacheKey);if(!ib){array=new TypedArray(bufferView);ib=new THREE.InterleavedBuffer(array,byteStride/elementBytes);parser.cache.add(ibCacheKey,ib)}bufferAttribute=new THREE.InterleavedBufferAttribute(ib,itemSize,byteOffset/elementBytes,normalized)}else{if(bufferView===null){array=new TypedArray(accessorDef.count*itemSize)}else{array=new TypedArray(bufferView,byteOffset,accessorDef.count*itemSize)}bufferAttribute=new THREE.BufferAttribute(array,itemSize,normalized)}if(accessorDef.sparse!==undefined){var itemSizeIndices=WEBGL_TYPE_SIZES.SCALAR;var TypedArrayIndices=WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];var byteOffsetIndices=accessorDef.sparse.indices.byteOffset||0;var byteOffsetValues=accessorDef.sparse.values.byteOffset||0;var sparseIndices=new TypedArrayIndices(bufferViews[1],byteOffsetIndices,accessorDef.sparse.count*itemSizeIndices);var sparseValues=new TypedArray(bufferViews[2],byteOffsetValues,accessorDef.sparse.count*itemSize);if(bufferView!==null){bufferAttribute.setArray(bufferAttribute.array.slice())}for(var i=0,il=sparseIndices.length;i<il;i++){var index=sparseIndices[i];bufferAttribute.setX(index,sparseValues[i*itemSize]);if(itemSize>=2)bufferAttribute.setY(index,sparseValues[i*itemSize+1]);if(itemSize>=3)bufferAttribute.setZ(index,sparseValues[i*itemSize+2]);if(itemSize>=4)bufferAttribute.setW(index,sparseValues[i*itemSize+3]);if(itemSize>=5)throw new Error('THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.')}}return bufferAttribute})};GLTFParser.prototype.loadTexture=function(textureIndex){var parser=this;var json=this.json;var options=this.options;var textureLoader=this.textureLoader;var URL=window.URL||window.webkitURL;var textureDef=json.textures[textureIndex];var textureExtensions=textureDef.extensions||{};var source;if(textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS]){source=json.images[textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS].source]}else{source=json.images[textureDef.source]}var sourceURI=source.uri;var isObjectURL=false;if(source.bufferView!==undefined){sourceURI=parser.getDependency('bufferView',source.bufferView).then(function(bufferView){isObjectURL=true;var blob=new Blob([bufferView],{type:source.mimeType});sourceURI=URL.createObjectURL(blob);return sourceURI})}return Promise.resolve(sourceURI).then(function(sourceURI){var loader=THREE.Loader.Handlers.get(sourceURI);if(!loader){loader=textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS]?parser.extensions[EXTENSIONS.MSFT_TEXTURE_DDS].ddsLoader:textureLoader}return new Promise(function(resolve,reject){loader.load(resolveURL(sourceURI,options.path),resolve,undefined,reject)})}).then(function(texture){if(isObjectURL===true){URL.revokeObjectURL(sourceURI)}texture.flipY=false;if(textureDef.name!==undefined)texture.name=textureDef.name;if(!textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS]){texture.format=textureDef.format!==undefined?WEBGL_TEXTURE_FORMATS[textureDef.format]:THREE.RGBAFormat}if(textureDef.internalFormat!==undefined&&texture.format!==WEBGL_TEXTURE_FORMATS[textureDef.internalFormat]){console.warn('THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. '+'internalFormat will be forced to be the same value as format.')}texture.type=textureDef.type!==undefined?WEBGL_TEXTURE_DATATYPES[textureDef.type]:THREE.UnsignedByteType;var samplers=json.samplers||{};var sampler=samplers[textureDef.sampler]||{};texture.magFilter=WEBGL_FILTERS[sampler.magFilter]||THREE.LinearFilter;texture.minFilter=WEBGL_FILTERS[sampler.minFilter]||THREE.LinearMipMapLinearFilter;texture.wrapS=WEBGL_WRAPPINGS[sampler.wrapS]||THREE.RepeatWrapping;texture.wrapT=WEBGL_WRAPPINGS[sampler.wrapT]||THREE.RepeatWrapping;return texture})};GLTFParser.prototype.assignTexture=function(materialParams,textureName,textureIndex){return this.getDependency('texture',textureIndex).then(function(texture){materialParams[textureName]=texture})};GLTFParser.prototype.loadMaterial=function(materialIndex){var parser=this;var json=this.json;var extensions=this.extensions;var materialDef=this.json.materials[materialIndex];var materialType;var materialParams={};var materialExtensions=materialDef.extensions||{};var pending=[];if(materialExtensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]){var sgExtension=extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];materialType=sgExtension.getMaterialType(materialDef);pending.push(sgExtension.extendParams(materialParams,materialDef,parser))}else if(materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]){var kmuExtension=extensions[EXTENSIONS.KHR_MATERIALS_UNLIT];materialType=kmuExtension.getMaterialType(materialDef);pending.push(kmuExtension.extendParams(materialParams,materialDef,parser))}else{materialType=THREE.MeshStandardMaterial;var metallicRoughness=materialDef.pbrMetallicRoughness||{};materialParams.color=new THREE.Color(1,1,1);materialParams.opacity=1;if(Array.isArray(metallicRoughness.baseColorFactor)){var array=metallicRoughness.baseColorFactor;materialParams.color.fromArray(array);materialParams.opacity=array[3]}if(metallicRoughness.baseColorTexture!==undefined){pending.push(parser.assignTexture(materialParams,'map',metallicRoughness.baseColorTexture.index))}materialParams.metalness=metallicRoughness.metallicFactor!==undefined?metallicRoughness.metallicFactor:1;materialParams.roughness=metallicRoughness.roughnessFactor!==undefined?metallicRoughness.roughnessFactor:1;if(metallicRoughness.metallicRoughnessTexture!==undefined){var textureIndex=metallicRoughness.metallicRoughnessTexture.index;pending.push(parser.assignTexture(materialParams,'metalnessMap',textureIndex));pending.push(parser.assignTexture(materialParams,'roughnessMap',textureIndex))}}if(materialDef.doubleSided===true){materialParams.side=THREE.DoubleSide}var alphaMode=materialDef.alphaMode||ALPHA_MODES.OPAQUE;if(alphaMode===ALPHA_MODES.BLEND){materialParams.transparent=true}else{materialParams.transparent=false;if(alphaMode===ALPHA_MODES.MASK){materialParams.alphaTest=materialDef.alphaCutoff!==undefined?materialDef.alphaCutoff:0.5}}if(materialDef.normalTexture!==undefined&&materialType!==THREE.MeshBasicMaterial){pending.push(parser.assignTexture(materialParams,'normalMap',materialDef.normalTexture.index));materialParams.normalScale=new THREE.Vector2(1,1);if(materialDef.normalTexture.scale!==undefined){materialParams.normalScale.set(materialDef.normalTexture.scale,materialDef.normalTexture.scale)}}if(materialDef.occlusionTexture!==undefined&&materialType!==THREE.MeshBasicMaterial){pending.push(parser.assignTexture(materialParams,'aoMap',materialDef.occlusionTexture.index));if(materialDef.occlusionTexture.strength!==undefined){materialParams.aoMapIntensity=materialDef.occlusionTexture.strength}}if(materialDef.emissiveFactor!==undefined&&materialType!==THREE.MeshBasicMaterial){materialParams.emissive=new THREE.Color().fromArray(materialDef.emissiveFactor)}if(materialDef.emissiveTexture!==undefined&&materialType!==THREE.MeshBasicMaterial){pending.push(parser.assignTexture(materialParams,'emissiveMap',materialDef.emissiveTexture.index))}return Promise.all(pending).then(function(){var material;if(materialType===THREE.ShaderMaterial){material=extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(materialParams)}else{material=new materialType(materialParams)}if(materialDef.name!==undefined)material.name=materialDef.name;if(material.normalScale){material.normalScale.y=-material.normalScale.y}if(material.map)material.map.encoding=THREE.sRGBEncoding;if(material.emissiveMap)material.emissiveMap.encoding=THREE.sRGBEncoding;if(material.specularMap)material.specularMap.encoding=THREE.sRGBEncoding;if(materialDef.extras)material.userData=materialDef.extras;if(materialDef.extensions)addUnknownExtensionsToUserData(extensions,material,materialDef);return material})};function addPrimitiveAttributes(geometry,primitiveDef,accessors){var attributes=primitiveDef.attributes;for(var gltfAttributeName in attributes){var threeAttributeName=ATTRIBUTES[gltfAttributeName];var bufferAttribute=accessors[attributes[gltfAttributeName]];if(!threeAttributeName)continue;if(threeAttributeName in geometry.attributes)continue;geometry.addAttribute(threeAttributeName,bufferAttribute)}if(primitiveDef.indices!==undefined&&!geometry.index){geometry.setIndex(accessors[primitiveDef.indices])}if(primitiveDef.targets!==undefined){addMorphTargets(geometry,primitiveDef.targets,accessors)}if(primitiveDef.extras!==undefined){geometry.userData=primitiveDef.extras}}GLTFParser.prototype.loadGeometries=function(primitives){var parser=this;var extensions=this.extensions;var cache=this.primitiveCache;var isMultiPass=isMultiPassGeometry(primitives);var originalPrimitives;if(isMultiPass){originalPrimitives=primitives;primitives=[primitives[0]]}return this.getDependencies('accessor').then(function(accessors){var pending=[];for(var i=0,il=primitives.length;i<il;i++){var primitive=primitives[i];var cached=getCachedGeometry(cache,primitive);if(cached){pending.push(cached)}else if(primitive.extensions&&primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]){var geometryPromise=extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive,parser).then(function(geometry){addPrimitiveAttributes(geometry,primitive,accessors);return geometry});cache.push({primitive:primitive,promise:geometryPromise});pending.push(geometryPromise)}else{var geometry=new THREE.BufferGeometry;addPrimitiveAttributes(geometry,primitive,accessors);var geometryPromise=Promise.resolve(geometry);cache.push({primitive:primitive,promise:geometryPromise});pending.push(geometryPromise)}}return Promise.all(pending).then(function(geometries){if(isMultiPass){var baseGeometry=geometries[0];var cache=parser.multiPassGeometryCache;var cached=getCachedMultiPassGeometry(cache,baseGeometry,originalPrimitives);if(cached!==null)return[cached.geometry];var geometry=new THREE.BufferGeometry;geometry.name=baseGeometry.name;geometry.userData=baseGeometry.userData;for(var key in baseGeometry.attributes){geometry.addAttribute(key,baseGeometry.attributes[key])}for(var key in baseGeometry.morphAttributes){geometry.morphAttributes[key]=baseGeometry.morphAttributes[key]}var indices=[];var offset=0;for(var i=0,il=originalPrimitives.length;i<il;i++){var accessor=accessors[originalPrimitives[i].indices];for(var j=0,jl=accessor.count;j<jl;j++){indices.push(accessor.array[j])}geometry.addGroup(offset,accessor.count,i);offset+=accessor.count}geometry.setIndex(indices);cache.push({geometry:geometry,baseGeometry:baseGeometry,primitives:originalPrimitives});return[geometry]}else if(geometries.length>1&&THREE.BufferGeometryUtils!==undefined){for(var i=1,il=primitives.length;i<il;i++){if(primitives[0].mode!==primitives[i].mode)return geometries}var cache=parser.multiplePrimitivesCache;var cached=getCachedCombinedGeometry(cache,geometries);if(cached){if(cached.geometry!==null)return[cached.geometry]}else{var geometry=THREE.BufferGeometryUtils.mergeBufferGeometries(geometries,true);cache.push({geometry:geometry,baseGeometries:geometries});if(geometry!==null)return[geometry]}}return geometries})})};GLTFParser.prototype.loadMesh=function(meshIndex){var scope=this;var json=this.json;var extensions=this.extensions;var meshDef=this.json.meshes[meshIndex];return this.getMultiDependencies(['accessor','material']).then(function(dependencies){var primitives=meshDef.primitives;var originalMaterials=[];for(var i=0,il=primitives.length;i<il;i++){originalMaterials[i]=primitives[i].material===undefined?createDefaultMaterial():dependencies.materials[primitives[i].material]}return scope.loadGeometries(primitives).then(function(geometries){var isMultiMaterial=geometries.length===1&&geometries[0].groups.length>0;var meshes=[];for(var i=0,il=geometries.length;i<il;i++){var geometry=geometries[i];var primitive=primitives[i];var mesh;var material=isMultiMaterial?originalMaterials:originalMaterials[i];if(primitive.mode===WEBGL_CONSTANTS.TRIANGLES||primitive.mode===WEBGL_CONSTANTS.TRIANGLE_STRIP||primitive.mode===WEBGL_CONSTANTS.TRIANGLE_FAN||primitive.mode===undefined){mesh=meshDef.isSkinnedMesh===true?new THREE.SkinnedMesh(geometry,material):new THREE.Mesh(geometry,material);if(primitive.mode===WEBGL_CONSTANTS.TRIANGLE_STRIP){mesh.drawMode=THREE.TriangleStripDrawMode}else if(primitive.mode===WEBGL_CONSTANTS.TRIANGLE_FAN){mesh.drawMode=THREE.TriangleFanDrawMode}}else if(primitive.mode===WEBGL_CONSTANTS.LINES){mesh=new THREE.LineSegments(geometry,material)}else if(primitive.mode===WEBGL_CONSTANTS.LINE_STRIP){mesh=new THREE.Line(geometry,material)}else if(primitive.mode===WEBGL_CONSTANTS.LINE_LOOP){mesh=new THREE.LineLoop(geometry,material)}else if(primitive.mode===WEBGL_CONSTANTS.POINTS){mesh=new THREE.Points(geometry,material)}else{throw new Error('THREE.GLTFLoader: Primitive mode unsupported: '+primitive.mode)}if(Object.keys(mesh.geometry.morphAttributes).length>0){updateMorphTargets(mesh,meshDef)}mesh.name=meshDef.name||'mesh_'+meshIndex;if(geometries.length>1)mesh.name+='_'+i;if(meshDef.extras!==undefined)mesh.userData=meshDef.extras;meshes.push(mesh);var materials=isMultiMaterial?mesh.material:[mesh.material];var useVertexColors=geometry.attributes.color!==undefined;var useFlatShading=geometry.attributes.normal===undefined;var useSkinning=mesh.isSkinnedMesh===true;var useMorphTargets=Object.keys(geometry.morphAttributes).length>0;var useMorphNormals=useMorphTargets&&geometry.morphAttributes.normal!==undefined;for(var j=0,jl=materials.length;j<jl;j++){var material=materials[j];if(mesh.isPoints){var cacheKey='PointsMaterial:'+material.uuid;var pointsMaterial=scope.cache.get(cacheKey);if(!pointsMaterial){pointsMaterial=new THREE.PointsMaterial;THREE.Material.prototype.copy.call(pointsMaterial,material);pointsMaterial.color.copy(material.color);pointsMaterial.map=material.map;pointsMaterial.lights=false;scope.cache.add(cacheKey,pointsMaterial)}material=pointsMaterial}else if(mesh.isLine){var cacheKey='LineBasicMaterial:'+material.uuid;var lineMaterial=scope.cache.get(cacheKey);if(!lineMaterial){lineMaterial=new THREE.LineBasicMaterial;THREE.Material.prototype.copy.call(lineMaterial,material);lineMaterial.color.copy(material.color);lineMaterial.lights=false;scope.cache.add(cacheKey,lineMaterial)}material=lineMaterial}if(useVertexColors||useFlatShading||useSkinning||useMorphTargets){var cacheKey='ClonedMaterial:'+material.uuid+':';if(material.isGLTFSpecularGlossinessMaterial)cacheKey+='specular-glossiness:';if(useSkinning)cacheKey+='skinning:';if(useVertexColors)cacheKey+='vertex-colors:';if(useFlatShading)cacheKey+='flat-shading:';if(useMorphTargets)cacheKey+='morph-targets:';if(useMorphNormals)cacheKey+='morph-normals:';var cachedMaterial=scope.cache.get(cacheKey);if(!cachedMaterial){cachedMaterial=material.isGLTFSpecularGlossinessMaterial?extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].cloneMaterial(material):material.clone();if(useSkinning)cachedMaterial.skinning=true;if(useVertexColors)cachedMaterial.vertexColors=THREE.VertexColors;if(useFlatShading)cachedMaterial.flatShading=true;if(useMorphTargets)cachedMaterial.morphTargets=true;if(useMorphNormals)cachedMaterial.morphNormals=true;scope.cache.add(cacheKey,cachedMaterial)}material=cachedMaterial}materials[j]=material;if(material.aoMap&&geometry.attributes.uv2===undefined&&geometry.attributes.uv!==undefined){console.log('THREE.GLTFLoader: Duplicating UVs to support aoMap.');geometry.addAttribute('uv2',new THREE.BufferAttribute(geometry.attributes.uv.array,2))}if(material.isGLTFSpecularGlossinessMaterial){mesh.onBeforeRender=extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].refreshUniforms}}mesh.material=isMultiMaterial?materials:materials[0]}if(meshes.length===1){return meshes[0]}var group=new THREE.Group;for(var i=0,il=meshes.length;i<il;i++){group.add(meshes[i])}return group})})};GLTFParser.prototype.loadCamera=function(cameraIndex){var camera;var cameraDef=this.json.cameras[cameraIndex];var params=cameraDef[cameraDef.type];if(!params){console.warn('THREE.GLTFLoader: Missing camera parameters.');return}if(cameraDef.type==='perspective'){camera=new THREE.PerspectiveCamera(THREE.Math.radToDeg(params.yfov),params.aspectRatio||1,params.znear||1,params.zfar||2e6)}else if(cameraDef.type==='orthographic'){camera=new THREE.OrthographicCamera(params.xmag/-2,params.xmag/2,params.ymag/2,params.ymag/-2,params.znear,params.zfar)}if(cameraDef.name!==undefined)camera.name=cameraDef.name;if(cameraDef.extras)camera.userData=cameraDef.extras;return Promise.resolve(camera)};GLTFParser.prototype.loadSkin=function(skinIndex){var skinDef=this.json.skins[skinIndex];var skinEntry={joints:skinDef.joints};if(skinDef.inverseBindMatrices===undefined){return Promise.resolve(skinEntry)}return this.getDependency('accessor',skinDef.inverseBindMatrices).then(function(accessor){skinEntry.inverseBindMatrices=accessor;return skinEntry})};GLTFParser.prototype.loadAnimation=function(animationIndex){var json=this.json;var animationDef=this.json.animations[animationIndex];return this.getMultiDependencies(['accessor','node']).then(function(dependencies){var tracks=[];for(var i=0,il=animationDef.channels.length;i<il;i++){var channel=animationDef.channels[i];var sampler=animationDef.samplers[channel.sampler];if(sampler){var target=channel.target;var name=target.node!==undefined?target.node:target.id;var input=animationDef.parameters!==undefined?animationDef.parameters[sampler.input]:sampler.input;var output=animationDef.parameters!==undefined?animationDef.parameters[sampler.output]:sampler.output;var inputAccessor=dependencies.accessors[input];var outputAccessor=dependencies.accessors[output];var node=dependencies.nodes[name];if(node){node.updateMatrix();node.matrixAutoUpdate=true;var TypedKeyframeTrack;switch(PATH_PROPERTIES[target.path]){case PATH_PROPERTIES.weights:TypedKeyframeTrack=THREE.NumberKeyframeTrack;break;case PATH_PROPERTIES.rotation:TypedKeyframeTrack=THREE.QuaternionKeyframeTrack;break;case PATH_PROPERTIES.position:case PATH_PROPERTIES.scale:default:TypedKeyframeTrack=THREE.VectorKeyframeTrack;break;}var targetName=node.name?node.name:node.uuid;var interpolation=sampler.interpolation!==undefined?INTERPOLATION[sampler.interpolation]:THREE.InterpolateLinear;var targetNames=[];if(PATH_PROPERTIES[target.path]===PATH_PROPERTIES.weights){node.traverse(function(object){if(object.isMesh===true&&object.morphTargetInfluences){targetNames.push(object.name?object.name:object.uuid)}})}else{targetNames.push(targetName)}for(var j=0,jl=targetNames.length;j<jl;j++){var track=new TypedKeyframeTrack(targetNames[j]+'.'+PATH_PROPERTIES[target.path],THREE.AnimationUtils.arraySlice(inputAccessor.array,0),THREE.AnimationUtils.arraySlice(outputAccessor.array,0),interpolation);if(sampler.interpolation==='CUBICSPLINE'){track.createInterpolant=function InterpolantFactoryMethodGLTFCubicSpline(result){return new GLTFCubicSplineInterpolant(this.times,this.values,this.getValueSize()/3,result)};track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=true}tracks.push(track)}}}}var name=animationDef.name!==undefined?animationDef.name:'animation_'+animationIndex;return new THREE.AnimationClip(name,undefined,tracks)})};GLTFParser.prototype.loadNode=function(nodeIndex){var json=this.json;var extensions=this.extensions;var meshReferences=this.json.meshReferences;var meshUses=this.json.meshUses;var nodeDef=this.json.nodes[nodeIndex];return this.getMultiDependencies(['mesh','skin','camera','light']).then(function(dependencies){var node;if(nodeDef.isBone===true){node=new THREE.Bone}else if(nodeDef.mesh!==undefined){var mesh=dependencies.meshes[nodeDef.mesh];node=mesh.clone();if(mesh.isGroup===true){for(var i=0,il=mesh.children.length;i<il;i++){var child=mesh.children[i];if(child.material&&child.material.isGLTFSpecularGlossinessMaterial===true){node.children[i].onBeforeRender=child.onBeforeRender}}}else{if(mesh.material&&mesh.material.isGLTFSpecularGlossinessMaterial===true){node.onBeforeRender=mesh.onBeforeRender}}if(meshReferences[nodeDef.mesh]>1){node.name+='_instance_'+meshUses[nodeDef.mesh]++}}else if(nodeDef.camera!==undefined){node=dependencies.cameras[nodeDef.camera]}else if(nodeDef.extensions&&nodeDef.extensions[EXTENSIONS.KHR_LIGHTS]&&nodeDef.extensions[EXTENSIONS.KHR_LIGHTS].light!==undefined){var lights=extensions[EXTENSIONS.KHR_LIGHTS].lights;node=lights[nodeDef.extensions[EXTENSIONS.KHR_LIGHTS].light]}else{node=new THREE.Object3D}if(nodeDef.name!==undefined){node.name=THREE.PropertyBinding.sanitizeNodeName(nodeDef.name)}if(nodeDef.extras)node.userData=nodeDef.extras;if(nodeDef.extensions)addUnknownExtensionsToUserData(extensions,node,nodeDef);if(nodeDef.matrix!==undefined){var matrix=new THREE.Matrix4;matrix.fromArray(nodeDef.matrix);node.applyMatrix(matrix)}else{if(nodeDef.translation!==undefined){node.position.fromArray(nodeDef.translation)}if(nodeDef.rotation!==undefined){node.quaternion.fromArray(nodeDef.rotation)}if(nodeDef.scale!==undefined){node.scale.fromArray(nodeDef.scale)}}return node})};GLTFParser.prototype.loadScene=function(){function buildNodeHierachy(nodeId,parentObject,json,allNodes,skins){var node=allNodes[nodeId];var nodeDef=json.nodes[nodeId];if(nodeDef.skin!==undefined){var meshes=node.isGroup===true?node.children:[node];for(var i=0,il=meshes.length;i<il;i++){var mesh=meshes[i];var skinEntry=skins[nodeDef.skin];var bones=[];var boneInverses=[];for(var j=0,jl=skinEntry.joints.length;j<jl;j++){var jointId=skinEntry.joints[j];var jointNode=allNodes[jointId];if(jointNode){bones.push(jointNode);var mat=new THREE.Matrix4;if(skinEntry.inverseBindMatrices!==undefined){mat.fromArray(skinEntry.inverseBindMatrices.array,j*16)}boneInverses.push(mat)}else{console.warn('THREE.GLTFLoader: Joint \"%s\" could not be found.',jointId)}}mesh.bind(new THREE.Skeleton(bones,boneInverses),mesh.matrixWorld)}}parentObject.add(node);if(nodeDef.children){var children=nodeDef.children;for(var i=0,il=children.length;i<il;i++){var child=children[i];buildNodeHierachy(child,node,json,allNodes,skins)}}}return function loadScene(sceneIndex){var json=this.json;var extensions=this.extensions;var sceneDef=this.json.scenes[sceneIndex];return this.getMultiDependencies(['node','skin']).then(function(dependencies){var scene=new THREE.Scene;if(sceneDef.name!==undefined)scene.name=sceneDef.name;if(sceneDef.extras)scene.userData=sceneDef.extras;if(sceneDef.extensions)addUnknownExtensionsToUserData(extensions,scene,sceneDef);var nodeIds=sceneDef.nodes||[];for(var i=0,il=nodeIds.length;i<il;i++){buildNodeHierachy(nodeIds[i],scene,json,dependencies.nodes,dependencies.skins)}if(sceneDef.extensions&&sceneDef.extensions[EXTENSIONS.KHR_LIGHTS]&&sceneDef.extensions[EXTENSIONS.KHR_LIGHTS].light!==undefined){var lights=extensions[EXTENSIONS.KHR_LIGHTS].lights;scene.add(lights[sceneDef.extensions[EXTENSIONS.KHR_LIGHTS].light])}return scene})}}();return GLTFLoader}();","'use strict';Object.defineProperty(exports,'__esModule',{value:true});function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}Date.prototype.plus=function(unit,value){var _unit=unit!==undefined?unit:'h';switch(_unit){case'h':this.setHours(this.getHours()+value);break;case'm':this.setMinutes(this.getMinutes()+value);break;case's':this.setSeconds(this.getSeconds()+value);break;case'ms':this.setMilliseconds(this.getMilliseconds()+value);break;}return this};Date.prototype.minus=function(unit,value){var _unit=unit!==undefined?unit:'h';switch(_unit){case'h':this.setHours(this.getHours()-value);break;case'm':this.setMinutes(this.getMinutes()-value);break;case's':this.setSeconds(this.getSeconds()-value);break;case'ms':this.setMilliseconds(this.getMilliseconds()-value);break;}return this};var Existence=function Existence(props){_classCallCheck(this,Existence);this.started=false;this.ended=false;this.start=props!==undefined&&props.start!==undefined?props.start:null;this.end=props!==undefined&&props.end!==undefined?props.end:null};exports.default=Existence;","// Polyfills\r\n\r\nif ( Number.EPSILON === undefined ) {\r\n\r\n\tNumber.EPSILON = Math.pow( 2, - 52 );\r\n\r\n}\r\n\r\n//\r\n\r\nif ( Math.sign === undefined ) {\r\n\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\r\n\r\n\tMath.sign = function ( x ) {\r\n\r\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\r\n\r\n\t};\r\n\r\n}\r\n\r\nif ( Function.prototype.name === undefined ) {\r\n\r\n\t// Missing in IE9-11.\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\r\n\r\n\tObject.defineProperty( Function.prototype, 'name', {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\r\n\r\n\t\t}\r\n\r\n\t} );\r\n\r\n}\r\n\r\nif ( Object.assign === undefined ) {\r\n\r\n\t// Missing in IE.\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\r\n\r\n\t( function () {\r\n\r\n\t\tObject.assign = function ( target ) {\r\n\r\n\t\t\t'use strict';\r\n\r\n\t\t\tif ( target === undefined || target === null ) {\r\n\r\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar output = Object( target );\r\n\r\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\r\n\r\n\t\t\t\tvar source = arguments[ index ];\r\n\r\n\t\t\t\tif ( source !== undefined && source !== null ) {\r\n\r\n\t\t\t\t\tfor ( var nextKey in source ) {\r\n\r\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\r\n\r\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\r\n\t\t};\r\n\r\n\t} )();\r\n\r\n}\n\n/*\r\n * A list of constants built-in for\r\n * the physics engine.\r\n */\r\n\r\nvar REVISION = '1.0.9';\r\n\r\n// BroadPhase\r\nvar BR_NULL = 0;\r\nvar BR_BRUTE_FORCE = 1;\r\nvar BR_SWEEP_AND_PRUNE = 2;\r\nvar BR_BOUNDING_VOLUME_TREE = 3;\r\n\r\n// Body type\r\nvar BODY_NULL = 0;\r\nvar BODY_DYNAMIC = 1;\r\nvar BODY_STATIC = 2;\r\nvar BODY_KINEMATIC = 3;\r\nvar BODY_GHOST = 4;\r\n\r\n// Shape type\r\nvar SHAPE_NULL = 0;\r\nvar SHAPE_SPHERE = 1;\r\nvar SHAPE_BOX = 2;\r\nvar SHAPE_CYLINDER = 3;\r\nvar SHAPE_PLANE = 4;\r\nvar SHAPE_PARTICLE = 5;\r\nvar SHAPE_TETRA = 6;\r\n\r\n// Joint type\r\nvar JOINT_NULL = 0;\r\nvar JOINT_DISTANCE = 1;\r\nvar JOINT_BALL_AND_SOCKET = 2;\r\nvar JOINT_HINGE = 3;\r\nvar JOINT_WHEEL = 4;\r\nvar JOINT_SLIDER = 5;\r\nvar JOINT_PRISMATIC = 6;\r\n\r\n// AABB aproximation\r\nvar AABB_PROX = 0.005;\n\nvar _Math = {\r\n\r\n    sqrt   : Math.sqrt,\r\n    abs    : Math.abs,\r\n    floor  : Math.floor,\r\n    cos    : Math.cos,\r\n    sin    : Math.sin,\r\n    acos   : Math.acos,\r\n    asin   : Math.asin,\r\n    atan2  : Math.atan2,\r\n    round  : Math.round,\r\n    pow    : Math.pow,\r\n    max    : Math.max,\r\n    min    : Math.min,\r\n    random : Math.random,\r\n\r\n    degtorad : 0.0174532925199432957,\r\n    radtodeg : 57.295779513082320876,\r\n    PI       : 3.141592653589793,\r\n    TwoPI    : 6.283185307179586,\r\n    PI90     : 1.570796326794896,\r\n    PI270    : 4.712388980384689,\r\n\r\n    INF      : Infinity,\r\n    EPZ      : 0.00001,\r\n    EPZ2      : 0.000001,\r\n\r\n    lerp: function ( x, y, t ) { \r\n\r\n        return ( 1 - t ) * x + t * y; \r\n\r\n    },\r\n\r\n    randInt: function ( low, high ) { \r\n\r\n        return low + _Math.floor( _Math.random() * ( high - low + 1 ) ); \r\n\r\n    },\r\n\r\n    rand: function ( low, high ) { \r\n\r\n        return low + _Math.random() * ( high - low ); \r\n\r\n    },\r\n    \r\n    generateUUID: function () {\r\n\r\n        // http://www.broofa.com/Tools/Math.uuid.htm\r\n\r\n        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' );\r\n        var uuid = new Array( 36 );\r\n        var rnd = 0, r;\r\n\r\n        return function generateUUID() {\r\n\r\n            for ( var i = 0; i < 36; i ++ ) {\r\n\r\n                if ( i === 8 || i === 13 || i === 18 || i === 23 ) {\r\n\r\n                    uuid[ i ] = '-';\r\n\r\n                } else if ( i === 14 ) {\r\n\r\n                    uuid[ i ] = '4';\r\n\r\n                } else {\r\n\r\n                    if ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0;\r\n                    r = rnd & 0xf;\r\n                    rnd = rnd >> 4;\r\n                    uuid[ i ] = chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ];\r\n\r\n                }\r\n\r\n            }\r\n\r\n            return uuid.join( '' );\r\n\r\n        };\r\n\r\n    }(),\r\n\r\n    int: function( x ) { \r\n\r\n        return _Math.floor(x); \r\n\r\n    },\r\n\r\n    fix: function( x, n ) { \r\n\r\n        return x.toFixed(n || 3, 10); \r\n\r\n    },\r\n\r\n    clamp: function ( value, min, max ) { \r\n\r\n        return _Math.max( min, _Math.min( max, value ) ); \r\n\r\n    },\r\n    \r\n    //clamp: function ( x, a, b ) { return ( x < a ) ? a : ( ( x > b ) ? b : x ); },\r\n\r\n    \r\n\r\n    distance: function( p1, p2 ){\r\n\r\n        var xd = p2[0]-p1[0];\r\n        var yd = p2[1]-p1[1];\r\n        var zd = p2[2]-p1[2];\r\n        return _Math.sqrt(xd*xd + yd*yd + zd*zd);\r\n\r\n    },\r\n\r\n    /*unwrapDegrees: function ( r ) {\r\n\r\n        r = r % 360;\r\n        if (r > 180) r -= 360;\r\n        if (r < -180) r += 360;\r\n        return r;\r\n\r\n    },\r\n\r\n    unwrapRadian: function( r ){\r\n\r\n        r = r % _Math.TwoPI;\r\n        if (r > _Math.PI) r -= _Math.TwoPI;\r\n        if (r < -_Math.PI) r += _Math.TwoPI;\r\n        return r;\r\n\r\n    },*/\r\n\r\n    acosClamp: function ( cos ) {\r\n\r\n        if(cos>1)return 0;\r\n        else if(cos<-1)return _Math.PI;\r\n        else return _Math.acos(cos);\r\n\r\n    },\r\n\r\n    distanceVector: function( v1, v2 ){\r\n\r\n        var xd = v1.x - v2.x;\r\n        var yd = v1.y - v2.y;\r\n        var zd = v1.z - v2.z;\r\n        return xd * xd + yd * yd + zd * zd;\r\n\r\n    },\r\n\r\n    dotVectors: function ( a, b ) {\r\n\r\n        return a.x * b.x + a.y * b.y + a.z * b.z;\r\n\r\n    },\r\n\r\n};\n\nfunction printError( clazz, msg ){\r\n    console.error(\"[OIMO] \" + clazz + \": \" + msg);\r\n}\r\n\r\n// A performance evaluator\r\n\r\nfunction InfoDisplay(world){\r\n\r\n    this.parent = world;\r\n\r\n    this.infos = new Float32Array( 13 );\r\n    this.f = [0,0,0];\r\n\r\n    this.times = [0,0,0,0];\r\n\r\n    this.broadPhase = this.parent.broadPhaseType;\r\n\r\n    this.version = REVISION;\r\n\r\n    this.fps = 0;\r\n\r\n    this.tt = 0;\r\n\r\n    this.broadPhaseTime = 0;\r\n    this.narrowPhaseTime = 0;\r\n    this.solvingTime = 0;\r\n    this.totalTime = 0;\r\n    this.updateTime = 0;\r\n\r\n    this.MaxBroadPhaseTime = 0;\r\n    this.MaxNarrowPhaseTime = 0;\r\n    this.MaxSolvingTime = 0;\r\n    this.MaxTotalTime = 0;\r\n    this.MaxUpdateTime = 0;\r\n}\r\n\r\nObject.assign( InfoDisplay.prototype, {\r\n\r\n    setTime: function(n){\r\n        this.times[ n || 0 ] = performance.now();\r\n    },\r\n\r\n    resetMax: function(){\r\n\r\n        this.MaxBroadPhaseTime = 0;\r\n        this.MaxNarrowPhaseTime = 0;\r\n        this.MaxSolvingTime = 0;\r\n        this.MaxTotalTime = 0;\r\n        this.MaxUpdateTime = 0;\r\n\r\n    },\r\n\r\n    calcBroadPhase: function () {\r\n\r\n        this.setTime( 2 );\r\n        this.broadPhaseTime = this.times[ 2 ] - this.times[ 1 ];\r\n\r\n    },\r\n\r\n    calcNarrowPhase: function () {\r\n\r\n        this.setTime( 3 );\r\n        this.narrowPhaseTime = this.times[ 3 ] - this.times[ 2 ];\r\n\r\n    },\r\n\r\n    calcEnd: function () {\r\n\r\n        this.setTime( 2 );\r\n        this.solvingTime = this.times[ 2 ] - this.times[ 1 ];\r\n        this.totalTime = this.times[ 2 ] - this.times[ 0 ];\r\n        this.updateTime = this.totalTime - ( this.broadPhaseTime + this.narrowPhaseTime + this.solvingTime );\r\n\r\n        if( this.tt === 100 ) this.resetMax();\r\n\r\n        if( this.tt > 100 ){\r\n            if( this.broadPhaseTime > this.MaxBroadPhaseTime ) this.MaxBroadPhaseTime = this.broadPhaseTime;\r\n            if( this.narrowPhaseTime > this.MaxNarrowPhaseTime ) this.MaxNarrowPhaseTime = this.narrowPhaseTime;\r\n            if( this.solvingTime > this.MaxSolvingTime ) this.MaxSolvingTime = this.solvingTime;\r\n            if( this.totalTime > this.MaxTotalTime ) this.MaxTotalTime = this.totalTime;\r\n            if( this.updateTime > this.MaxUpdateTime ) this.MaxUpdateTime = this.updateTime;\r\n        }\r\n\r\n\r\n        this.upfps();\r\n\r\n        this.tt ++;\r\n        if(this.tt > 500) this.tt = 0;\r\n\r\n    },\r\n\r\n\r\n    upfps : function(){\r\n        this.f[1] = Date.now();\r\n        if (this.f[1]-1000>this.f[0]){ this.f[0] = this.f[1]; this.fps = this.f[2]; this.f[2] = 0; } this.f[2]++;\r\n    },\r\n\r\n    show: function(){\r\n        var info =[\r\n            \"Oimo.js \"+this.version+\"<br>\",\r\n            this.broadPhase + \"<br><br>\",\r\n            \"FPS: \" + this.fps +\" fps<br><br>\",\r\n            \"rigidbody \"+this.parent.numRigidBodies+\"<br>\",\r\n            \"contact &nbsp;&nbsp;\"+this.parent.numContacts+\"<br>\",\r\n            \"ct-point &nbsp;\"+this.parent.numContactPoints+\"<br>\",\r\n            \"paircheck \"+this.parent.broadPhase.numPairChecks+\"<br>\",\r\n            \"island &nbsp;&nbsp;&nbsp;\"+this.parent.numIslands +\"<br><br>\",\r\n            \"Time in milliseconds<br><br>\",\r\n            \"broadphase &nbsp;\"+ _Math.fix(this.broadPhaseTime) + \" | \" + _Math.fix(this.MaxBroadPhaseTime) +\"<br>\",\r\n            \"narrowphase \"+ _Math.fix(this.narrowPhaseTime)  + \" | \" + _Math.fix(this.MaxNarrowPhaseTime) + \"<br>\",\r\n            \"solving &nbsp;&nbsp;&nbsp;&nbsp;\"+ _Math.fix(this.solvingTime)+ \" | \" + _Math.fix(this.MaxSolvingTime) + \"<br>\",\r\n            \"total &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"+ _Math.fix(this.totalTime) + \" | \" + _Math.fix(this.MaxTotalTime) + \"<br>\",\r\n            \"updating &nbsp;&nbsp;&nbsp;\"+ _Math.fix(this.updateTime) + \" | \" + _Math.fix(this.MaxUpdateTime) + \"<br>\"\r\n        ].join(\"\\n\");\r\n        return info;\r\n    },\r\n\r\n    toArray: function(){\r\n        this.infos[0] = this.parent.broadPhase.types;\r\n        this.infos[1] = this.parent.numRigidBodies;\r\n        this.infos[2] = this.parent.numContacts;\r\n        this.infos[3] = this.parent.broadPhase.numPairChecks;\r\n        this.infos[4] = this.parent.numContactPoints;\r\n        this.infos[5] = this.parent.numIslands;\r\n        this.infos[6] = this.broadPhaseTime;\r\n        this.infos[7] = this.narrowPhaseTime;\r\n        this.infos[8] = this.solvingTime;\r\n        this.infos[9] = this.updateTime;\r\n        this.infos[10] = this.totalTime;\r\n        this.infos[11] = this.fps;\r\n        return this.infos;\r\n    }\r\n    \r\n});\n\nfunction Vec3 ( x, y, z ) {\n\n    this.x = x || 0;\n    this.y = y || 0;\n    this.z = z || 0;\n    \n}\n\nObject.assign( Vec3.prototype, {\n\n    Vec3: true,\n\n    set: function( x, y, z ){\n\n        this.x = x;\n        this.y = y;\n        this.z = z;\n        return this;\n\n    },\n\n    add: function ( a, b ) {\n\n        if ( b !== undefined ) return this.addVectors( a, b );\n\n        this.x += a.x;\n        this.y += a.y;\n        this.z += a.z;\n        return this;\n\n    },\n\n    addVectors: function ( a, b ) {\n\n        this.x = a.x + b.x;\n        this.y = a.y + b.y;\n        this.z = a.z + b.z;\n        return this;\n\n    },\n\n    addEqual: function ( v ) {\n\n        this.x += v.x;\n        this.y += v.y;\n        this.z += v.z;\n        return this;\n\n    },\n\n    sub: function ( a, b ) {\n\n        if ( b !== undefined ) return this.subVectors( a, b );\n\n        this.x -= a.x;\n        this.y -= a.y;\n        this.z -= a.z;\n        return this;\n\n    },\n\n    subVectors: function ( a, b ) {\n\n        this.x = a.x - b.x;\n        this.y = a.y - b.y;\n        this.z = a.z - b.z;\n        return this;\n\n    },\n\n    subEqual: function ( v ) {\n\n        this.x -= v.x;\n        this.y -= v.y;\n        this.z -= v.z;\n        return this;\n\n    },\n\n    scale: function ( v, s ) {\n\n        this.x = v.x * s;\n        this.y = v.y * s;\n        this.z = v.z * s;\n        return this;\n\n    },\n\n    scaleEqual: function( s ){\n\n        this.x *= s;\n        this.y *= s;\n        this.z *= s;\n        return this;\n\n    },\n\n    multiply: function( v ){\n\n        this.x *= v.x;\n        this.y *= v.y;\n        this.z *= v.z;\n        return this;\n\n    },\n\n    multiplyScalar: function( s ){\n\n        this.x *= s;\n        this.y *= s;\n        this.z *= s;\n        return this;\n\n    },\n\n    /*scaleV: function( v ){\n\n        this.x *= v.x;\n        this.y *= v.y;\n        this.z *= v.z;\n        return this;\n\n    },\n\n    scaleVectorEqual: function( v ){\n\n        this.x *= v.x;\n        this.y *= v.y;\n        this.z *= v.z;\n        return this;\n\n    },*/\n\n    addScaledVector: function ( v, s ) {\n\n        this.x += v.x * s;\n        this.y += v.y * s;\n        this.z += v.z * s;\n\n        return this;\n\n    },\n\n    subScaledVector: function ( v, s ) {\n\n        this.x -= v.x * s;\n        this.y -= v.y * s;\n        this.z -= v.z * s;\n\n        return this;\n\n    },\n\n    /*addTime: function ( v, t ) {\n\n        this.x += v.x * t;\n        this.y += v.y * t;\n        this.z += v.z * t;\n        return this;\n\n    },\n    \n    addScale: function ( v, s ) {\n\n        this.x += v.x * s;\n        this.y += v.y * s;\n        this.z += v.z * s;\n        return this;\n\n    },\n\n    subScale: function ( v, s ) {\n\n        this.x -= v.x * s;\n        this.y -= v.y * s;\n        this.z -= v.z * s;\n        return this;\n\n    },*/\n   \n    cross: function( a, b ) {\n\n        if ( b !== undefined ) return this.crossVectors( a, b );\n\n        var x = this.x, y = this.y, z = this.z;\n\n        this.x = y * a.z - z * a.y;\n        this.y = z * a.x - x * a.z;\n        this.z = x * a.y - y * a.x;\n\n        return this;\n\n    },\n\n    crossVectors: function ( a, b ) {\n\n        var ax = a.x, ay = a.y, az = a.z;\n        var bx = b.x, by = b.y, bz = b.z;\n\n        this.x = ay * bz - az * by;\n        this.y = az * bx - ax * bz;\n        this.z = ax * by - ay * bx;\n\n        return this;\n\n    },\n\n    tangent: function ( a ) {\n\n        var ax = a.x, ay = a.y, az = a.z;\n\n        this.x = ay * ax - az * az;\n        this.y = - az * ay - ax * ax;\n        this.z = ax * az + ay * ay;\n\n        return this;\n\n    },\n\n    \n\n    \n\n    invert: function ( v ) {\n\n        this.x=-v.x;\n        this.y=-v.y;\n        this.z=-v.z;\n        return this;\n\n    },\n\n    negate: function () {\n\n        this.x = - this.x;\n        this.y = - this.y;\n        this.z = - this.z;\n\n        return this;\n\n    },\n\n    dot: function ( v ) {\n\n        return this.x * v.x + this.y * v.y + this.z * v.z;\n\n    },\n\n    addition: function () {\n\n        return this.x + this.y + this.z;\n\n    },\n\n    lengthSq: function () {\n\n        return this.x * this.x + this.y * this.y + this.z * this.z;\n\n    },\n\n    length: function () {\n\n        return _Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n    },\n\n    copy: function( v ){\n\n        this.x = v.x;\n        this.y = v.y;\n        this.z = v.z;\n        return this;\n\n    },\n\n    /*mul: function( b, a, m ){\n\n        return this.mulMat( m, a ).add( b );\n\n    },\n\n    mulMat: function( m, a ){\n\n        var e = m.elements;\n        var x = a.x, y = a.y, z = a.z;\n\n        this.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z;\n        this.y = e[ 3 ] * x + e[ 4 ] * y + e[ 5 ] * z;\n        this.z = e[ 6 ] * x + e[ 7 ] * y + e[ 8 ] * z;\n        return this;\n\n    },*/\n\n    applyMatrix3: function ( m, transpose ) {\n\n        //if( transpose ) m = m.clone().transpose();\n        var x = this.x, y = this.y, z = this.z;\n        var e = m.elements;\n\n        if( transpose ){\n            \n            this.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z;\n            this.y = e[ 3 ] * x + e[ 4 ] * y + e[ 5 ] * z;\n            this.z = e[ 6 ] * x + e[ 7 ] * y + e[ 8 ] * z;\n\n        } else {\n      \n            this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n            this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n            this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n        }\n\n        return this;\n\n    },\n\n    applyQuaternion: function ( q ) {\n\n        var x = this.x;\n        var y = this.y;\n        var z = this.z;\n\n        var qx = q.x;\n        var qy = q.y;\n        var qz = q.z;\n        var qw = q.w;\n\n        // calculate quat * vector\n\n        var ix =  qw * x + qy * z - qz * y;\n        var iy =  qw * y + qz * x - qx * z;\n        var iz =  qw * z + qx * y - qy * x;\n        var iw = - qx * x - qy * y - qz * z;\n\n        // calculate result * inverse quat\n\n        this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n        this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n        this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n        return this;\n\n    },\n\n    testZero: function () {\n\n        if(this.x!==0 || this.y!==0 || this.z!==0) return true;\n        else return false;\n\n    },\n\n    testDiff: function( v ){\n\n        return this.equals( v ) ? false : true;\n\n    },\n\n    equals: function ( v ) {\n\n        return v.x === this.x && v.y === this.y && v.z === this.z;\n\n    },\n\n    clone: function () {\n\n        return new this.constructor( this.x, this.y, this.z );\n\n    },\n\n    toString: function(){\n\n        return\"Vec3[\"+this.x.toFixed(4)+\", \"+this.y.toFixed(4)+\", \"+this.z.toFixed(4)+\"]\";\n        \n    },\n\n    multiplyScalar: function ( scalar ) {\n\n        if ( isFinite( scalar ) ) {\n            this.x *= scalar;\n            this.y *= scalar;\n            this.z *= scalar;\n        } else {\n            this.x = 0;\n            this.y = 0;\n            this.z = 0;\n        }\n\n        return this;\n\n    },\n\n    divideScalar: function ( scalar ) {\n\n        return this.multiplyScalar( 1 / scalar );\n\n    },\n\n    normalize: function () {\n\n        return this.divideScalar( this.length() );\n\n    },\n\n    toArray: function ( array, offset ) {\n\n        if ( offset === undefined ) offset = 0;\n\n        array[ offset ] = this.x;\n        array[ offset + 1 ] = this.y;\n        array[ offset + 2 ] = this.z;\n\n    },\n\n    fromArray: function( array, offset ){\n\n        if ( offset === undefined ) offset = 0;\n        \n        this.x = array[ offset ];\n        this.y = array[ offset + 1 ];\n        this.z = array[ offset + 2 ];\n        return this;\n\n    },\n\n\n} );\n\nfunction Quat ( x, y, z, w ){\n\n    this.x = x || 0;\n    this.y = y || 0;\n    this.z = z || 0;\n    this.w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quat.prototype, {\n\n    Quat: true,\n\n    set: function ( x, y, z, w ) {\n\n        \n        this.x = x;\n        this.y = y;\n        this.z = z;\n        this.w = w;\n\n        return this;\n\n    },\n\n    addTime: function( v, t ){\n\n        var ax = v.x, ay = v.y, az = v.z;\n        var qw = this.w, qx = this.x, qy = this.y, qz = this.z;\n        t *= 0.5;    \n        this.x += t * (  ax*qw + ay*qz - az*qy );\n        this.y += t * (  ay*qw + az*qx - ax*qz );\n        this.z += t * (  az*qw + ax*qy - ay*qx );\n        this.w += t * ( -ax*qx - ay*qy - az*qz );\n        this.normalize();\n        return this;\n\n    },\n\n    /*mul: function( q1, q2 ){\n\n        var ax = q1.x, ay = q1.y, az = q1.z, as = q1.w,\n        bx = q2.x, by = q2.y, bz = q2.z, bs = q2.w;\n        this.x = ax * bs + as * bx + ay * bz - az * by;\n        this.y = ay * bs + as * by + az * bx - ax * bz;\n        this.z = az * bs + as * bz + ax * by - ay * bx;\n        this.w = as * bs - ax * bx - ay * by - az * bz;\n        return this;\n\n    },*/\n\n    multiply: function ( q, p ) {\n\n        if ( p !== undefined ) return this.multiplyQuaternions( q, p );\n        return this.multiplyQuaternions( this, q );\n\n    },\n\n    multiplyQuaternions: function ( a, b ) {\n\n        var qax = a.x, qay = a.y, qaz = a.z, qaw = a.w;\n        var qbx = b.x, qby = b.y, qbz = b.z, qbw = b.w;\n\n        this.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n        this.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n        this.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n        this.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n        return this;\n\n    },\n\n    setFromUnitVectors: function( v1, v2 ) {\n\n        var vx = new Vec3();\n        var r = v1.dot( v2 ) + 1;\n\n        if ( r < _Math.EPS2 ) {\n\n            r = 0;\n            if ( _Math.abs( v1.x ) > _Math.abs( v1.z ) ) vx.set( - v1.y, v1.x, 0 );\n            else vx.set( 0, - v1.z, v1.y );\n\n        } else {\n\n            vx.crossVectors( v1, v2 );\n\n        }\n\n        this._x = vx.x;\n        this._y = vx.y;\n        this._z = vx.z;\n        this._w = r;\n\n        return this.normalize();\n\n    },\n\n    arc: function( v1, v2 ){\n\n        var x1 = v1.x;\n        var y1 = v1.y;\n        var z1 = v1.z;\n        var x2 = v2.x;\n        var y2 = v2.y;\n        var z2 = v2.z;\n        var d = x1*x2 + y1*y2 + z1*z2;\n        if( d==-1 ){\n            x2 = y1*x1 - z1*z1;\n            y2 = -z1*y1 - x1*x1;\n            z2 = x1*z1 + y1*y1;\n            d = 1 / _Math.sqrt( x2*x2 + y2*y2 + z2*z2 );\n            this.w = 0;\n            this.x = x2*d;\n            this.y = y2*d;\n            this.z = z2*d;\n            return this;\n        }\n        var cx = y1*z2 - z1*y2;\n        var cy = z1*x2 - x1*z2;\n        var cz = x1*y2 - y1*x2;\n        this.w = _Math.sqrt( ( 1 + d) * 0.5 );\n        d = 0.5 / this.w;\n        this.x = cx * d;\n        this.y = cy * d;\n        this.z = cz * d;\n        return this;\n\n    },\n\n    normalize: function(){\n\n        var l = this.length();\n        if ( l === 0 ) {\n            this.set( 0, 0, 0, 1 );\n        } else {\n            l = 1 / l;\n            this.x = this.x * l;\n            this.y = this.y * l;\n            this.z = this.z * l;\n            this.w = this.w * l;\n        }\n        return this;\n\n    },\n\n    inverse: function () {\n\n        return this.conjugate().normalize();\n\n    },\n\n    invert: function ( q ) {\n\n        this.x = q.x;\n        this.y = q.y;\n        this.z = q.z;\n        this.w = q.w;\n        this.conjugate().normalize();\n        return this;\n\n    },\n\n    conjugate: function () {\n\n        this.x *= - 1;\n        this.y *= - 1;\n        this.z *= - 1;\n        return this;\n\n    },\n\n    length: function(){\n\n        return _Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w  );\n\n    },\n\n    lengthSq: function () {\n\n        return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n    },\n    \n    copy: function( q ){\n        \n        this.x = q.x;\n        this.y = q.y;\n        this.z = q.z;\n        this.w = q.w;\n        return this;\n\n    },\n\n    clone: function( q ){\n\n        return new Quat( this.x, this.y, this.z, this.w );\n\n    },\n\n    testDiff: function ( q ) {\n\n        return this.equals( q ) ? false : true;\n\n    },\n\n    equals: function ( q ) {\n\n        return this.x === q.x && this.y === q.y && this.z === q.z && this.w === q.w;\n\n    },\n\n    toString: function(){\n\n        return\"Quat[\"+this.x.toFixed(4)+\", (\"+this.y.toFixed(4)+\", \"+this.z.toFixed(4)+\", \"+this.w.toFixed(4)+\")]\";\n        \n    },\n\n    setFromEuler: function ( x, y, z ){\n\n        var c1 = Math.cos( x * 0.5 );\n        var c2 = Math.cos( y * 0.5 );\n        var c3 = Math.cos( z * 0.5 );\n        var s1 = Math.sin( x * 0.5 );\n        var s2 = Math.sin( y * 0.5 );\n        var s3 = Math.sin( z * 0.5 );\n\n        // XYZ\n        this.x = s1 * c2 * c3 + c1 * s2 * s3;\n        this.y = c1 * s2 * c3 - s1 * c2 * s3;\n        this.z = c1 * c2 * s3 + s1 * s2 * c3;\n        this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n        return this;\n\n    },\n    \n    setFromAxis: function ( axis, rad ) {\n\n        axis.normalize();\n        rad = rad * 0.5;\n        var s = _Math.sin( rad );\n        this.x = s * axis.x;\n        this.y = s * axis.y;\n        this.z = s * axis.z;\n        this.w = _Math.cos( rad );\n        return this;\n\n    },\n\n    setFromMat33: function ( m ) {\n\n        var trace = m[0] + m[4] + m[8];\n        var s;\n\n        if ( trace > 0 ) {\n\n            s = _Math.sqrt( trace + 1.0 );\n            this.w = 0.5 / s;\n            s = 0.5 / s;\n            this.x = ( m[5] - m[7] ) * s;\n            this.y = ( m[6] - m[2] ) * s;\n            this.z = ( m[1] - m[3] ) * s;\n\n        } else {\n\n            var out = [];\n            var i = 0;\n            if ( m[4] > m[0] ) i = 1;\n            if ( m[8] > m[i*3+i] ) i = 2;\n\n            var j = (i+1)%3;\n            var k = (i+2)%3;\n            \n            s = _Math.sqrt( m[i*3+i] - m[j*3+j] - m[k*3+k] + 1.0 );\n            out[i] = 0.5 * fRoot;\n            s = 0.5 / fRoot;\n            this.w = ( m[j*3+k] - m[k*3+j] ) * s;\n            out[j] = ( m[j*3+i] + m[i*3+j] ) * s;\n            out[k] = ( m[k*3+i] + m[i*3+k] ) * s;\n\n            this.x = out[1];\n            this.y = out[2];\n            this.z = out[3];\n\n        }\n\n        return this;\n\n    },\n\n    toArray: function ( array, offset ) {\n\n        offset = offset || 0;\n\n        array[ offset ] = this.x;\n        array[ offset + 1 ] = this.y;\n        array[ offset + 2 ] = this.z;\n        array[ offset + 3 ] = this.w;\n\n    },\n\n    fromArray: function( array, offset ){\n\n        offset = offset || 0;\n        this.set( array[ offset ], array[ offset + 1 ], array[ offset + 2 ], array[ offset + 3 ] );\n        return this;\n\n    }\n\n});\n\nfunction Mat33 ( e00, e01, e02, e10, e11, e12, e20, e21, e22 ){\r\n\r\n    this.elements = [\r\n        1, 0, 0,\r\n        0, 1, 0,\r\n        0, 0, 1\r\n    ];\r\n\r\n    if ( arguments.length > 0 ) {\r\n\r\n        console.error( 'OIMO.Mat33: the constructor no longer reads arguments. use .set() instead.' );\r\n\r\n    }\r\n\r\n}\r\n\r\nObject.assign( Mat33.prototype, {\r\n\r\n    Mat33: true,\r\n\r\n    set: function ( e00, e01, e02, e10, e11, e12, e20, e21, e22 ){\r\n\r\n        var te = this.elements;\r\n        te[0] = e00; te[1] = e01; te[2] = e02;\r\n        te[3] = e10; te[4] = e11; te[5] = e12;\r\n        te[6] = e20; te[7] = e21; te[8] = e22;\r\n        return this;\r\n\r\n    },\r\n    \r\n    add: function ( a, b ) {\r\n\r\n        if( b !== undefined ) return this.addMatrixs( a, b );\r\n\r\n        var e = this.elements, te = a.elements;\r\n        e[0] += te[0]; e[1] += te[1]; e[2] += te[2];\r\n        e[3] += te[3]; e[4] += te[4]; e[5] += te[5];\r\n        e[6] += te[6]; e[7] += te[7]; e[8] += te[8];\r\n        return this;\r\n\r\n    },\r\n\r\n    addMatrixs: function ( a, b ) {\r\n\r\n        var te = this.elements, tem1 = a.elements, tem2 = b.elements;\r\n        te[0] = tem1[0] + tem2[0]; te[1] = tem1[1] + tem2[1]; te[2] = tem1[2] + tem2[2];\r\n        te[3] = tem1[3] + tem2[3]; te[4] = tem1[4] + tem2[4]; te[5] = tem1[5] + tem2[5];\r\n        te[6] = tem1[6] + tem2[6]; te[7] = tem1[7] + tem2[7]; te[8] = tem1[8] + tem2[8];\r\n        return this;\r\n\r\n    },\r\n\r\n    addEqual: function( m ){\r\n\r\n        var te = this.elements, tem = m.elements;\r\n        te[0] += tem[0]; te[1] += tem[1]; te[2] += tem[2];\r\n        te[3] += tem[3]; te[4] += tem[4]; te[5] += tem[5];\r\n        te[6] += tem[6]; te[7] += tem[7]; te[8] += tem[8];\r\n        return this;\r\n\r\n    },\r\n\r\n    sub: function ( a, b ) {\r\n\r\n        if( b !== undefined ) return this.subMatrixs( a, b );\r\n\r\n        var e = this.elements, te = a.elements;\r\n        e[0] -= te[0]; e[1] -= te[1]; e[2] -= te[2];\r\n        e[3] -= te[3]; e[4] -= te[4]; e[5] -= te[5];\r\n        e[6] -= te[6]; e[7] -= te[7]; e[8] -= te[8];\r\n        return this;\r\n\r\n    },\r\n\r\n    subMatrixs: function ( a, b ) {\r\n\r\n        var te = this.elements, tem1 = a.elements, tem2 = b.elements;\r\n        te[0] = tem1[0] - tem2[0]; te[1] = tem1[1] - tem2[1]; te[2] = tem1[2] - tem2[2];\r\n        te[3] = tem1[3] - tem2[3]; te[4] = tem1[4] - tem2[4]; te[5] = tem1[5] - tem2[5];\r\n        te[6] = tem1[6] - tem2[6]; te[7] = tem1[7] - tem2[7]; te[8] = tem1[8] - tem2[8];\r\n        return this;\r\n\r\n    },\r\n\r\n    subEqual: function ( m ) {\r\n\r\n        var te = this.elements, tem = m.elements;\r\n        te[0] -= tem[0]; te[1] -= tem[1]; te[2] -= tem[2];\r\n        te[3] -= tem[3]; te[4] -= tem[4]; te[5] -= tem[5];\r\n        te[6] -= tem[6]; te[7] -= tem[7]; te[8] -= tem[8];\r\n        return this;\r\n\r\n    },\r\n\r\n    scale: function ( m, s ) {\r\n\r\n        var te = this.elements, tm = m.elements;\r\n        te[0] = tm[0] * s; te[1] = tm[1] * s; te[2] = tm[2] * s;\r\n        te[3] = tm[3] * s; te[4] = tm[4] * s; te[5] = tm[5] * s;\r\n        te[6] = tm[6] * s; te[7] = tm[7] * s; te[8] = tm[8] * s;\r\n        return this;\r\n\r\n    },\r\n\r\n    scaleEqual: function ( s ){// multiplyScalar\r\n\r\n        var te = this.elements;\r\n        te[0] *= s; te[1] *= s; te[2] *= s;\r\n        te[3] *= s; te[4] *= s; te[5] *= s;\r\n        te[6] *= s; te[7] *= s; te[8] *= s;\r\n        return this;\r\n\r\n    },\r\n\r\n    multiplyMatrices: function ( m1, m2, transpose ) {\r\n\r\n        if( transpose ) m2 = m2.clone().transpose();\r\n\r\n        var te = this.elements;\r\n        var tm1 = m1.elements;\r\n        var tm2 = m2.elements;\r\n\r\n        var a0 = tm1[0], a3 = tm1[3], a6 = tm1[6];\r\n        var a1 = tm1[1], a4 = tm1[4], a7 = tm1[7];\r\n        var a2 = tm1[2], a5 = tm1[5], a8 = tm1[8];\r\n\r\n        var b0 = tm2[0], b3 = tm2[3], b6 = tm2[6];\r\n        var b1 = tm2[1], b4 = tm2[4], b7 = tm2[7];\r\n        var b2 = tm2[2], b5 = tm2[5], b8 = tm2[8];\r\n\r\n        te[0] = a0*b0 + a1*b3 + a2*b6;\r\n        te[1] = a0*b1 + a1*b4 + a2*b7;\r\n        te[2] = a0*b2 + a1*b5 + a2*b8;\r\n        te[3] = a3*b0 + a4*b3 + a5*b6;\r\n        te[4] = a3*b1 + a4*b4 + a5*b7;\r\n        te[5] = a3*b2 + a4*b5 + a5*b8;\r\n        te[6] = a6*b0 + a7*b3 + a8*b6;\r\n        te[7] = a6*b1 + a7*b4 + a8*b7;\r\n        te[8] = a6*b2 + a7*b5 + a8*b8;\r\n\r\n        return this;\r\n\r\n    },\r\n\r\n    /*mul: function ( m1, m2, transpose ) {\r\n\r\n        if( transpose ) m2 = m2.clone().transpose();\r\n\r\n        var te = this.elements;\r\n        var tm1 = m1.elements;\r\n        var tm2 = m2.elements;\r\n        //var tmp;\r\n\r\n        var a0 = tm1[0], a3 = tm1[3], a6 = tm1[6];\r\n        var a1 = tm1[1], a4 = tm1[4], a7 = tm1[7];\r\n        var a2 = tm1[2], a5 = tm1[5], a8 = tm1[8];\r\n\r\n        var b0 = tm2[0], b3 = tm2[3], b6 = tm2[6];\r\n        var b1 = tm2[1], b4 = tm2[4], b7 = tm2[7];\r\n        var b2 = tm2[2], b5 = tm2[5], b8 = tm2[8];\r\n\r\n        /*if( transpose ){\r\n\r\n            tmp = b1; b1 = b3; b3 = tmp;\r\n            tmp = b2; b2 = b6; b6 = tmp;\r\n            tmp = b5; b5 = b7; b7 = tmp;\r\n\r\n        }\r\n\r\n        te[0] = a0*b0 + a1*b3 + a2*b6;\r\n        te[1] = a0*b1 + a1*b4 + a2*b7;\r\n        te[2] = a0*b2 + a1*b5 + a2*b8;\r\n        te[3] = a3*b0 + a4*b3 + a5*b6;\r\n        te[4] = a3*b1 + a4*b4 + a5*b7;\r\n        te[5] = a3*b2 + a4*b5 + a5*b8;\r\n        te[6] = a6*b0 + a7*b3 + a8*b6;\r\n        te[7] = a6*b1 + a7*b4 + a8*b7;\r\n        te[8] = a6*b2 + a7*b5 + a8*b8;\r\n\r\n        return this;\r\n\r\n    },*/\r\n\r\n    transpose: function ( m ) {\r\n        \r\n        if( m !== undefined ){\r\n            var a = m.elements;\r\n            this.set( a[0], a[3], a[6], a[1], a[4], a[7], a[2], a[5], a[8] );\r\n            return this;\r\n        }\r\n\r\n        var te = this.elements;\r\n        var a01 = te[1], a02 = te[2], a12 = te[5];\r\n        te[1] = te[3];\r\n        te[2] = te[6];\r\n        te[3] = a01;\r\n        te[5] = te[7];\r\n        te[6] = a02;\r\n        te[7] = a12;\r\n        return this;\r\n\r\n    },\r\n\r\n\r\n\r\n    /*mulScale: function ( m, sx, sy, sz, Prepend ) {\r\n\r\n        var prepend = Prepend || false;\r\n        var te = this.elements, tm = m.elements;\r\n        if(prepend){\r\n            te[0] = sx*tm[0]; te[1] = sx*tm[1]; te[2] = sx*tm[2];\r\n            te[3] = sy*tm[3]; te[4] = sy*tm[4]; te[5] = sy*tm[5];\r\n            te[6] = sz*tm[6]; te[7] = sz*tm[7]; te[8] = sz*tm[8];\r\n        }else{\r\n            te[0] = tm[0]*sx; te[1] = tm[1]*sy; te[2] = tm[2]*sz;\r\n            te[3] = tm[3]*sx; te[4] = tm[4]*sy; te[5] = tm[5]*sz;\r\n            te[6] = tm[6]*sx; te[7] = tm[7]*sy; te[8] = tm[8]*sz;\r\n        }\r\n        return this;\r\n\r\n    },\r\n\r\n    transpose: function ( m ) {\r\n\r\n        var te = this.elements, tm = m.elements;\r\n        te[0] = tm[0]; te[1] = tm[3]; te[2] = tm[6];\r\n        te[3] = tm[1]; te[4] = tm[4]; te[5] = tm[7];\r\n        te[6] = tm[2]; te[7] = tm[5]; te[8] = tm[8];\r\n        return this;\r\n\r\n    },*/\r\n\r\n    setQuat: function ( q ) {\r\n\r\n        var te = this.elements;\r\n        var x = q.x, y = q.y, z = q.z, w = q.w;\r\n        var x2 = x + x,  y2 = y + y, z2 = z + z;\r\n        var xx = x * x2, xy = x * y2, xz = x * z2;\r\n        var yy = y * y2, yz = y * z2, zz = z * z2;\r\n        var wx = w * x2, wy = w * y2, wz = w * z2;\r\n        \r\n        te[0] = 1 - ( yy + zz );\r\n        te[1] = xy - wz;\r\n        te[2] = xz + wy;\r\n\r\n        te[3] = xy + wz;\r\n        te[4] = 1 - ( xx + zz );\r\n        te[5] = yz - wx;\r\n\r\n        te[6] = xz - wy;\r\n        te[7] = yz + wx;\r\n        te[8] = 1 - ( xx + yy );\r\n\r\n        return this;\r\n\r\n    },\r\n\r\n    invert: function( m ) {\r\n\r\n        var te = this.elements, tm = m.elements,\r\n        a00 = tm[0], a10 = tm[3], a20 = tm[6],\r\n        a01 = tm[1], a11 = tm[4], a21 = tm[7],\r\n        a02 = tm[2], a12 = tm[5], a22 = tm[8],\r\n        b01 = a22 * a11 - a12 * a21,\r\n        b11 = -a22 * a10 + a12 * a20,\r\n        b21 = a21 * a10 - a11 * a20,\r\n        det = a00 * b01 + a01 * b11 + a02 * b21;\r\n\r\n        if ( det === 0 ) {\r\n            console.log( \"can't invert matrix, determinant is 0\");\r\n            return this.identity();\r\n        }\r\n\r\n        det = 1.0 / det;\r\n        te[0] = b01 * det;\r\n        te[1] = (-a22 * a01 + a02 * a21) * det;\r\n        te[2] = (a12 * a01 - a02 * a11) * det;\r\n        te[3] = b11 * det;\r\n        te[4] = (a22 * a00 - a02 * a20) * det;\r\n        te[5] = (-a12 * a00 + a02 * a10) * det;\r\n        te[6] = b21 * det;\r\n        te[7] = (-a21 * a00 + a01 * a20) * det;\r\n        te[8] = (a11 * a00 - a01 * a10) * det;\r\n        return this;\r\n\r\n    },\r\n\r\n    addOffset: function ( m, v ) {\r\n\r\n        var relX = v.x;\r\n        var relY = v.y;\r\n        var relZ = v.z;\r\n\r\n        var te = this.elements;\r\n        te[0] += m * ( relY * relY + relZ * relZ );\r\n        te[4] += m * ( relX * relX + relZ * relZ );\r\n        te[8] += m * ( relX * relX + relY * relY );\r\n        var xy = m * relX * relY;\r\n        var yz = m * relY * relZ;\r\n        var zx = m * relZ * relX;\r\n        te[1] -= xy;\r\n        te[3] -= xy;\r\n        te[2] -= yz;\r\n        te[6] -= yz;\r\n        te[5] -= zx;\r\n        te[7] -= zx;\r\n        return this;\r\n\r\n    },\r\n\r\n    subOffset: function ( m, v ) {\r\n\r\n        var relX = v.x;\r\n        var relY = v.y;\r\n        var relZ = v.z;\r\n\r\n        var te = this.elements;\r\n        te[0] -= m * ( relY * relY + relZ * relZ );\r\n        te[4] -= m * ( relX * relX + relZ * relZ );\r\n        te[8] -= m * ( relX * relX + relY * relY );\r\n        var xy = m * relX * relY;\r\n        var yz = m * relY * relZ;\r\n        var zx = m * relZ * relX;\r\n        te[1] += xy;\r\n        te[3] += xy;\r\n        te[2] += yz;\r\n        te[6] += yz;\r\n        te[5] += zx;\r\n        te[7] += zx;\r\n        return this;\r\n\r\n    },\r\n\r\n    // OK \r\n\r\n    multiplyScalar: function ( s ) {\r\n\r\n        var te = this.elements;\r\n\r\n        te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\r\n        te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\r\n        te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\r\n\r\n        return this;\r\n\r\n    },\r\n\r\n    identity: function () {\r\n\r\n        this.set( 1, 0, 0, 0, 1, 0, 0, 0, 1 );\r\n        return this;\r\n\r\n    },\r\n\r\n\r\n    clone: function () {\r\n\r\n        return new Mat33().fromArray( this.elements );\r\n\r\n    },\r\n\r\n    copy: function ( m ) {\r\n\r\n        for ( var i = 0; i < 9; i ++ ) this.elements[ i ] = m.elements[ i ];\r\n        return this;\r\n\r\n    },\r\n\r\n    determinant: function () {\r\n\r\n        var te = this.elements;\r\n        var a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\r\n            d = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\r\n            g = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\r\n\r\n        return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\r\n\r\n    },\r\n\r\n    fromArray: function ( array, offset ) {\r\n\r\n        if ( offset === undefined ) offset = 0;\r\n\r\n        for( var i = 0; i < 9; i ++ ) {\r\n\r\n            this.elements[ i ] = array[ i + offset ];\r\n\r\n        }\r\n\r\n        return this;\r\n\r\n    },\r\n\r\n    toArray: function ( array, offset ) {\r\n\r\n        if ( array === undefined ) array = [];\r\n        if ( offset === undefined ) offset = 0;\r\n\r\n        var te = this.elements;\r\n\r\n        array[ offset ] = te[ 0 ];\r\n        array[ offset + 1 ] = te[ 1 ];\r\n        array[ offset + 2 ] = te[ 2 ];\r\n\r\n        array[ offset + 3 ] = te[ 3 ];\r\n        array[ offset + 4 ] = te[ 4 ];\r\n        array[ offset + 5 ] = te[ 5 ];\r\n\r\n        array[ offset + 6 ] = te[ 6 ];\r\n        array[ offset + 7 ] = te[ 7 ];\r\n        array[ offset + 8 ] = te[ 8 ];\r\n\r\n        return array;\r\n\r\n    }\r\n\r\n\r\n} );\n\n/**\r\n * An axis-aligned bounding box.\r\n *\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction AABB( minX, maxX, minY, maxY, minZ, maxZ ){\r\n\r\n    this.elements = new Float32Array( 6 );\r\n    var te = this.elements;\r\n\r\n    te[0] = minX || 0; te[1] = minY || 0; te[2] = minZ || 0;\r\n    te[3] = maxX || 0; te[4] = maxY || 0; te[5] = maxZ || 0;\r\n\r\n}\r\n\r\nObject.assign( AABB.prototype, {\r\n\r\n\tAABB: true,\r\n\r\n\tset: function(minX, maxX, minY, maxY, minZ, maxZ){\r\n\r\n\t\tvar te = this.elements;\r\n\t\tte[0] = minX;\r\n\t\tte[3] = maxX;\r\n\t\tte[1] = minY;\r\n\t\tte[4] = maxY;\r\n\t\tte[2] = minZ;\r\n\t\tte[5] = maxZ;\r\n\t\treturn this;\r\n\t},\r\n\r\n\tintersectTest: function ( aabb ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar ue = aabb.elements;\r\n\t\treturn te[0] > ue[3] || te[1] > ue[4] || te[2] > ue[5] || te[3] < ue[0] || te[4] < ue[1] || te[5] < ue[2] ? true : false;\r\n\r\n\t},\r\n\r\n\tintersectTestTwo: function ( aabb ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar ue = aabb.elements;\r\n\t\treturn te[0] < ue[0] || te[1] < ue[1] || te[2] < ue[2] || te[3] > ue[3] || te[4] > ue[4] || te[5] > ue[5] ? true : false;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().fromArray( this.elements );\r\n\r\n\t},\r\n\r\n\tcopy: function ( aabb, margin ) {\r\n\r\n\t\tvar m = margin || 0;\r\n\t\tvar me = aabb.elements;\r\n\t\tthis.set( me[ 0 ]-m, me[ 3 ]+m, me[ 1 ]-m, me[ 4 ]+m, me[ 2 ]-m, me[ 5 ]+m );\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis.elements.set( array );\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// Set this AABB to the combined AABB of aabb1 and aabb2.\r\n\r\n\tcombine: function( aabb1, aabb2 ) {\r\n\r\n\t\tvar a = aabb1.elements;\r\n\t\tvar b = aabb2.elements;\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[0] = a[0] < b[0] ? a[0] : b[0];\r\n\t\tte[1] = a[1] < b[1] ? a[1] : b[1];\r\n\t\tte[2] = a[2] < b[2] ? a[2] : b[2];\r\n\r\n\t\tte[3] = a[3] > b[3] ? a[3] : b[3];\r\n\t\tte[4] = a[4] > b[4] ? a[4] : b[4];\r\n\t\tte[5] = a[5] > b[5] ? a[5] : b[5];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\r\n\t// Get the surface area.\r\n\r\n\tsurfaceArea: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar a = te[3] - te[0];\r\n\t\tvar h = te[4] - te[1];\r\n\t\tvar d = te[5] - te[2];\r\n\t\treturn 2 * (a * (h + d) + h * d );\r\n\r\n\t},\r\n\r\n\r\n\t// Get whether the AABB intersects with the point or not.\r\n\r\n\tintersectsWithPoint:function(x,y,z){\r\n\r\n\t\tvar te = this.elements;\r\n\t\treturn x>=te[0] && x<=te[3] && y>=te[1] && y<=te[4] && z>=te[2] && z<=te[5];\r\n\r\n\t},\r\n\r\n\t/**\r\n\t * Set the AABB from an array\r\n\t * of vertices. From THREE.\r\n\t * @author WestLangley\r\n\t * @author xprogram\r\n\t */\r\n\r\n\tsetFromPoints: function(arr){\r\n\t\tthis.makeEmpty();\r\n\t\tfor(var i = 0; i < arr.length; i++){\r\n\t\t\tthis.expandByPoint(arr[i]);\r\n\t\t}\r\n\t},\r\n\r\n\tmakeEmpty: function(){\r\n\t\tthis.set(-Infinity, -Infinity, -Infinity, Infinity, Infinity, Infinity);\r\n\t},\r\n\r\n\texpandByPoint: function(pt){\r\n\t\tvar te = this.elements;\r\n\t\tthis.set(\r\n\t\t\t_Math.min(te[ 0 ], pt.x), _Math.min(te[ 1 ], pt.y), _Math.min(te[ 2 ], pt.z),\r\n\t\t\t_Math.max(te[ 3 ], pt.x), _Math.max(te[ 4 ], pt.y), _Math.max(te[ 5 ], pt.z)\r\n\t\t);\r\n\t},\r\n\r\n\texpandByScalar: function(s){\r\n\r\n\t\tvar te = this.elements;\r\n\t\tte[0] += -s;\r\n\t\tte[1] += -s;\r\n\t\tte[2] += -s;\r\n\t\tte[3] += s;\r\n\t\tte[4] += s;\r\n\t\tte[5] += s;\r\n\t}\r\n\r\n});\n\nvar count = 0;\r\nfunction ShapeIdCount() { return count++; }\r\n\r\n/**\r\n * A shape is used to detect collisions of rigid bodies.\r\n *\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction Shape ( config ) {\r\n\r\n    this.type = SHAPE_NULL;\r\n\r\n    // global identification of the shape should be unique to the shape.\r\n    this.id = ShapeIdCount();\r\n\r\n    // previous shape in parent rigid body. Used for fast interations.\r\n    this.prev = null;\r\n\r\n    // next shape in parent rigid body. Used for fast interations.\r\n    this.next = null;\r\n\r\n    // proxy of the shape used for broad-phase collision detection.\r\n    this.proxy = null;\r\n\r\n    // parent rigid body of the shape.\r\n    this.parent = null;\r\n\r\n    // linked list of the contacts with the shape.\r\n    this.contactLink = null;\r\n\r\n    // number of the contacts with the shape.\r\n    this.numContacts = 0;\r\n\r\n    // center of gravity of the shape in world coordinate system.\r\n    this.position = new Vec3();\r\n\r\n    // rotation matrix of the shape in world coordinate system.\r\n    this.rotation = new Mat33();\r\n\r\n    // position of the shape in parent's coordinate system.\r\n    this.relativePosition = new Vec3().copy( config.relativePosition );\r\n\r\n    // rotation matrix of the shape in parent's coordinate system.\r\n    this.relativeRotation = new Mat33().copy( config.relativeRotation );\r\n\r\n    // axis-aligned bounding box of the shape.\r\n    this.aabb = new AABB();\r\n\r\n    // density of the shape.\r\n    this.density = config.density;\r\n\r\n    // coefficient of friction of the shape.\r\n    this.friction = config.friction;\r\n\r\n    // coefficient of restitution of the shape.\r\n    this.restitution = config.restitution;\r\n\r\n    // bits of the collision groups to which the shape belongs.\r\n    this.belongsTo = config.belongsTo;\r\n\r\n    // bits of the collision groups with which the shape collides.\r\n    this.collidesWith = config.collidesWith;\r\n\r\n}\r\n\r\nObject.assign( Shape.prototype, {\r\n\r\n    Shape: true,\r\n\r\n    // Calculate the mass information of the shape.\r\n\r\n    calculateMassInfo: function( out ){\r\n\r\n        printError(\"Shape\", \"Inheritance error.\");\r\n\r\n    },\r\n\r\n    // Update the proxy of the shape.\r\n\r\n    updateProxy: function(){\r\n\r\n        printError(\"Shape\", \"Inheritance error.\");\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * Box shape.\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n \r\nfunction Box ( config, Width, Height, Depth ) {\r\n\r\n    Shape.call( this, config );\r\n\r\n    this.type = SHAPE_BOX;\r\n\r\n    this.width = Width;\r\n    this.height = Height;\r\n    this.depth = Depth;\r\n\r\n    this.halfWidth = Width * 0.5;\r\n    this.halfHeight = Height * 0.5;\r\n    this.halfDepth = Depth * 0.5;\r\n\r\n    this.dimentions = new Float32Array( 18 );\r\n    this.elements = new Float32Array( 24 );\r\n\r\n}\r\n\r\nBox.prototype = Object.assign( Object.create( Shape.prototype ), {\r\n\r\n\tconstructor: Box,\r\n\r\n\tcalculateMassInfo: function ( out ) {\r\n\r\n\t\tvar mass = this.width * this.height * this.depth * this.density;\r\n\t\tvar divid = 1/12;\r\n\t\tout.mass = mass;\r\n\t\tout.inertia.set(\r\n\t\t\tmass * ( this.height * this.height + this.depth * this.depth ) * divid, 0, 0,\r\n\t\t\t0, mass * ( this.width * this.width + this.depth * this.depth ) * divid, 0,\r\n\t\t\t0, 0, mass * ( this.width * this.width + this.height * this.height ) * divid\r\n\t\t);\r\n\r\n\t},\r\n\r\n\tupdateProxy: function () {\r\n\r\n\t\tvar te = this.rotation.elements;\r\n\t\tvar di = this.dimentions;\r\n\t\t// Width\r\n\t\tdi[0] = te[0];\r\n\t\tdi[1] = te[3];\r\n\t\tdi[2] = te[6];\r\n\t\t// Height\r\n\t\tdi[3] = te[1];\r\n\t\tdi[4] = te[4];\r\n\t\tdi[5] = te[7];\r\n\t\t// Depth\r\n\t\tdi[6] = te[2];\r\n\t\tdi[7] = te[5];\r\n\t\tdi[8] = te[8];\r\n\t\t// half Width\r\n\t\tdi[9] = te[0] * this.halfWidth;\r\n\t\tdi[10] = te[3] * this.halfWidth;\r\n\t\tdi[11] = te[6] * this.halfWidth;\r\n\t\t// half Height\r\n\t\tdi[12] = te[1] * this.halfHeight;\r\n\t\tdi[13] = te[4] * this.halfHeight;\r\n\t\tdi[14] = te[7] * this.halfHeight;\r\n\t\t// half Depth\r\n\t\tdi[15] = te[2] * this.halfDepth;\r\n\t\tdi[16] = te[5] * this.halfDepth;\r\n\t\tdi[17] = te[8] * this.halfDepth;\r\n\r\n\t\tvar wx = di[9];\r\n\t\tvar wy = di[10];\r\n\t\tvar wz = di[11];\r\n\t\tvar hx = di[12];\r\n\t\tvar hy = di[13];\r\n\t\tvar hz = di[14];\r\n\t\tvar dx = di[15];\r\n\t\tvar dy = di[16];\r\n\t\tvar dz = di[17];\r\n\r\n\t\tvar x = this.position.x;\r\n\t\tvar y = this.position.y;\r\n\t\tvar z = this.position.z;\r\n\r\n\t\tvar v = this.elements;\r\n\t\t//v1\r\n\t\tv[0] = x + wx + hx + dx;\r\n\t\tv[1] = y + wy + hy + dy;\r\n\t\tv[2] = z + wz + hz + dz;\r\n\t\t//v2\r\n\t\tv[3] = x + wx + hx - dx;\r\n\t\tv[4] = y + wy + hy - dy;\r\n\t\tv[5] = z + wz + hz - dz;\r\n\t\t//v3\r\n\t\tv[6] = x + wx - hx + dx;\r\n\t\tv[7] = y + wy - hy + dy;\r\n\t\tv[8] = z + wz - hz + dz;\r\n\t\t//v4\r\n\t\tv[9] = x + wx - hx - dx;\r\n\t\tv[10] = y + wy - hy - dy;\r\n\t\tv[11] = z + wz - hz - dz;\r\n\t\t//v5\r\n\t\tv[12] = x - wx + hx + dx;\r\n\t\tv[13] = y - wy + hy + dy;\r\n\t\tv[14] = z - wz + hz + dz;\r\n\t\t//v6\r\n\t\tv[15] = x - wx + hx - dx;\r\n\t\tv[16] = y - wy + hy - dy;\r\n\t\tv[17] = z - wz + hz - dz;\r\n\t\t//v7\r\n\t\tv[18] = x - wx - hx + dx;\r\n\t\tv[19] = y - wy - hy + dy;\r\n\t\tv[20] = z - wz - hz + dz;\r\n\t\t//v8\r\n\t\tv[21] = x - wx - hx - dx;\r\n\t\tv[22] = y - wy - hy - dy;\r\n\t\tv[23] = z - wz - hz - dz;\r\n\r\n\t\tvar w = di[9] < 0 ? -di[9] : di[9];\r\n\t\tvar h = di[10] < 0 ? -di[10] : di[10];\r\n\t\tvar d = di[11] < 0 ? -di[11] : di[11];\r\n\r\n\t\tw = di[12] < 0 ? w - di[12] : w + di[12];\r\n\t\th = di[13] < 0 ? h - di[13] : h + di[13];\r\n\t\td = di[14] < 0 ? d - di[14] : d + di[14];\r\n\r\n\t\tw = di[15] < 0 ? w - di[15] : w + di[15];\r\n\t\th = di[16] < 0 ? h - di[16] : h + di[16];\r\n\t\td = di[17] < 0 ? d - di[17] : d + di[17];\r\n\r\n\t\tvar p = AABB_PROX;\r\n\r\n\t\tthis.aabb.set(\r\n\t\t\tthis.position.x - w - p, this.position.x + w + p,\r\n\t\t\tthis.position.y - h - p, this.position.y + h + p,\r\n\t\t\tthis.position.z - d - p, this.position.z + d + p\r\n\t\t);\r\n\r\n\t\tif ( this.proxy != null ) this.proxy.update();\r\n\r\n\t}\r\n});\n\n/**\r\n * Sphere shape\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction Sphere( config, radius ) {\r\n\r\n    Shape.call( this, config );\r\n\r\n    this.type = SHAPE_SPHERE;\r\n\r\n    // radius of the shape.\r\n    this.radius = radius;\r\n\r\n}\r\n\r\nSphere.prototype = Object.assign( Object.create( Shape.prototype ), {\r\n\r\n\tconstructor: Sphere,\r\n\r\n\tvolume: function () {\r\n\r\n\t\treturn _Math.PI * this.radius * 1.333333;\r\n\r\n\t},\r\n\r\n\tcalculateMassInfo: function ( out ) {\r\n\r\n\t\tvar mass = this.volume() * this.radius * this.radius * this.density; //1.333 * _Math.PI * this.radius * this.radius * this.radius * this.density;\r\n\t\tout.mass = mass;\r\n\t\tvar inertia = mass * this.radius * this.radius * 0.4;\r\n\t\tout.inertia.set( inertia, 0, 0, 0, inertia, 0, 0, 0, inertia );\r\n\r\n\t},\r\n\r\n\tupdateProxy: function () {\r\n\r\n\t\tvar p = AABB_PROX;\r\n\r\n\t\tthis.aabb.set(\r\n\t\t\tthis.position.x - this.radius - p, this.position.x + this.radius + p,\r\n\t\t\tthis.position.y - this.radius - p, this.position.y + this.radius + p,\r\n\t\t\tthis.position.z - this.radius - p, this.position.z + this.radius + p\r\n\t\t);\r\n\r\n\t\tif ( this.proxy != null ) this.proxy.update();\r\n\r\n\t}\r\n\r\n});\n\n/**\r\n * Cylinder shape\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction Cylinder ( config, radius, height ) {\r\n\r\n    Shape.call( this, config );\r\n\r\n    this.type = SHAPE_CYLINDER;\r\n\r\n    this.radius = radius;\r\n    this.height = height;\r\n    this.halfHeight = height * 0.5;\r\n\r\n    this.normalDirection = new Vec3();\r\n    this.halfDirection = new Vec3();\r\n\r\n}\r\n\r\nCylinder.prototype = Object.assign( Object.create( Shape.prototype ), {\r\n\r\n    constructor: Cylinder,\r\n\r\n    calculateMassInfo: function ( out ) {\r\n\r\n        var rsq = this.radius * this.radius;\r\n        var mass = _Math.PI * rsq * this.height * this.density;\r\n        var inertiaXZ = ( ( 0.25 * rsq ) + ( 0.0833 * this.height * this.height ) ) * mass;\r\n        var inertiaY = 0.5 * rsq;\r\n        out.mass = mass;\r\n        out.inertia.set( inertiaXZ, 0, 0,  0, inertiaY, 0,  0, 0, inertiaXZ );\r\n\r\n    },\r\n\r\n    updateProxy: function () {\r\n\r\n        var te = this.rotation.elements;\r\n        var len, wx, hy, dz, xx, yy, zz, w, h, d, p;\r\n\r\n        xx = te[1] * te[1];\r\n        yy = te[4] * te[4];\r\n        zz = te[7] * te[7];\r\n\r\n        this.normalDirection.set( te[1], te[4], te[7] );\r\n        this.halfDirection.scale( this.normalDirection, this.halfHeight );\r\n\r\n        wx = 1 - xx;\r\n        len = _Math.sqrt(wx*wx + xx*yy + xx*zz);\r\n        if(len>0) len = this.radius/len;\r\n        wx *= len;\r\n        hy = 1 - yy;\r\n        len = _Math.sqrt(yy*xx + hy*hy + yy*zz);\r\n        if(len>0) len = this.radius/len;\r\n        hy *= len;\r\n        dz = 1 - zz;\r\n        len = _Math.sqrt(zz*xx + zz*yy + dz*dz);\r\n        if(len>0) len = this.radius/len;\r\n        dz *= len;\r\n\r\n        w = this.halfDirection.x < 0 ? -this.halfDirection.x : this.halfDirection.x;\r\n        h = this.halfDirection.y < 0 ? -this.halfDirection.y : this.halfDirection.y;\r\n        d = this.halfDirection.z < 0 ? -this.halfDirection.z : this.halfDirection.z;\r\n\r\n        w = wx < 0 ? w - wx : w + wx;\r\n        h = hy < 0 ? h - hy : h + hy;\r\n        d = dz < 0 ? d - dz : d + dz;\r\n\r\n        p = AABB_PROX;\r\n\r\n        this.aabb.set(\r\n            this.position.x - w - p, this.position.x + w + p,\r\n            this.position.y - h - p, this.position.y + h + p,\r\n            this.position.z - d - p, this.position.z + d + p\r\n        );\r\n\r\n        if ( this.proxy != null ) this.proxy.update();\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * Plane shape.\r\n * @author lo-th\r\n */\r\n\r\nfunction Plane( config, normal ) {\r\n\r\n    Shape.call( this, config );\r\n\r\n    this.type = SHAPE_PLANE;\r\n\r\n    // radius of the shape.\r\n    this.normal = new Vec3( 0, 1, 0 );\r\n\r\n}\r\n\r\nPlane.prototype = Object.assign( Object.create( Shape.prototype ), {\r\n\r\n    constructor: Plane,\r\n\r\n    volume: function () {\r\n\r\n        return Number.MAX_VALUE;\r\n\r\n    },\r\n\r\n    calculateMassInfo: function ( out ) {\r\n\r\n        out.mass = this.density;//0.0001;\r\n        var inertia = 1;\r\n        out.inertia.set( inertia, 0, 0, 0, inertia, 0, 0, 0, inertia );\r\n\r\n    },\r\n\r\n    updateProxy: function () {\r\n\r\n        var p = AABB_PROX;\r\n\r\n        var min = -_Math.INF;\r\n        var max = _Math.INF;\r\n        var n = this.normal;\r\n        // The plane AABB is infinite, except if the normal is pointing along any axis\r\n        this.aabb.set(\r\n            n.x === -1 ? this.position.x - p : min, n.x === 1 ? this.position.x + p : max,\r\n            n.y === -1 ? this.position.y - p : min, n.y === 1 ? this.position.y + p : max,\r\n            n.z === -1 ? this.position.z - p : min, n.z === 1 ? this.position.z + p : max\r\n        );\r\n\r\n        if ( this.proxy != null ) this.proxy.update();\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * A Particule shape\r\n * @author lo-th\r\n */\r\n\r\nfunction Particle( config, normal ) {\r\n\r\n    Shape.call( this, config );\r\n\r\n    this.type = SHAPE_PARTICLE;\r\n\r\n}\r\n\r\nParticle.prototype = Object.assign( Object.create( Shape.prototype ), {\r\n\r\n    constructor: Particle,\r\n\r\n    volume: function () {\r\n\r\n        return Number.MAX_VALUE;\r\n\r\n    },\r\n\r\n    calculateMassInfo: function ( out ) {\r\n\r\n        var inertia = 0;\r\n        out.inertia.set( inertia, 0, 0, 0, inertia, 0, 0, 0, inertia );\r\n\r\n    },\r\n\r\n    updateProxy: function () {\r\n\r\n        var p = 0;//AABB_PROX;\r\n\r\n        this.aabb.set(\r\n            this.position.x - p, this.position.x + p,\r\n            this.position.y - p, this.position.y + p,\r\n            this.position.z - p, this.position.z + p\r\n        );\r\n\r\n        if ( this.proxy != null ) this.proxy.update();\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * A shape configuration holds common configuration data for constructing a shape.\r\n * These configurations can be reused safely.\r\n *\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n \r\nfunction ShapeConfig(){\r\n\r\n    // position of the shape in parent's coordinate system.\r\n    this.relativePosition = new Vec3();\r\n    // rotation matrix of the shape in parent's coordinate system.\r\n    this.relativeRotation = new Mat33();\r\n    // coefficient of friction of the shape.\r\n    this.friction = 0.2; // 0.4\r\n    // coefficient of restitution of the shape.\r\n    this.restitution = 0.2;\r\n    // density of the shape.\r\n    this.density = 1;\r\n    // bits of the collision groups to which the shape belongs.\r\n    this.belongsTo = 1;\r\n    // bits of the collision groups with which the shape collides.\r\n    this.collidesWith = 0xffffffff;\r\n\r\n}\n\n/**\n* An information of limit and motor.\n*\n* @author saharan\n*/\n\nfunction LimitMotor ( axis, fixed ) {\n\n    fixed = fixed || false;\n    // The axis of the constraint.\n    this.axis = axis;\n    // The current angle for rotational constraints.\n    this.angle = 0;\n    // The lower limit. Set lower > upper to disable\n    this.lowerLimit = fixed ? 0 : 1;\n\n    //  The upper limit. Set lower > upper to disable.\n    this.upperLimit = 0;\n    // The target motor speed.\n    this.motorSpeed = 0;\n    // The maximum motor force or torque. Set 0 to disable.\n    this.maxMotorForce = 0;\n    // The frequency of the spring. Set 0 to disable.\n    this.frequency = 0;\n    // The damping ratio of the spring. Set 0 for no damping, 1 for critical damping.\n    this.dampingRatio = 0;\n\n}\n\nObject.assign( LimitMotor.prototype, {\n\n    LimitMotor: true,\n\n    // Set limit data into this constraint.\n    setLimit:function ( lowerLimit, upperLimit ) {\n\n        this.lowerLimit = lowerLimit;\n        this.upperLimit = upperLimit;\n\n    },\n\n    // Set motor data into this constraint.\n    setMotor:function ( motorSpeed, maxMotorForce ) {\n        \n        this.motorSpeed = motorSpeed;\n        this.maxMotorForce = maxMotorForce;\n\n    },\n\n    // Set spring data into this constraint.\n    setSpring:function ( frequency, dampingRatio ) {\n        \n        this.frequency = frequency;\n        this.dampingRatio = dampingRatio;\n        \n    }\n\n});\n\n/**\r\n * The base class of all type of the constraints.\r\n *\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction Constraint(){\r\n\r\n    // parent world of the constraint.\r\n    this.parent = null;\r\n\r\n    // first body of the constraint.\r\n    this.body1 = null;\r\n\r\n    // second body of the constraint.\r\n    this.body2 = null;\r\n\r\n    // Internal\r\n    this.addedToIsland = false;\r\n    \r\n}\r\n\r\nObject.assign( Constraint.prototype, {\r\n\r\n    Constraint: true,\r\n\r\n    // Prepare for solving the constraint\r\n    preSolve: function( timeStep, invTimeStep ){\r\n\r\n        printError(\"Constraint\", \"Inheritance error.\");\r\n\r\n    },\r\n\r\n    // Solve the constraint. This is usually called iteratively.\r\n    solve: function(){\r\n\r\n        printError(\"Constraint\", \"Inheritance error.\");\r\n\r\n    },\r\n\r\n    // Do the post-processing.\r\n    postSolve: function(){\r\n\r\n        printError(\"Constraint\", \"Inheritance error.\");\r\n\r\n    }\r\n\r\n});\n\nfunction JointLink ( joint ){\r\n    \r\n    // The previous joint link.\r\n    this.prev = null;\r\n    // The next joint link.\r\n    this.next = null;\r\n    // The other rigid body connected to the joint.\r\n    this.body = null;\r\n    // The joint of the link.\r\n    this.joint = joint;\r\n\r\n}\n\n/**\n * Joints are used to constrain the motion between two rigid bodies.\n *\n * @author saharan\n * @author lo-th\n */\n\nfunction Joint ( config ){\n\n    Constraint.call( this );\n\n    this.scale = 1;\n    this.invScale = 1;\n\n    // joint name\n    this.name = \"\";\n    this.id = NaN;\n\n    // The type of the joint.\n    this.type = JOINT_NULL;\n    //  The previous joint in the world.\n    this.prev = null;\n    // The next joint in the world.\n    this.next = null;\n\n    this.body1 = config.body1;\n    this.body2 = config.body2;\n\n    // anchor point on the first rigid body in local coordinate system.\n    this.localAnchorPoint1 = new Vec3().copy( config.localAnchorPoint1 );\n    // anchor point on the second rigid body in local coordinate system.\n    this.localAnchorPoint2 = new Vec3().copy( config.localAnchorPoint2 );\n    // anchor point on the first rigid body in world coordinate system relative to the body's origin.\n    this.relativeAnchorPoint1 = new Vec3();\n    // anchor point on the second rigid body in world coordinate system relative to the body's origin.\n    this.relativeAnchorPoint2 = new Vec3();\n    //  anchor point on the first rigid body in world coordinate system.\n    this.anchorPoint1 = new Vec3();\n    // anchor point on the second rigid body in world coordinate system.\n    this.anchorPoint2 = new Vec3();\n    // Whether allow collision between connected rigid bodies or not.\n    this.allowCollision = config.allowCollision;\n\n    this.b1Link = new JointLink( this );\n    this.b2Link = new JointLink( this );\n\n}\n\nJoint.prototype = Object.assign( Object.create( Constraint.prototype ), {\n\n    constructor: Joint,\n\n    setId: function ( n ) { \n\n        this.id = i; \n\n    },\n\n    setParent: function ( world ) {\n\n        this.parent = world;\n        this.scale = this.parent.scale;\n        this.invScale = this.parent.invScale;\n        this.id = this.parent.numJoints;\n        if( !this.name ) this.name = 'J' +  this.id;\n\n    },\n\n    // Update all the anchor points.\n\n    updateAnchorPoints: function () {\n\n        this.relativeAnchorPoint1.copy( this.localAnchorPoint1 ).applyMatrix3( this.body1.rotation, true );\n        this.relativeAnchorPoint2.copy( this.localAnchorPoint2 ).applyMatrix3( this.body2.rotation, true );\n\n        this.anchorPoint1.add( this.relativeAnchorPoint1, this.body1.position );\n        this.anchorPoint2.add( this.relativeAnchorPoint2, this.body2.position );\n\n    },\n\n    // Attach the joint from the bodies.\n\n    attach: function ( isX ) {\n\n        this.b1Link.body = this.body2;\n        this.b2Link.body = this.body1;\n\n        if(isX){\n\n            this.body1.jointLink.push( this.b1Link );\n            this.body2.jointLink.push( this.b2Link );\n\n        } else {\n\n            if(this.body1.jointLink != null) (this.b1Link.next=this.body1.jointLink).prev = this.b1Link;\n            else this.b1Link.next = null;\n            this.body1.jointLink = this.b1Link;\n            this.body1.numJoints++;\n            if(this.body2.jointLink != null) (this.b2Link.next=this.body2.jointLink).prev = this.b2Link;\n            else this.b2Link.next = null;\n            this.body2.jointLink = this.b2Link;\n            this.body2.numJoints++;\n\n        }\n\n    },\n\n    // Detach the joint from the bodies.\n\n    detach: function ( isX ) {\n\n        if( isX ){\n\n            this.body1.jointLink.splice( this.body1.jointLink.indexOf( this.b1Link ), 1 );\n            this.body2.jointLink.splice( this.body2.jointLink.indexOf( this.b2Link ), 1 );\n\n        } else {\n\n            var prev = this.b1Link.prev;\n            var next = this.b1Link.next;\n            if(prev != null) prev.next = next;\n            if(next != null) next.prev = prev;\n            if(this.body1.jointLink == this.b1Link) this.body1.jointLink = next;\n            this.b1Link.prev = null;\n            this.b1Link.next = null;\n            this.b1Link.body = null;\n            this.body1.numJoints--;\n\n            prev = this.b2Link.prev;\n            next = this.b2Link.next;\n            if(prev != null) prev.next = next;\n            if(next != null) next.prev = prev;\n            if(this.body2.jointLink==this.b2Link) this.body2.jointLink = next;\n            this.b2Link.prev = null;\n            this.b2Link.next = null;\n            this.b2Link.body = null;\n            this.body2.numJoints--;\n\n        }\n\n        this.b1Link.body = null;\n        this.b2Link.body = null;\n\n    },\n\n\n    // Awake the bodies.\n\n    awake: function () {\n\n        this.body1.awake();\n        this.body2.awake();\n\n    },\n\n    // calculation function\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n    },\n\n    solve: function () {\n\n    },\n\n    postSolve: function () {\n\n    },\n\n    // Delete process\n\n    remove: function () {\n\n        this.dispose();\n\n    },\n\n    dispose: function () {\n\n        this.parent.removeJoint( this );\n\n    },\n\n\n    // Three js add\n\n    getPosition: function () {\n\n        var p1 = new Vec3().scale( this.anchorPoint1, this.scale );\n        var p2 = new Vec3().scale( this.anchorPoint2, this.scale );\n        return [ p1, p2 ];\n\n    }\n\n});\n\n/**\n* A linear constraint for all axes for various joints.\n* @author saharan\n*/\nfunction LinearConstraint ( joint ){\n\n    this.m1=NaN;\n    this.m2=NaN;\n\n    this.ii1 = null;\n    this.ii2 = null;\n    this.dd = null;\n\n    this.r1x=NaN;\n    this.r1y=NaN;\n    this.r1z=NaN;\n\n    this.r2x=NaN;\n    this.r2y=NaN;\n    this.r2z=NaN;\n\n    this.ax1x=NaN;\n    this.ax1y=NaN;\n    this.ax1z=NaN;\n    this.ay1x=NaN;\n    this.ay1y=NaN;\n    this.ay1z=NaN;\n    this.az1x=NaN;\n    this.az1y=NaN;\n    this.az1z=NaN;\n\n    this.ax2x=NaN;\n    this.ax2y=NaN;\n    this.ax2z=NaN;\n    this.ay2x=NaN;\n    this.ay2y=NaN;\n    this.ay2z=NaN;\n    this.az2x=NaN;\n    this.az2y=NaN;\n    this.az2z=NaN;\n\n    this.vel=NaN;\n    this.velx=NaN;\n    this.vely=NaN;\n    this.velz=NaN;\n\n\n    this.joint = joint;\n    this.r1 = joint.relativeAnchorPoint1;\n    this.r2 = joint.relativeAnchorPoint2;\n    this.p1 = joint.anchorPoint1;\n    this.p2 = joint.anchorPoint2;\n    this.b1 = joint.body1;\n    this.b2 = joint.body2;\n    this.l1 = this.b1.linearVelocity;\n    this.l2 = this.b2.linearVelocity;\n    this.a1 = this.b1.angularVelocity;\n    this.a2 = this.b2.angularVelocity;\n    this.i1 = this.b1.inverseInertia;\n    this.i2 = this.b2.inverseInertia;\n    this.impx = 0;\n    this.impy = 0;\n    this.impz = 0;\n\n}\n\nObject.assign( LinearConstraint.prototype, {\n\n    LinearConstraint: true,\n\n    preSolve: function ( timeStep, invTimeStep ) {\n        \n        this.r1x = this.r1.x;\n        this.r1y = this.r1.y;\n        this.r1z = this.r1.z;\n\n        this.r2x = this.r2.x;\n        this.r2y = this.r2.y;\n        this.r2z = this.r2.z;\n\n        this.m1 = this.b1.inverseMass;\n        this.m2 = this.b2.inverseMass;\n\n        this.ii1 = this.i1.clone();\n        this.ii2 = this.i2.clone();\n\n        var ii1 = this.ii1.elements;\n        var ii2 = this.ii2.elements;\n\n        this.ax1x = this.r1z*ii1[1]+-this.r1y*ii1[2];\n        this.ax1y = this.r1z*ii1[4]+-this.r1y*ii1[5];\n        this.ax1z = this.r1z*ii1[7]+-this.r1y*ii1[8];\n        this.ay1x = -this.r1z*ii1[0]+this.r1x*ii1[2];\n        this.ay1y = -this.r1z*ii1[3]+this.r1x*ii1[5];\n        this.ay1z = -this.r1z*ii1[6]+this.r1x*ii1[8];\n        this.az1x = this.r1y*ii1[0]+-this.r1x*ii1[1];\n        this.az1y = this.r1y*ii1[3]+-this.r1x*ii1[4];\n        this.az1z = this.r1y*ii1[6]+-this.r1x*ii1[7];\n        this.ax2x = this.r2z*ii2[1]+-this.r2y*ii2[2];\n        this.ax2y = this.r2z*ii2[4]+-this.r2y*ii2[5];\n        this.ax2z = this.r2z*ii2[7]+-this.r2y*ii2[8];\n        this.ay2x = -this.r2z*ii2[0]+this.r2x*ii2[2];\n        this.ay2y = -this.r2z*ii2[3]+this.r2x*ii2[5];\n        this.ay2z = -this.r2z*ii2[6]+this.r2x*ii2[8];\n        this.az2x = this.r2y*ii2[0]+-this.r2x*ii2[1];\n        this.az2y = this.r2y*ii2[3]+-this.r2x*ii2[4];\n        this.az2z = this.r2y*ii2[6]+-this.r2x*ii2[7];\n\n        // calculate point-to-point mass matrix\n        // from impulse equation\n        // \n        // M = ([/m] - [r^][/I][r^]) ^ -1\n        // \n        // where\n        // \n        // [/m] = |1/m, 0, 0|\n        //        |0, 1/m, 0|\n        //        |0, 0, 1/m|\n        // \n        // [r^] = |0, -rz, ry|\n        //        |rz, 0, -rx|\n        //        |-ry, rx, 0|\n        // \n        // [/I] = Inverted moment inertia\n\n        var rxx = this.m1+this.m2;\n\n        var kk = new Mat33().set( rxx, 0, 0,  0, rxx, 0,  0, 0, rxx );\n        var k = kk.elements;\n\n        k[0] += ii1[4]*this.r1z*this.r1z-(ii1[7]+ii1[5])*this.r1y*this.r1z+ii1[8]*this.r1y*this.r1y;\n        k[1] += (ii1[6]*this.r1y+ii1[5]*this.r1x)*this.r1z-ii1[3]*this.r1z*this.r1z-ii1[8]*this.r1x*this.r1y;\n        k[2] += (ii1[3]*this.r1y-ii1[4]*this.r1x)*this.r1z-ii1[6]*this.r1y*this.r1y+ii1[7]*this.r1x*this.r1y;\n        k[3] += (ii1[2]*this.r1y+ii1[7]*this.r1x)*this.r1z-ii1[1]*this.r1z*this.r1z-ii1[8]*this.r1x*this.r1y;\n        k[4] += ii1[0]*this.r1z*this.r1z-(ii1[6]+ii1[2])*this.r1x*this.r1z+ii1[8]*this.r1x*this.r1x;\n        k[5] += (ii1[1]*this.r1x-ii1[0]*this.r1y)*this.r1z-ii1[7]*this.r1x*this.r1x+ii1[6]*this.r1x*this.r1y;\n        k[6] += (ii1[1]*this.r1y-ii1[4]*this.r1x)*this.r1z-ii1[2]*this.r1y*this.r1y+ii1[5]*this.r1x*this.r1y;\n        k[7] += (ii1[3]*this.r1x-ii1[0]*this.r1y)*this.r1z-ii1[5]*this.r1x*this.r1x+ii1[2]*this.r1x*this.r1y;\n        k[8] += ii1[0]*this.r1y*this.r1y-(ii1[3]+ii1[1])*this.r1x*this.r1y+ii1[4]*this.r1x*this.r1x;\n\n        k[0] += ii2[4]*this.r2z*this.r2z-(ii2[7]+ii2[5])*this.r2y*this.r2z+ii2[8]*this.r2y*this.r2y;\n        k[1] += (ii2[6]*this.r2y+ii2[5]*this.r2x)*this.r2z-ii2[3]*this.r2z*this.r2z-ii2[8]*this.r2x*this.r2y;\n        k[2] += (ii2[3]*this.r2y-ii2[4]*this.r2x)*this.r2z-ii2[6]*this.r2y*this.r2y+ii2[7]*this.r2x*this.r2y;\n        k[3] += (ii2[2]*this.r2y+ii2[7]*this.r2x)*this.r2z-ii2[1]*this.r2z*this.r2z-ii2[8]*this.r2x*this.r2y;\n        k[4] += ii2[0]*this.r2z*this.r2z-(ii2[6]+ii2[2])*this.r2x*this.r2z+ii2[8]*this.r2x*this.r2x;\n        k[5] += (ii2[1]*this.r2x-ii2[0]*this.r2y)*this.r2z-ii2[7]*this.r2x*this.r2x+ii2[6]*this.r2x*this.r2y;\n        k[6] += (ii2[1]*this.r2y-ii2[4]*this.r2x)*this.r2z-ii2[2]*this.r2y*this.r2y+ii2[5]*this.r2x*this.r2y;\n        k[7] += (ii2[3]*this.r2x-ii2[0]*this.r2y)*this.r2z-ii2[5]*this.r2x*this.r2x+ii2[2]*this.r2x*this.r2y;\n        k[8] += ii2[0]*this.r2y*this.r2y-(ii2[3]+ii2[1])*this.r2x*this.r2y+ii2[4]*this.r2x*this.r2x;\n\n        var inv=1/( k[0]*(k[4]*k[8]-k[7]*k[5]) + k[3]*(k[7]*k[2]-k[1]*k[8]) + k[6]*(k[1]*k[5]-k[4]*k[2]) );\n        this.dd = new Mat33().set(\n            k[4]*k[8]-k[5]*k[7], k[2]*k[7]-k[1]*k[8], k[1]*k[5]-k[2]*k[4],\n            k[5]*k[6]-k[3]*k[8], k[0]*k[8]-k[2]*k[6], k[2]*k[3]-k[0]*k[5],\n            k[3]*k[7]-k[4]*k[6], k[1]*k[6]-k[0]*k[7], k[0]*k[4]-k[1]*k[3]\n        ).scaleEqual( inv );\n\n        this.velx = this.p2.x-this.p1.x;\n        this.vely = this.p2.y-this.p1.y;\n        this.velz = this.p2.z-this.p1.z;\n        var len = _Math.sqrt(this.velx*this.velx+this.vely*this.vely+this.velz*this.velz);\n        if(len>0.005){\n            len = (0.005-len)/len*invTimeStep*0.05;\n            this.velx *= len;\n            this.vely *= len;\n            this.velz *= len;\n        }else{\n            this.velx = 0;\n            this.vely = 0;\n            this.velz = 0;\n        }\n\n        this.impx *= 0.95;\n        this.impy *= 0.95;\n        this.impz *= 0.95;\n        \n        this.l1.x += this.impx*this.m1;\n        this.l1.y += this.impy*this.m1;\n        this.l1.z += this.impz*this.m1;\n        this.a1.x += this.impx*this.ax1x+this.impy*this.ay1x+this.impz*this.az1x;\n        this.a1.y += this.impx*this.ax1y+this.impy*this.ay1y+this.impz*this.az1y;\n        this.a1.z += this.impx*this.ax1z+this.impy*this.ay1z+this.impz*this.az1z;\n        this.l2.x -= this.impx*this.m2;\n        this.l2.y -= this.impy*this.m2;\n        this.l2.z -= this.impz*this.m2;\n        this.a2.x -= this.impx*this.ax2x+this.impy*this.ay2x+this.impz*this.az2x;\n        this.a2.y -= this.impx*this.ax2y+this.impy*this.ay2y+this.impz*this.az2y;\n        this.a2.z -= this.impx*this.ax2z+this.impy*this.ay2z+this.impz*this.az2z;\n    },\n\n    solve: function () {\n\n        var d = this.dd.elements;\n        var rvx = this.l2.x-this.l1.x+this.a2.y*this.r2z-this.a2.z*this.r2y-this.a1.y*this.r1z+this.a1.z*this.r1y-this.velx;\n        var rvy = this.l2.y-this.l1.y+this.a2.z*this.r2x-this.a2.x*this.r2z-this.a1.z*this.r1x+this.a1.x*this.r1z-this.vely;\n        var rvz = this.l2.z-this.l1.z+this.a2.x*this.r2y-this.a2.y*this.r2x-this.a1.x*this.r1y+this.a1.y*this.r1x-this.velz;\n        var nimpx = rvx*d[0]+rvy*d[1]+rvz*d[2];\n        var nimpy = rvx*d[3]+rvy*d[4]+rvz*d[5];\n        var nimpz = rvx*d[6]+rvy*d[7]+rvz*d[8];\n        this.impx += nimpx;\n        this.impy += nimpy;\n        this.impz += nimpz;\n        this.l1.x += nimpx*this.m1;\n        this.l1.y += nimpy*this.m1;\n        this.l1.z += nimpz*this.m1;\n        this.a1.x += nimpx*this.ax1x+nimpy*this.ay1x+nimpz*this.az1x;\n        this.a1.y += nimpx*this.ax1y+nimpy*this.ay1y+nimpz*this.az1y;\n        this.a1.z += nimpx*this.ax1z+nimpy*this.ay1z+nimpz*this.az1z;\n        this.l2.x -= nimpx*this.m2;\n        this.l2.y -= nimpy*this.m2;\n        this.l2.z -= nimpz*this.m2;\n        this.a2.x -= nimpx*this.ax2x+nimpy*this.ay2x+nimpz*this.az2x;\n        this.a2.y -= nimpx*this.ax2y+nimpy*this.ay2y+nimpz*this.az2y;\n        this.a2.z -= nimpx*this.ax2z+nimpy*this.ay2z+nimpz*this.az2z;\n\n    }\n\n} );\n\n/**\n* A three-axis rotational constraint for various joints.\n* @author saharan\n*/\n\nfunction Rotational3Constraint ( joint, limitMotor1, limitMotor2, limitMotor3 ) {\n    \n    this.cfm1=NaN;\n    this.cfm2=NaN;\n    this.cfm3=NaN;\n    this.i1e00=NaN;\n    this.i1e01=NaN;\n    this.i1e02=NaN;\n    this.i1e10=NaN;\n    this.i1e11=NaN;\n    this.i1e12=NaN;\n    this.i1e20=NaN;\n    this.i1e21=NaN;\n    this.i1e22=NaN;\n    this.i2e00=NaN;\n    this.i2e01=NaN;\n    this.i2e02=NaN;\n    this.i2e10=NaN;\n    this.i2e11=NaN;\n    this.i2e12=NaN;\n    this.i2e20=NaN;\n    this.i2e21=NaN;\n    this.i2e22=NaN;\n    this.ax1=NaN;\n    this.ay1=NaN;\n    this.az1=NaN;\n    this.ax2=NaN;\n    this.ay2=NaN;\n    this.az2=NaN;\n    this.ax3=NaN;\n    this.ay3=NaN;\n    this.az3=NaN;\n\n    this.a1x1=NaN; // jacoians\n    this.a1y1=NaN;\n    this.a1z1=NaN;\n    this.a2x1=NaN;\n    this.a2y1=NaN;\n    this.a2z1=NaN;\n    this.a1x2=NaN;\n    this.a1y2=NaN;\n    this.a1z2=NaN;\n    this.a2x2=NaN;\n    this.a2y2=NaN;\n    this.a2z2=NaN;\n    this.a1x3=NaN;\n    this.a1y3=NaN;\n    this.a1z3=NaN;\n    this.a2x3=NaN;\n    this.a2y3=NaN;\n    this.a2z3=NaN;\n\n    this.lowerLimit1=NaN;\n    this.upperLimit1=NaN;\n    this.limitVelocity1=NaN;\n    this.limitState1=0; // -1: at lower, 0: locked, 1: at upper, 2: free\n    this.enableMotor1=false;\n    this.motorSpeed1=NaN;\n    this.maxMotorForce1=NaN;\n    this.maxMotorImpulse1=NaN;\n    this.lowerLimit2=NaN;\n    this.upperLimit2=NaN;\n    this.limitVelocity2=NaN;\n    this.limitState2=0; // -1: at lower, 0: locked, 1: at upper, 2: free\n    this.enableMotor2=false;\n    this.motorSpeed2=NaN;\n    this.maxMotorForce2=NaN;\n    this.maxMotorImpulse2=NaN;\n    this.lowerLimit3=NaN;\n    this.upperLimit3=NaN;\n    this.limitVelocity3=NaN;\n    this.limitState3=0; // -1: at lower, 0: locked, 1: at upper, 2: free\n    this.enableMotor3=false;\n    this.motorSpeed3=NaN;\n    this.maxMotorForce3=NaN;\n    this.maxMotorImpulse3=NaN;\n\n    this.k00=NaN; // K = J*M*JT\n    this.k01=NaN;\n    this.k02=NaN;\n    this.k10=NaN;\n    this.k11=NaN;\n    this.k12=NaN;\n    this.k20=NaN;\n    this.k21=NaN;\n    this.k22=NaN;\n\n    this.kv00=NaN; // diagonals without CFMs\n    this.kv11=NaN;\n    this.kv22=NaN;\n\n    this.dv00=NaN; // ...inverted\n    this.dv11=NaN;\n    this.dv22=NaN;\n\n    this.d00=NaN;  // K^-1\n    this.d01=NaN;\n    this.d02=NaN;\n    this.d10=NaN;\n    this.d11=NaN;\n    this.d12=NaN;\n    this.d20=NaN;\n    this.d21=NaN;\n    this.d22=NaN;\n\n    this.limitMotor1=limitMotor1;\n    this.limitMotor2=limitMotor2;\n    this.limitMotor3=limitMotor3;\n    this.b1=joint.body1;\n    this.b2=joint.body2;\n    this.a1=this.b1.angularVelocity;\n    this.a2=this.b2.angularVelocity;\n    this.i1=this.b1.inverseInertia;\n    this.i2=this.b2.inverseInertia;\n    this.limitImpulse1=0;\n    this.motorImpulse1=0;\n    this.limitImpulse2=0;\n    this.motorImpulse2=0;\n    this.limitImpulse3=0;\n    this.motorImpulse3=0;\n\n}\n\nObject.assign( Rotational3Constraint.prototype, {\n\n    Rotational3Constraint: true,\n\n    preSolve: function( timeStep, invTimeStep ){\n\n        this.ax1=this.limitMotor1.axis.x;\n        this.ay1=this.limitMotor1.axis.y;\n        this.az1=this.limitMotor1.axis.z;\n        this.ax2=this.limitMotor2.axis.x;\n        this.ay2=this.limitMotor2.axis.y;\n        this.az2=this.limitMotor2.axis.z;\n        this.ax3=this.limitMotor3.axis.x;\n        this.ay3=this.limitMotor3.axis.y;\n        this.az3=this.limitMotor3.axis.z;\n        this.lowerLimit1=this.limitMotor1.lowerLimit;\n        this.upperLimit1=this.limitMotor1.upperLimit;\n        this.motorSpeed1=this.limitMotor1.motorSpeed;\n        this.maxMotorForce1=this.limitMotor1.maxMotorForce;\n        this.enableMotor1=this.maxMotorForce1>0;\n        this.lowerLimit2=this.limitMotor2.lowerLimit;\n        this.upperLimit2=this.limitMotor2.upperLimit;\n        this.motorSpeed2=this.limitMotor2.motorSpeed;\n        this.maxMotorForce2=this.limitMotor2.maxMotorForce;\n        this.enableMotor2=this.maxMotorForce2>0;\n        this.lowerLimit3=this.limitMotor3.lowerLimit;\n        this.upperLimit3=this.limitMotor3.upperLimit;\n        this.motorSpeed3=this.limitMotor3.motorSpeed;\n        this.maxMotorForce3=this.limitMotor3.maxMotorForce;\n        this.enableMotor3=this.maxMotorForce3>0;\n\n        var ti1 = this.i1.elements;\n        var ti2 = this.i2.elements;\n        this.i1e00=ti1[0];\n        this.i1e01=ti1[1];\n        this.i1e02=ti1[2];\n        this.i1e10=ti1[3];\n        this.i1e11=ti1[4];\n        this.i1e12=ti1[5];\n        this.i1e20=ti1[6];\n        this.i1e21=ti1[7];\n        this.i1e22=ti1[8];\n\n        this.i2e00=ti2[0];\n        this.i2e01=ti2[1];\n        this.i2e02=ti2[2];\n        this.i2e10=ti2[3];\n        this.i2e11=ti2[4];\n        this.i2e12=ti2[5];\n        this.i2e20=ti2[6];\n        this.i2e21=ti2[7];\n        this.i2e22=ti2[8];\n\n        var frequency1=this.limitMotor1.frequency;\n        var frequency2=this.limitMotor2.frequency;\n        var frequency3=this.limitMotor3.frequency;\n        var enableSpring1=frequency1>0;\n        var enableSpring2=frequency2>0;\n        var enableSpring3=frequency3>0;\n        var enableLimit1=this.lowerLimit1<=this.upperLimit1;\n        var enableLimit2=this.lowerLimit2<=this.upperLimit2;\n        var enableLimit3=this.lowerLimit3<=this.upperLimit3;\n        var angle1=this.limitMotor1.angle;\n        if(enableLimit1){\n            if(this.lowerLimit1==this.upperLimit1){\n                if(this.limitState1!=0){\n                    this.limitState1=0;\n                    this.limitImpulse1=0;\n                }\n                this.limitVelocity1=this.lowerLimit1-angle1;\n            }else if(angle1<this.lowerLimit1){\n                if(this.limitState1!=-1){\n                    this.limitState1=-1;\n                    this.limitImpulse1=0;\n                }\n                this.limitVelocity1=this.lowerLimit1-angle1;\n            }else if(angle1>this.upperLimit1){\n                if(this.limitState1!=1){\n                    this.limitState1=1;\n                    this.limitImpulse1=0;\n                }\n                this.limitVelocity1=this.upperLimit1-angle1;\n            }else{\n                this.limitState1=2;\n                this.limitImpulse1=0;\n                this.limitVelocity1=0;\n            }\n            if(!enableSpring1){\n                if(this.limitVelocity1>0.02)this.limitVelocity1-=0.02;\n                else if(this.limitVelocity1<-0.02)this.limitVelocity1+=0.02;\n                else this.limitVelocity1=0;\n            }\n        }else{\n            this.limitState1=2;\n            this.limitImpulse1=0;\n        }\n\n        var angle2=this.limitMotor2.angle;\n        if(enableLimit2){\n            if(this.lowerLimit2==this.upperLimit2){\n                if(this.limitState2!=0){\n                    this.limitState2=0;\n                    this.limitImpulse2=0;\n                }\n                this.limitVelocity2=this.lowerLimit2-angle2;\n            }else if(angle2<this.lowerLimit2){\n                if(this.limitState2!=-1){\n                    this.limitState2=-1;\n                    this.limitImpulse2=0;\n                }\n                this.limitVelocity2=this.lowerLimit2-angle2;\n            }else if(angle2>this.upperLimit2){\n                if(this.limitState2!=1){\n                    this.limitState2=1;\n                    this.limitImpulse2=0;\n                }\n                this.limitVelocity2=this.upperLimit2-angle2;\n            }else{\n                this.limitState2=2;\n                this.limitImpulse2=0;\n                this.limitVelocity2=0;\n            }\n            if(!enableSpring2){\n                if(this.limitVelocity2>0.02)this.limitVelocity2-=0.02;\n                else if(this.limitVelocity2<-0.02)this.limitVelocity2+=0.02;\n                else this.limitVelocity2=0;\n            }\n        }else{\n            this.limitState2=2;\n            this.limitImpulse2=0;\n        }\n\n        var angle3=this.limitMotor3.angle;\n        if(enableLimit3){\n            if(this.lowerLimit3==this.upperLimit3){\n                if(this.limitState3!=0){\n                    this.limitState3=0;\n                    this.limitImpulse3=0;\n                }\n                this.limitVelocity3=this.lowerLimit3-angle3;\n            }else if(angle3<this.lowerLimit3){\n                if(this.limitState3!=-1){\n                    this.limitState3=-1;\n                    this.limitImpulse3=0;\n                }\n                this.limitVelocity3=this.lowerLimit3-angle3;\n            }else if(angle3>this.upperLimit3){\n                if(this.limitState3!=1){\n                    this.limitState3=1;\n                    this.limitImpulse3=0;\n                }\n                this.limitVelocity3=this.upperLimit3-angle3;\n            }else{\n                this.limitState3=2;\n                this.limitImpulse3=0;\n                this.limitVelocity3=0;\n                }\n            if(!enableSpring3){\n                if(this.limitVelocity3>0.02)this.limitVelocity3-=0.02;\n                else if(this.limitVelocity3<-0.02)this.limitVelocity3+=0.02;\n                else this.limitVelocity3=0;\n            }\n        }else{\n            this.limitState3=2;\n            this.limitImpulse3=0;\n        }\n\n        if(this.enableMotor1&&(this.limitState1!=0||enableSpring1)){\n            this.maxMotorImpulse1=this.maxMotorForce1*timeStep;\n        }else{\n            this.motorImpulse1=0;\n            this.maxMotorImpulse1=0;\n        }\n        if(this.enableMotor2&&(this.limitState2!=0||enableSpring2)){\n            this.maxMotorImpulse2=this.maxMotorForce2*timeStep;\n        }else{\n            this.motorImpulse2=0;\n            this.maxMotorImpulse2=0;\n        }\n        if(this.enableMotor3&&(this.limitState3!=0||enableSpring3)){\n            this.maxMotorImpulse3=this.maxMotorForce3*timeStep;\n        }else{\n            this.motorImpulse3=0;\n            this.maxMotorImpulse3=0;\n        }\n\n        // build jacobians\n        this.a1x1=this.ax1*this.i1e00+this.ay1*this.i1e01+this.az1*this.i1e02;\n        this.a1y1=this.ax1*this.i1e10+this.ay1*this.i1e11+this.az1*this.i1e12;\n        this.a1z1=this.ax1*this.i1e20+this.ay1*this.i1e21+this.az1*this.i1e22;\n        this.a2x1=this.ax1*this.i2e00+this.ay1*this.i2e01+this.az1*this.i2e02;\n        this.a2y1=this.ax1*this.i2e10+this.ay1*this.i2e11+this.az1*this.i2e12;\n        this.a2z1=this.ax1*this.i2e20+this.ay1*this.i2e21+this.az1*this.i2e22;\n\n        this.a1x2=this.ax2*this.i1e00+this.ay2*this.i1e01+this.az2*this.i1e02;\n        this.a1y2=this.ax2*this.i1e10+this.ay2*this.i1e11+this.az2*this.i1e12;\n        this.a1z2=this.ax2*this.i1e20+this.ay2*this.i1e21+this.az2*this.i1e22;\n        this.a2x2=this.ax2*this.i2e00+this.ay2*this.i2e01+this.az2*this.i2e02;\n        this.a2y2=this.ax2*this.i2e10+this.ay2*this.i2e11+this.az2*this.i2e12;\n        this.a2z2=this.ax2*this.i2e20+this.ay2*this.i2e21+this.az2*this.i2e22;\n\n        this.a1x3=this.ax3*this.i1e00+this.ay3*this.i1e01+this.az3*this.i1e02;\n        this.a1y3=this.ax3*this.i1e10+this.ay3*this.i1e11+this.az3*this.i1e12;\n        this.a1z3=this.ax3*this.i1e20+this.ay3*this.i1e21+this.az3*this.i1e22;\n        this.a2x3=this.ax3*this.i2e00+this.ay3*this.i2e01+this.az3*this.i2e02;\n        this.a2y3=this.ax3*this.i2e10+this.ay3*this.i2e11+this.az3*this.i2e12;\n        this.a2z3=this.ax3*this.i2e20+this.ay3*this.i2e21+this.az3*this.i2e22;\n\n        // build an impulse matrix\n        this.k00=this.ax1*(this.a1x1+this.a2x1)+this.ay1*(this.a1y1+this.a2y1)+this.az1*(this.a1z1+this.a2z1);\n        this.k01=this.ax1*(this.a1x2+this.a2x2)+this.ay1*(this.a1y2+this.a2y2)+this.az1*(this.a1z2+this.a2z2);\n        this.k02=this.ax1*(this.a1x3+this.a2x3)+this.ay1*(this.a1y3+this.a2y3)+this.az1*(this.a1z3+this.a2z3);\n        this.k10=this.ax2*(this.a1x1+this.a2x1)+this.ay2*(this.a1y1+this.a2y1)+this.az2*(this.a1z1+this.a2z1);\n        this.k11=this.ax2*(this.a1x2+this.a2x2)+this.ay2*(this.a1y2+this.a2y2)+this.az2*(this.a1z2+this.a2z2);\n        this.k12=this.ax2*(this.a1x3+this.a2x3)+this.ay2*(this.a1y3+this.a2y3)+this.az2*(this.a1z3+this.a2z3);\n        this.k20=this.ax3*(this.a1x1+this.a2x1)+this.ay3*(this.a1y1+this.a2y1)+this.az3*(this.a1z1+this.a2z1);\n        this.k21=this.ax3*(this.a1x2+this.a2x2)+this.ay3*(this.a1y2+this.a2y2)+this.az3*(this.a1z2+this.a2z2);\n        this.k22=this.ax3*(this.a1x3+this.a2x3)+this.ay3*(this.a1y3+this.a2y3)+this.az3*(this.a1z3+this.a2z3);\n\n        this.kv00=this.k00;\n        this.kv11=this.k11;\n        this.kv22=this.k22;\n        this.dv00=1/this.kv00;\n        this.dv11=1/this.kv11;\n        this.dv22=1/this.kv22;\n\n        if(enableSpring1&&this.limitState1!=2){\n            var omega=6.2831853*frequency1;\n            var k=omega*omega*timeStep;\n            var dmp=invTimeStep/(k+2*this.limitMotor1.dampingRatio*omega);\n            this.cfm1=this.kv00*dmp;\n            this.limitVelocity1*=k*dmp;\n        }else{\n            this.cfm1=0;\n            this.limitVelocity1*=invTimeStep*0.05;\n        }\n\n        if(enableSpring2&&this.limitState2!=2){\n            omega=6.2831853*frequency2;\n            k=omega*omega*timeStep;\n            dmp=invTimeStep/(k+2*this.limitMotor2.dampingRatio*omega);\n            this.cfm2=this.kv11*dmp;\n            this.limitVelocity2*=k*dmp;\n        }else{\n            this.cfm2=0;\n            this.limitVelocity2*=invTimeStep*0.05;\n        }\n\n        if(enableSpring3&&this.limitState3!=2){\n            omega=6.2831853*frequency3;\n            k=omega*omega*timeStep;\n            dmp=invTimeStep/(k+2*this.limitMotor3.dampingRatio*omega);\n            this.cfm3=this.kv22*dmp;\n            this.limitVelocity3*=k*dmp;\n        }else{\n            this.cfm3=0;\n            this.limitVelocity3*=invTimeStep*0.05;\n        }\n\n        this.k00+=this.cfm1;\n        this.k11+=this.cfm2;\n        this.k22+=this.cfm3;\n\n        var inv=1/(\n        this.k00*(this.k11*this.k22-this.k21*this.k12)+\n        this.k10*(this.k21*this.k02-this.k01*this.k22)+\n        this.k20*(this.k01*this.k12-this.k11*this.k02)\n        );\n        this.d00=(this.k11*this.k22-this.k12*this.k21)*inv;\n        this.d01=(this.k02*this.k21-this.k01*this.k22)*inv;\n        this.d02=(this.k01*this.k12-this.k02*this.k11)*inv;\n        this.d10=(this.k12*this.k20-this.k10*this.k22)*inv;\n        this.d11=(this.k00*this.k22-this.k02*this.k20)*inv;\n        this.d12=(this.k02*this.k10-this.k00*this.k12)*inv;\n        this.d20=(this.k10*this.k21-this.k11*this.k20)*inv;\n        this.d21=(this.k01*this.k20-this.k00*this.k21)*inv;\n        this.d22=(this.k00*this.k11-this.k01*this.k10)*inv;\n        \n        this.limitImpulse1*=0.95;\n        this.motorImpulse1*=0.95;\n        this.limitImpulse2*=0.95;\n        this.motorImpulse2*=0.95;\n        this.limitImpulse3*=0.95;\n        this.motorImpulse3*=0.95;\n        var totalImpulse1=this.limitImpulse1+this.motorImpulse1;\n        var totalImpulse2=this.limitImpulse2+this.motorImpulse2;\n        var totalImpulse3=this.limitImpulse3+this.motorImpulse3;\n        this.a1.x+=totalImpulse1*this.a1x1+totalImpulse2*this.a1x2+totalImpulse3*this.a1x3;\n        this.a1.y+=totalImpulse1*this.a1y1+totalImpulse2*this.a1y2+totalImpulse3*this.a1y3;\n        this.a1.z+=totalImpulse1*this.a1z1+totalImpulse2*this.a1z2+totalImpulse3*this.a1z3;\n        this.a2.x-=totalImpulse1*this.a2x1+totalImpulse2*this.a2x2+totalImpulse3*this.a2x3;\n        this.a2.y-=totalImpulse1*this.a2y1+totalImpulse2*this.a2y2+totalImpulse3*this.a2y3;\n        this.a2.z-=totalImpulse1*this.a2z1+totalImpulse2*this.a2z2+totalImpulse3*this.a2z3;\n    },\n    solve_:function(){\n\n        var rvx=this.a2.x-this.a1.x;\n        var rvy=this.a2.y-this.a1.y;\n        var rvz=this.a2.z-this.a1.z;\n\n        this.limitVelocity3=30;\n        var rvn1=rvx*this.ax1+rvy*this.ay1+rvz*this.az1-this.limitVelocity1;\n        var rvn2=rvx*this.ax2+rvy*this.ay2+rvz*this.az2-this.limitVelocity2;\n        var rvn3=rvx*this.ax3+rvy*this.ay3+rvz*this.az3-this.limitVelocity3;\n\n        var dLimitImpulse1=rvn1*this.d00+rvn2*this.d01+rvn3*this.d02;\n        var dLimitImpulse2=rvn1*this.d10+rvn2*this.d11+rvn3*this.d12;\n        var dLimitImpulse3=rvn1*this.d20+rvn2*this.d21+rvn3*this.d22;\n\n        this.limitImpulse1+=dLimitImpulse1;\n        this.limitImpulse2+=dLimitImpulse2;\n        this.limitImpulse3+=dLimitImpulse3;\n\n        this.a1.x+=dLimitImpulse1*this.a1x1+dLimitImpulse2*this.a1x2+dLimitImpulse3*this.a1x3;\n        this.a1.y+=dLimitImpulse1*this.a1y1+dLimitImpulse2*this.a1y2+dLimitImpulse3*this.a1y3;\n        this.a1.z+=dLimitImpulse1*this.a1z1+dLimitImpulse2*this.a1z2+dLimitImpulse3*this.a1z3;\n        this.a2.x-=dLimitImpulse1*this.a2x1+dLimitImpulse2*this.a2x2+dLimitImpulse3*this.a2x3;\n        this.a2.y-=dLimitImpulse1*this.a2y1+dLimitImpulse2*this.a2y2+dLimitImpulse3*this.a2y3;\n        this.a2.z-=dLimitImpulse1*this.a2z1+dLimitImpulse2*this.a2z2+dLimitImpulse3*this.a2z3;\n    },\n    solve:function(){\n\n        var rvx=this.a2.x-this.a1.x;\n        var rvy=this.a2.y-this.a1.y;\n        var rvz=this.a2.z-this.a1.z;\n\n        var rvn1=rvx*this.ax1+rvy*this.ay1+rvz*this.az1;\n        var rvn2=rvx*this.ax2+rvy*this.ay2+rvz*this.az2;\n        var rvn3=rvx*this.ax3+rvy*this.ay3+rvz*this.az3;\n\n        var oldMotorImpulse1=this.motorImpulse1;\n        var oldMotorImpulse2=this.motorImpulse2;\n        var oldMotorImpulse3=this.motorImpulse3;\n\n        var dMotorImpulse1=0;\n        var dMotorImpulse2=0;\n        var dMotorImpulse3=0;\n\n        if(this.enableMotor1){\n            dMotorImpulse1=(rvn1-this.motorSpeed1)*this.dv00;\n            this.motorImpulse1+=dMotorImpulse1;\n            if(this.motorImpulse1>this.maxMotorImpulse1){ // clamp motor impulse\n            this.motorImpulse1=this.maxMotorImpulse1;\n            }else if(this.motorImpulse1<-this.maxMotorImpulse1){\n            this.motorImpulse1=-this.maxMotorImpulse1;\n            }\n            dMotorImpulse1=this.motorImpulse1-oldMotorImpulse1;\n        }\n        if(this.enableMotor2){\n            dMotorImpulse2=(rvn2-this.motorSpeed2)*this.dv11;\n            this.motorImpulse2+=dMotorImpulse2;\n            if(this.motorImpulse2>this.maxMotorImpulse2){ // clamp motor impulse\n                this.motorImpulse2=this.maxMotorImpulse2;\n            }else if(this.motorImpulse2<-this.maxMotorImpulse2){\n                this.motorImpulse2=-this.maxMotorImpulse2;\n            }\n            dMotorImpulse2=this.motorImpulse2-oldMotorImpulse2;\n        }\n        if(this.enableMotor3){\n            dMotorImpulse3=(rvn3-this.motorSpeed3)*this.dv22;\n            this.motorImpulse3+=dMotorImpulse3;\n            if(this.motorImpulse3>this.maxMotorImpulse3){ // clamp motor impulse\n                this.motorImpulse3=this.maxMotorImpulse3;\n            }else if(this.motorImpulse3<-this.maxMotorImpulse3){\n                this.motorImpulse3=-this.maxMotorImpulse3;\n            }\n            dMotorImpulse3=this.motorImpulse3-oldMotorImpulse3;\n        }\n\n        // apply motor impulse to relative velocity\n        rvn1+=dMotorImpulse1*this.kv00+dMotorImpulse2*this.k01+dMotorImpulse3*this.k02;\n        rvn2+=dMotorImpulse1*this.k10+dMotorImpulse2*this.kv11+dMotorImpulse3*this.k12;\n        rvn3+=dMotorImpulse1*this.k20+dMotorImpulse2*this.k21+dMotorImpulse3*this.kv22;\n\n        // subtract target velocity and applied impulse\n        rvn1-=this.limitVelocity1+this.limitImpulse1*this.cfm1;\n        rvn2-=this.limitVelocity2+this.limitImpulse2*this.cfm2;\n        rvn3-=this.limitVelocity3+this.limitImpulse3*this.cfm3;\n\n        var oldLimitImpulse1=this.limitImpulse1;\n        var oldLimitImpulse2=this.limitImpulse2;\n        var oldLimitImpulse3=this.limitImpulse3;\n\n        var dLimitImpulse1=rvn1*this.d00+rvn2*this.d01+rvn3*this.d02;\n        var dLimitImpulse2=rvn1*this.d10+rvn2*this.d11+rvn3*this.d12;\n        var dLimitImpulse3=rvn1*this.d20+rvn2*this.d21+rvn3*this.d22;\n\n        this.limitImpulse1+=dLimitImpulse1;\n        this.limitImpulse2+=dLimitImpulse2;\n        this.limitImpulse3+=dLimitImpulse3;\n\n        // clamp\n        var clampState=0;\n        if(this.limitState1==2||this.limitImpulse1*this.limitState1<0){\n            dLimitImpulse1=-oldLimitImpulse1;\n            rvn2+=dLimitImpulse1*this.k10;\n            rvn3+=dLimitImpulse1*this.k20;\n            clampState|=1;\n        }\n        if(this.limitState2==2||this.limitImpulse2*this.limitState2<0){\n            dLimitImpulse2=-oldLimitImpulse2;\n            rvn1+=dLimitImpulse2*this.k01;\n            rvn3+=dLimitImpulse2*this.k21;\n            clampState|=2;\n        }\n        if(this.limitState3==2||this.limitImpulse3*this.limitState3<0){\n            dLimitImpulse3=-oldLimitImpulse3;\n            rvn1+=dLimitImpulse3*this.k02;\n            rvn2+=dLimitImpulse3*this.k12;\n            clampState|=4;\n        }\n\n        // update un-clamped impulse\n        // TODO: isolate division\n        var det;\n        switch(clampState){\n            case 1: // update 2 3\n            det=1/(this.k11*this.k22-this.k12*this.k21);\n            dLimitImpulse2=(this.k22*rvn2+-this.k12*rvn3)*det;\n            dLimitImpulse3=(-this.k21*rvn2+this.k11*rvn3)*det;\n            break;\n            case 2: // update 1 3\n            det=1/(this.k00*this.k22-this.k02*this.k20);\n            dLimitImpulse1=(this.k22*rvn1+-this.k02*rvn3)*det;\n            dLimitImpulse3=(-this.k20*rvn1+this.k00*rvn3)*det;\n            break;\n            case 3: // update 3\n            dLimitImpulse3=rvn3/this.k22;\n            break;\n            case 4: // update 1 2\n            det=1/(this.k00*this.k11-this.k01*this.k10);\n            dLimitImpulse1=(this.k11*rvn1+-this.k01*rvn2)*det;\n            dLimitImpulse2=(-this.k10*rvn1+this.k00*rvn2)*det;\n            break;\n            case 5: // update 2\n            dLimitImpulse2=rvn2/this.k11;\n            break;\n            case 6: // update 1\n            dLimitImpulse1=rvn1/this.k00;\n            break;\n        }\n\n        this.limitImpulse1=dLimitImpulse1+oldLimitImpulse1;\n        this.limitImpulse2=dLimitImpulse2+oldLimitImpulse2;\n        this.limitImpulse3=dLimitImpulse3+oldLimitImpulse3;\n\n        var dImpulse1=dMotorImpulse1+dLimitImpulse1;\n        var dImpulse2=dMotorImpulse2+dLimitImpulse2;\n        var dImpulse3=dMotorImpulse3+dLimitImpulse3;\n\n        // apply impulse\n        this.a1.x+=dImpulse1*this.a1x1+dImpulse2*this.a1x2+dImpulse3*this.a1x3;\n        this.a1.y+=dImpulse1*this.a1y1+dImpulse2*this.a1y2+dImpulse3*this.a1y3;\n        this.a1.z+=dImpulse1*this.a1z1+dImpulse2*this.a1z2+dImpulse3*this.a1z3;\n        this.a2.x-=dImpulse1*this.a2x1+dImpulse2*this.a2x2+dImpulse3*this.a2x3;\n        this.a2.y-=dImpulse1*this.a2y1+dImpulse2*this.a2y2+dImpulse3*this.a2y3;\n        this.a2.z-=dImpulse1*this.a2z1+dImpulse2*this.a2z2+dImpulse3*this.a2z3;\n        rvx=this.a2.x-this.a1.x;\n        rvy=this.a2.y-this.a1.y;\n        rvz=this.a2.z-this.a1.z;\n\n        rvn2=rvx*this.ax2+rvy*this.ay2+rvz*this.az2;\n    }\n    \n} );\n\n/**\n * A hinge joint allows only for relative rotation of rigid bodies along the axis.\n *\n * @author saharan\n * @author lo-th\n */\n\nfunction HingeJoint ( config, lowerAngleLimit, upperAngleLimit ) {\n\n    Joint.call( this, config );\n\n    this.type = JOINT_HINGE;\n\n    // The axis in the first body's coordinate system.\n    this.localAxis1 = config.localAxis1.clone().normalize();\n    // The axis in the second body's coordinate system.\n    this.localAxis2 = config.localAxis2.clone().normalize();\n\n    // make angle axis\n    var arc = new Mat33().setQuat( new Quat().setFromUnitVectors( this.localAxis1, this.localAxis2 ) );\n    this.localAngle1 = new Vec3().tangent( this.localAxis1 ).normalize();\n    this.localAngle2 = this.localAngle1.clone().applyMatrix3( arc, true );\n\n    this.ax1 = new Vec3();\n    this.ax2 = new Vec3();\n    this.an1 = new Vec3();\n    this.an2 = new Vec3();\n\n    this.tmp = new Vec3();\n\n    this.nor = new Vec3();\n    this.tan = new Vec3();\n    this.bin = new Vec3();\n\n    // The rotational limit and motor information of the joint.\n    this.limitMotor = new LimitMotor( this.nor, false );\n    this.limitMotor.lowerLimit = lowerAngleLimit;\n    this.limitMotor.upperLimit = upperAngleLimit;\n\n    this.lc = new LinearConstraint( this );\n    this.r3 = new Rotational3Constraint( this, this.limitMotor, new LimitMotor( this.tan, true ), new LimitMotor( this.bin, true ) );\n}\n\nHingeJoint.prototype = Object.assign( Object.create( Joint.prototype ), {\n\n    constructor: HingeJoint,\n\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n        this.updateAnchorPoints();\n\n        this.ax1.copy( this.localAxis1 ).applyMatrix3( this.body1.rotation, true );\n        this.ax2.copy( this.localAxis2 ).applyMatrix3( this.body2.rotation, true );\n\n        this.an1.copy( this.localAngle1 ).applyMatrix3( this.body1.rotation, true );\n        this.an2.copy( this.localAngle2 ).applyMatrix3( this.body2.rotation, true );\n\n        // normal tangent binormal\n\n        this.nor.set(\n            this.ax1.x*this.body2.inverseMass + this.ax2.x*this.body1.inverseMass,\n            this.ax1.y*this.body2.inverseMass + this.ax2.y*this.body1.inverseMass,\n            this.ax1.z*this.body2.inverseMass + this.ax2.z*this.body1.inverseMass\n        ).normalize();\n\n        this.tan.tangent( this.nor ).normalize();\n\n        this.bin.crossVectors( this.nor, this.tan );\n\n        // calculate hinge angle\n\n        var limite = _Math.acosClamp( _Math.dotVectors( this.an1, this.an2 ) );\n\n        this.tmp.crossVectors( this.an1, this.an2 );\n\n        if( _Math.dotVectors( this.nor, this.tmp ) < 0 ) this.limitMotor.angle = -limite;\n        else this.limitMotor.angle = limite;\n\n        this.tmp.crossVectors( this.ax1, this.ax2 );\n\n        this.r3.limitMotor2.angle = _Math.dotVectors( this.tan, this.tmp );\n        this.r3.limitMotor3.angle = _Math.dotVectors( this.bin, this.tmp );\n\n        // preSolve\n        \n        this.r3.preSolve( timeStep, invTimeStep );\n        this.lc.preSolve( timeStep, invTimeStep );\n\n    },\n\n    solve: function () {\n\n        this.r3.solve();\n        this.lc.solve();\n\n    },\n\n    postSolve: function () {\n\n    }\n\n});\n\n/**\n * A ball-and-socket joint limits relative translation on two anchor points on rigid bodies.\n *\n * @author saharan\n * @author lo-th\n */\n\nfunction BallAndSocketJoint ( config ){\n\n    Joint.call( this, config );\n\n    this.type = JOINT_BALL_AND_SOCKET;\n    \n    this.lc = new LinearConstraint( this );\n\n}\n\nBallAndSocketJoint.prototype = Object.assign( Object.create( Joint.prototype ), {\n\n    constructor: BallAndSocketJoint,\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n        this.updateAnchorPoints();\n\n        // preSolve\n\n        this.lc.preSolve( timeStep, invTimeStep );\n\n    },\n\n    solve: function () {\n\n        this.lc.solve();\n\n    },\n\n    postSolve: function () {\n\n    }\n\n});\n\n/**\n* A translational constraint for various joints.\n* @author saharan\n*/\nfunction TranslationalConstraint ( joint, limitMotor ){\n    this.cfm=NaN;\n    this.m1=NaN;\n    this.m2=NaN;\n    this.i1e00=NaN;\n    this.i1e01=NaN;\n    this.i1e02=NaN;\n    this.i1e10=NaN;\n    this.i1e11=NaN;\n    this.i1e12=NaN;\n    this.i1e20=NaN;\n    this.i1e21=NaN;\n    this.i1e22=NaN;\n    this.i2e00=NaN;\n    this.i2e01=NaN;\n    this.i2e02=NaN;\n    this.i2e10=NaN;\n    this.i2e11=NaN;\n    this.i2e12=NaN;\n    this.i2e20=NaN;\n    this.i2e21=NaN;\n    this.i2e22=NaN;\n    this.motorDenom=NaN;\n    this.invMotorDenom=NaN;\n    this.invDenom=NaN;\n    this.ax=NaN;\n    this.ay=NaN;\n    this.az=NaN;\n    this.r1x=NaN;\n    this.r1y=NaN;\n    this.r1z=NaN;\n    this.r2x=NaN;\n    this.r2y=NaN;\n    this.r2z=NaN;\n    this.t1x=NaN;\n    this.t1y=NaN;\n    this.t1z=NaN;\n    this.t2x=NaN;\n    this.t2y=NaN;\n    this.t2z=NaN;\n    this.l1x=NaN;\n    this.l1y=NaN;\n    this.l1z=NaN;\n    this.l2x=NaN;\n    this.l2y=NaN;\n    this.l2z=NaN;\n    this.a1x=NaN;\n    this.a1y=NaN;\n    this.a1z=NaN;\n    this.a2x=NaN;\n    this.a2y=NaN;\n    this.a2z=NaN;\n    this.lowerLimit=NaN;\n    this.upperLimit=NaN;\n    this.limitVelocity=NaN;\n    this.limitState=0; // -1: at lower, 0: locked, 1: at upper, 2: free\n    this.enableMotor=false;\n    this.motorSpeed=NaN;\n    this.maxMotorForce=NaN;\n    this.maxMotorImpulse=NaN;\n\n    this.limitMotor=limitMotor;\n    this.b1=joint.body1;\n    this.b2=joint.body2;\n    this.p1=joint.anchorPoint1;\n    this.p2=joint.anchorPoint2;\n    this.r1=joint.relativeAnchorPoint1;\n    this.r2=joint.relativeAnchorPoint2;\n    this.l1=this.b1.linearVelocity;\n    this.l2=this.b2.linearVelocity;\n    this.a1=this.b1.angularVelocity;\n    this.a2=this.b2.angularVelocity;\n    this.i1=this.b1.inverseInertia;\n    this.i2=this.b2.inverseInertia;\n    this.limitImpulse=0;\n    this.motorImpulse=0;\n}\n\nObject.assign( TranslationalConstraint.prototype, {\n\n    TranslationalConstraint: true,\n\n    preSolve:function(timeStep,invTimeStep){\n        this.ax=this.limitMotor.axis.x;\n        this.ay=this.limitMotor.axis.y;\n        this.az=this.limitMotor.axis.z;\n        this.lowerLimit=this.limitMotor.lowerLimit;\n        this.upperLimit=this.limitMotor.upperLimit;\n        this.motorSpeed=this.limitMotor.motorSpeed;\n        this.maxMotorForce=this.limitMotor.maxMotorForce;\n        this.enableMotor=this.maxMotorForce>0;\n        this.m1=this.b1.inverseMass;\n        this.m2=this.b2.inverseMass;\n\n        var ti1 = this.i1.elements;\n        var ti2 = this.i2.elements;\n        this.i1e00=ti1[0];\n        this.i1e01=ti1[1];\n        this.i1e02=ti1[2];\n        this.i1e10=ti1[3];\n        this.i1e11=ti1[4];\n        this.i1e12=ti1[5];\n        this.i1e20=ti1[6];\n        this.i1e21=ti1[7];\n        this.i1e22=ti1[8];\n\n        this.i2e00=ti2[0];\n        this.i2e01=ti2[1];\n        this.i2e02=ti2[2];\n        this.i2e10=ti2[3];\n        this.i2e11=ti2[4];\n        this.i2e12=ti2[5];\n        this.i2e20=ti2[6];\n        this.i2e21=ti2[7];\n        this.i2e22=ti2[8];\n\n        var dx=this.p2.x-this.p1.x;\n        var dy=this.p2.y-this.p1.y;\n        var dz=this.p2.z-this.p1.z;\n        var d=dx*this.ax+dy*this.ay+dz*this.az;\n        var frequency=this.limitMotor.frequency;\n        var enableSpring=frequency>0;\n        var enableLimit=this.lowerLimit<=this.upperLimit;\n        if(enableSpring&&d>20||d<-20){\n            enableSpring=false;\n        }\n\n        if(enableLimit){\n            if(this.lowerLimit==this.upperLimit){\n                if(this.limitState!=0){\n                    this.limitState=0;\n                    this.limitImpulse=0;\n                }\n                this.limitVelocity=this.lowerLimit-d;\n                if(!enableSpring)d=this.lowerLimit;\n            }else if(d<this.lowerLimit){\n                if(this.limitState!=-1){\n                    this.limitState=-1;\n                    this.limitImpulse=0;\n                }\n                this.limitVelocity=this.lowerLimit-d;\n                if(!enableSpring)d=this.lowerLimit;\n            }else if(d>this.upperLimit){\n                if(this.limitState!=1){\n                    this.limitState=1;\n                    this.limitImpulse=0;\n                }\n                this.limitVelocity=this.upperLimit-d;\n                if(!enableSpring)d=this.upperLimit;\n            }else{\n                this.limitState=2;\n                this.limitImpulse=0;\n                this.limitVelocity=0;\n            }\n            if(!enableSpring){\n                if(this.limitVelocity>0.005)this.limitVelocity-=0.005;\n                else if(this.limitVelocity<-0.005)this.limitVelocity+=0.005;\n                else this.limitVelocity=0;\n            }\n        }else{\n            this.limitState=2;\n            this.limitImpulse=0;\n        }\n\n        if(this.enableMotor&&(this.limitState!=0||enableSpring)){\n            this.maxMotorImpulse=this.maxMotorForce*timeStep;\n        }else{\n            this.motorImpulse=0;\n            this.maxMotorImpulse=0;\n        }\n\n        var rdx=d*this.ax;\n        var rdy=d*this.ay;\n        var rdz=d*this.az;\n        var w1=this.m1/(this.m1+this.m2);\n        var w2=1-w1;\n        this.r1x=this.r1.x+rdx*w1;\n        this.r1y=this.r1.y+rdy*w1;\n        this.r1z=this.r1.z+rdz*w1;\n        this.r2x=this.r2.x-rdx*w2;\n        this.r2y=this.r2.y-rdy*w2;\n        this.r2z=this.r2.z-rdz*w2;\n\n        this.t1x=this.r1y*this.az-this.r1z*this.ay;\n        this.t1y=this.r1z*this.ax-this.r1x*this.az;\n        this.t1z=this.r1x*this.ay-this.r1y*this.ax;\n        this.t2x=this.r2y*this.az-this.r2z*this.ay;\n        this.t2y=this.r2z*this.ax-this.r2x*this.az;\n        this.t2z=this.r2x*this.ay-this.r2y*this.ax;\n        this.l1x=this.ax*this.m1;\n        this.l1y=this.ay*this.m1;\n        this.l1z=this.az*this.m1;\n        this.l2x=this.ax*this.m2;\n        this.l2y=this.ay*this.m2;\n        this.l2z=this.az*this.m2;\n        this.a1x=this.t1x*this.i1e00+this.t1y*this.i1e01+this.t1z*this.i1e02;\n        this.a1y=this.t1x*this.i1e10+this.t1y*this.i1e11+this.t1z*this.i1e12;\n        this.a1z=this.t1x*this.i1e20+this.t1y*this.i1e21+this.t1z*this.i1e22;\n        this.a2x=this.t2x*this.i2e00+this.t2y*this.i2e01+this.t2z*this.i2e02;\n        this.a2y=this.t2x*this.i2e10+this.t2y*this.i2e11+this.t2z*this.i2e12;\n        this.a2z=this.t2x*this.i2e20+this.t2y*this.i2e21+this.t2z*this.i2e22;\n        this.motorDenom=\n        this.m1+this.m2+\n            this.ax*(this.a1y*this.r1z-this.a1z*this.r1y+this.a2y*this.r2z-this.a2z*this.r2y)+\n            this.ay*(this.a1z*this.r1x-this.a1x*this.r1z+this.a2z*this.r2x-this.a2x*this.r2z)+\n            this.az*(this.a1x*this.r1y-this.a1y*this.r1x+this.a2x*this.r2y-this.a2y*this.r2x);\n\n        this.invMotorDenom=1/this.motorDenom;\n\n        if(enableSpring&&this.limitState!=2){\n            var omega=6.2831853*frequency;\n            var k=omega*omega*timeStep;\n            var dmp=invTimeStep/(k+2*this.limitMotor.dampingRatio*omega);\n            this.cfm=this.motorDenom*dmp;\n            this.limitVelocity*=k*dmp;\n        }else{\n            this.cfm=0;\n            this.limitVelocity*=invTimeStep*0.05;\n        }\n\n        this.invDenom=1/(this.motorDenom+this.cfm);\n\n        var totalImpulse=this.limitImpulse+this.motorImpulse;\n        this.l1.x+=totalImpulse*this.l1x;\n        this.l1.y+=totalImpulse*this.l1y;\n        this.l1.z+=totalImpulse*this.l1z;\n        this.a1.x+=totalImpulse*this.a1x;\n        this.a1.y+=totalImpulse*this.a1y;\n        this.a1.z+=totalImpulse*this.a1z;\n        this.l2.x-=totalImpulse*this.l2x;\n        this.l2.y-=totalImpulse*this.l2y;\n        this.l2.z-=totalImpulse*this.l2z;\n        this.a2.x-=totalImpulse*this.a2x;\n        this.a2.y-=totalImpulse*this.a2y;\n        this.a2.z-=totalImpulse*this.a2z;\n    },\n    solve:function(){\n        var rvn=\n            this.ax*(this.l2.x-this.l1.x)+this.ay*(this.l2.y-this.l1.y)+this.az*(this.l2.z-this.l1.z)+\n            this.t2x*this.a2.x-this.t1x*this.a1.x+this.t2y*this.a2.y-this.t1y*this.a1.y+this.t2z*this.a2.z-this.t1z*this.a1.z;\n\n        // motor part\n        var newMotorImpulse;\n        if(this.enableMotor){\n            newMotorImpulse=(rvn-this.motorSpeed)*this.invMotorDenom;\n            var oldMotorImpulse=this.motorImpulse;\n            this.motorImpulse+=newMotorImpulse;\n            if(this.motorImpulse>this.maxMotorImpulse)this.motorImpulse=this.maxMotorImpulse;\n            else if(this.motorImpulse<-this.maxMotorImpulse)this.motorImpulse=-this.maxMotorImpulse;\n            newMotorImpulse=this.motorImpulse-oldMotorImpulse;\n            rvn-=newMotorImpulse*this.motorDenom;\n        }else newMotorImpulse=0;\n\n        // limit part\n        var newLimitImpulse;\n        if(this.limitState!=2){\n            newLimitImpulse=(rvn-this.limitVelocity-this.limitImpulse*this.cfm)*this.invDenom;\n            var oldLimitImpulse=this.limitImpulse;\n            this.limitImpulse+=newLimitImpulse;\n            if(this.limitImpulse*this.limitState<0)this.limitImpulse=0;\n            newLimitImpulse=this.limitImpulse-oldLimitImpulse;\n        }else newLimitImpulse=0;\n        \n        var totalImpulse=newLimitImpulse+newMotorImpulse;\n        this.l1.x+=totalImpulse*this.l1x;\n        this.l1.y+=totalImpulse*this.l1y;\n        this.l1.z+=totalImpulse*this.l1z;\n        this.a1.x+=totalImpulse*this.a1x;\n        this.a1.y+=totalImpulse*this.a1y;\n        this.a1.z+=totalImpulse*this.a1z;\n        this.l2.x-=totalImpulse*this.l2x;\n        this.l2.y-=totalImpulse*this.l2y;\n        this.l2.z-=totalImpulse*this.l2z;\n        this.a2.x-=totalImpulse*this.a2x;\n        this.a2.y-=totalImpulse*this.a2y;\n        this.a2.z-=totalImpulse*this.a2z;\n    }\n} );\n\n/**\n * A distance joint limits the distance between two anchor points on rigid bodies.\n *\n * @author saharan\n * @author lo-th\n */\n\nfunction DistanceJoint ( config, minDistance, maxDistance ){\n\n    Joint.call( this, config );\n\n    this.type = JOINT_DISTANCE;\n    \n    this.nor = new Vec3();\n\n    // The limit and motor information of the joint.\n    this.limitMotor = new LimitMotor( this.nor, true );\n    this.limitMotor.lowerLimit = minDistance;\n    this.limitMotor.upperLimit = maxDistance;\n\n    this.t = new TranslationalConstraint( this, this.limitMotor );\n\n}\n\nDistanceJoint.prototype = Object.assign( Object.create( Joint.prototype ), {\n\n    constructor: DistanceJoint,\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n        this.updateAnchorPoints();\n\n        this.nor.sub( this.anchorPoint2, this.anchorPoint1 ).normalize();\n\n        // preSolve\n\n        this.t.preSolve( timeStep, invTimeStep );\n\n    },\n\n    solve: function () {\n\n        this.t.solve();\n\n    },\n\n    postSolve: function () {\n\n    }\n\n});\n\n/**\n* An angular constraint for all axes for various joints.\n* @author saharan\n*/\n\nfunction AngularConstraint( joint, targetOrientation ) {\n\n    this.joint = joint;\n\n    this.targetOrientation = new Quat().invert( targetOrientation );\n\n    this.relativeOrientation = new Quat();\n\n    this.ii1 = null;\n    this.ii2 = null;\n    this.dd = null;\n\n    this.vel = new Vec3();\n    this.imp = new Vec3();\n\n    this.rn0 = new Vec3();\n    this.rn1 = new Vec3();\n    this.rn2 = new Vec3();\n\n    this.b1 = joint.body1;\n    this.b2 = joint.body2;\n    this.a1 = this.b1.angularVelocity;\n    this.a2 = this.b2.angularVelocity;\n    this.i1 = this.b1.inverseInertia;\n    this.i2 = this.b2.inverseInertia;\n\n}\n\nObject.assign( AngularConstraint.prototype, {\n\n    AngularConstraint: true,\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n        var inv, len, v;\n\n        this.ii1 = this.i1.clone();\n        this.ii2 = this.i2.clone();\n\n        v = new Mat33().add(this.ii1, this.ii2).elements;\n        inv = 1/( v[0]*(v[4]*v[8]-v[7]*v[5])  +  v[3]*(v[7]*v[2]-v[1]*v[8])  +  v[6]*(v[1]*v[5]-v[4]*v[2]) );\n        this.dd = new Mat33().set(\n            v[4]*v[8]-v[5]*v[7], v[2]*v[7]-v[1]*v[8], v[1]*v[5]-v[2]*v[4],\n            v[5]*v[6]-v[3]*v[8], v[0]*v[8]-v[2]*v[6], v[2]*v[3]-v[0]*v[5],\n            v[3]*v[7]-v[4]*v[6], v[1]*v[6]-v[0]*v[7], v[0]*v[4]-v[1]*v[3]\n        ).multiplyScalar( inv );\n        \n        this.relativeOrientation.invert( this.b1.orientation ).multiply( this.targetOrientation ).multiply( this.b2.orientation );\n\n        inv = this.relativeOrientation.w*2;\n\n        this.vel.copy( this.relativeOrientation ).multiplyScalar( inv );\n\n        len = this.vel.length();\n\n        if( len > 0.02 ) {\n            len = (0.02-len)/len*invTimeStep*0.05;\n            this.vel.multiplyScalar( len );\n        }else{\n            this.vel.set(0,0,0);\n        }\n\n        this.rn1.copy( this.imp ).applyMatrix3( this.ii1, true );\n        this.rn2.copy( this.imp ).applyMatrix3( this.ii2, true );\n\n        this.a1.add( this.rn1 );\n        this.a2.sub( this.rn2 );\n\n    },\n\n    solve: function () {\n\n        var r = this.a2.clone().sub( this.a1 ).sub( this.vel );\n\n        this.rn0.copy( r ).applyMatrix3( this.dd, true );\n        this.rn1.copy( this.rn0 ).applyMatrix3( this.ii1, true );\n        this.rn2.copy( this.rn0 ).applyMatrix3( this.ii2, true );\n\n        this.imp.add( this.rn0 );\n        this.a1.add( this.rn1 );\n        this.a2.sub( this.rn2 );\n\n    }\n\n} );\n\n/**\n* A three-axis translational constraint for various joints.\n* @author saharan\n*/\nfunction Translational3Constraint (joint,limitMotor1,limitMotor2,limitMotor3){\n\n    this.m1=NaN;\n    this.m2=NaN;\n    this.i1e00=NaN;\n    this.i1e01=NaN;\n    this.i1e02=NaN;\n    this.i1e10=NaN;\n    this.i1e11=NaN;\n    this.i1e12=NaN;\n    this.i1e20=NaN;\n    this.i1e21=NaN;\n    this.i1e22=NaN;\n    this.i2e00=NaN;\n    this.i2e01=NaN;\n    this.i2e02=NaN;\n    this.i2e10=NaN;\n    this.i2e11=NaN;\n    this.i2e12=NaN;\n    this.i2e20=NaN;\n    this.i2e21=NaN;\n    this.i2e22=NaN;\n    this.ax1=NaN;\n    this.ay1=NaN;\n    this.az1=NaN;\n    this.ax2=NaN;\n    this.ay2=NaN;\n    this.az2=NaN;\n    this.ax3=NaN;\n    this.ay3=NaN;\n    this.az3=NaN;\n    this.r1x=NaN;\n    this.r1y=NaN;\n    this.r1z=NaN;\n    this.r2x=NaN;\n    this.r2y=NaN;\n    this.r2z=NaN;\n    this.t1x1=NaN;// jacobians\n    this.t1y1=NaN;\n    this.t1z1=NaN;\n    this.t2x1=NaN;\n    this.t2y1=NaN;\n    this.t2z1=NaN;\n    this.l1x1=NaN;\n    this.l1y1=NaN;\n    this.l1z1=NaN;\n    this.l2x1=NaN;\n    this.l2y1=NaN;\n    this.l2z1=NaN;\n    this.a1x1=NaN;\n    this.a1y1=NaN;\n    this.a1z1=NaN;\n    this.a2x1=NaN;\n    this.a2y1=NaN;\n    this.a2z1=NaN;\n    this.t1x2=NaN;\n    this.t1y2=NaN;\n    this.t1z2=NaN;\n    this.t2x2=NaN;\n    this.t2y2=NaN;\n    this.t2z2=NaN;\n    this.l1x2=NaN;\n    this.l1y2=NaN;\n    this.l1z2=NaN;\n    this.l2x2=NaN;\n    this.l2y2=NaN;\n    this.l2z2=NaN;\n    this.a1x2=NaN;\n    this.a1y2=NaN;\n    this.a1z2=NaN;\n    this.a2x2=NaN;\n    this.a2y2=NaN;\n    this.a2z2=NaN;\n    this.t1x3=NaN;\n    this.t1y3=NaN;\n    this.t1z3=NaN;\n    this.t2x3=NaN;\n    this.t2y3=NaN;\n    this.t2z3=NaN;\n    this.l1x3=NaN;\n    this.l1y3=NaN;\n    this.l1z3=NaN;\n    this.l2x3=NaN;\n    this.l2y3=NaN;\n    this.l2z3=NaN;\n    this.a1x3=NaN;\n    this.a1y3=NaN;\n    this.a1z3=NaN;\n    this.a2x3=NaN;\n    this.a2y3=NaN;\n    this.a2z3=NaN;\n    this.lowerLimit1=NaN;\n    this.upperLimit1=NaN;\n    this.limitVelocity1=NaN;\n    this.limitState1=0; // -1: at lower, 0: locked, 1: at upper, 2: unlimited\n    this.enableMotor1=false;\n    this.motorSpeed1=NaN;\n    this.maxMotorForce1=NaN;\n    this.maxMotorImpulse1=NaN;\n    this.lowerLimit2=NaN;\n    this.upperLimit2=NaN;\n    this.limitVelocity2=NaN;\n    this.limitState2=0; // -1: at lower, 0: locked, 1: at upper, 2: unlimited\n    this.enableMotor2=false;\n    this.motorSpeed2=NaN;\n    this.maxMotorForce2=NaN;\n    this.maxMotorImpulse2=NaN;\n    this.lowerLimit3=NaN;\n    this.upperLimit3=NaN;\n    this.limitVelocity3=NaN;\n    this.limitState3=0; // -1: at lower, 0: locked, 1: at upper, 2: unlimited\n    this.enableMotor3=false;\n    this.motorSpeed3=NaN;\n    this.maxMotorForce3=NaN;\n    this.maxMotorImpulse3=NaN;\n    this.k00=NaN; // K = J*M*JT\n    this.k01=NaN;\n    this.k02=NaN;\n    this.k10=NaN;\n    this.k11=NaN;\n    this.k12=NaN;\n    this.k20=NaN;\n    this.k21=NaN;\n    this.k22=NaN;\n    this.kv00=NaN; // diagonals without CFMs\n    this.kv11=NaN;\n    this.kv22=NaN;\n    this.dv00=NaN; // ...inverted\n    this.dv11=NaN;\n    this.dv22=NaN;\n    this.d00=NaN; // K^-1\n    this.d01=NaN;\n    this.d02=NaN;\n    this.d10=NaN;\n    this.d11=NaN;\n    this.d12=NaN;\n    this.d20=NaN;\n    this.d21=NaN;\n    this.d22=NaN;\n\n    this.limitMotor1=limitMotor1;\n    this.limitMotor2=limitMotor2;\n    this.limitMotor3=limitMotor3;\n    this.b1=joint.body1;\n    this.b2=joint.body2;\n    this.p1=joint.anchorPoint1;\n    this.p2=joint.anchorPoint2;\n    this.r1=joint.relativeAnchorPoint1;\n    this.r2=joint.relativeAnchorPoint2;\n    this.l1=this.b1.linearVelocity;\n    this.l2=this.b2.linearVelocity;\n    this.a1=this.b1.angularVelocity;\n    this.a2=this.b2.angularVelocity;\n    this.i1=this.b1.inverseInertia;\n    this.i2=this.b2.inverseInertia;\n    this.limitImpulse1=0;\n    this.motorImpulse1=0;\n    this.limitImpulse2=0;\n    this.motorImpulse2=0;\n    this.limitImpulse3=0;\n    this.motorImpulse3=0;\n    this.cfm1=0;// Constraint Force Mixing\n    this.cfm2=0;\n    this.cfm3=0;\n    this.weight=-1;\n}\n\nObject.assign( Translational3Constraint.prototype, {\n\n    Translational3Constraint: true,\n\n    preSolve:function(timeStep,invTimeStep){\n        this.ax1=this.limitMotor1.axis.x;\n        this.ay1=this.limitMotor1.axis.y;\n        this.az1=this.limitMotor1.axis.z;\n        this.ax2=this.limitMotor2.axis.x;\n        this.ay2=this.limitMotor2.axis.y;\n        this.az2=this.limitMotor2.axis.z;\n        this.ax3=this.limitMotor3.axis.x;\n        this.ay3=this.limitMotor3.axis.y;\n        this.az3=this.limitMotor3.axis.z;\n        this.lowerLimit1=this.limitMotor1.lowerLimit;\n        this.upperLimit1=this.limitMotor1.upperLimit;\n        this.motorSpeed1=this.limitMotor1.motorSpeed;\n        this.maxMotorForce1=this.limitMotor1.maxMotorForce;\n        this.enableMotor1=this.maxMotorForce1>0;\n        this.lowerLimit2=this.limitMotor2.lowerLimit;\n        this.upperLimit2=this.limitMotor2.upperLimit;\n        this.motorSpeed2=this.limitMotor2.motorSpeed;\n        this.maxMotorForce2=this.limitMotor2.maxMotorForce;\n        this.enableMotor2=this.maxMotorForce2>0;\n        this.lowerLimit3=this.limitMotor3.lowerLimit;\n        this.upperLimit3=this.limitMotor3.upperLimit;\n        this.motorSpeed3=this.limitMotor3.motorSpeed;\n        this.maxMotorForce3=this.limitMotor3.maxMotorForce;\n        this.enableMotor3=this.maxMotorForce3>0;\n        this.m1=this.b1.inverseMass;\n        this.m2=this.b2.inverseMass;\n\n        var ti1 = this.i1.elements;\n        var ti2 = this.i2.elements;\n        this.i1e00=ti1[0];\n        this.i1e01=ti1[1];\n        this.i1e02=ti1[2];\n        this.i1e10=ti1[3];\n        this.i1e11=ti1[4];\n        this.i1e12=ti1[5];\n        this.i1e20=ti1[6];\n        this.i1e21=ti1[7];\n        this.i1e22=ti1[8];\n\n        this.i2e00=ti2[0];\n        this.i2e01=ti2[1];\n        this.i2e02=ti2[2];\n        this.i2e10=ti2[3];\n        this.i2e11=ti2[4];\n        this.i2e12=ti2[5];\n        this.i2e20=ti2[6];\n        this.i2e21=ti2[7];\n        this.i2e22=ti2[8];\n\n        var dx=this.p2.x-this.p1.x;\n        var dy=this.p2.y-this.p1.y;\n        var dz=this.p2.z-this.p1.z;\n        var d1=dx*this.ax1+dy*this.ay1+dz*this.az1;\n        var d2=dx*this.ax2+dy*this.ay2+dz*this.az2;\n        var d3=dx*this.ax3+dy*this.ay3+dz*this.az3;\n        var frequency1=this.limitMotor1.frequency;\n        var frequency2=this.limitMotor2.frequency;\n        var frequency3=this.limitMotor3.frequency;\n        var enableSpring1=frequency1>0;\n        var enableSpring2=frequency2>0;\n        var enableSpring3=frequency3>0;\n        var enableLimit1=this.lowerLimit1<=this.upperLimit1;\n        var enableLimit2=this.lowerLimit2<=this.upperLimit2;\n        var enableLimit3=this.lowerLimit3<=this.upperLimit3;\n\n        // for stability\n        if(enableSpring1&&d1>20||d1<-20){\n            enableSpring1=false;\n        }\n        if(enableSpring2&&d2>20||d2<-20){\n            enableSpring2=false;\n        }\n        if(enableSpring3&&d3>20||d3<-20){\n            enableSpring3=false;\n        }\n\n        if(enableLimit1){\n            if(this.lowerLimit1==this.upperLimit1){\n                if(this.limitState1!=0){\n                    this.limitState1=0;\n                    this.limitImpulse1=0;\n                }\n                this.limitVelocity1=this.lowerLimit1-d1;\n                if(!enableSpring1)d1=this.lowerLimit1;\n            }else if(d1<this.lowerLimit1){\n                if(this.limitState1!=-1){\n                    this.limitState1=-1;\n                    this.limitImpulse1=0;\n                }\n                this.limitVelocity1=this.lowerLimit1-d1;\n                if(!enableSpring1)d1=this.lowerLimit1;\n            }else if(d1>this.upperLimit1){\n                if(this.limitState1!=1){\n                    this.limitState1=1;\n                    this.limitImpulse1=0;\n                }\n                this.limitVelocity1=this.upperLimit1-d1;\n                if(!enableSpring1)d1=this.upperLimit1;\n            }else{\n                this.limitState1=2;\n                this.limitImpulse1=0;\n                this.limitVelocity1=0;\n            }\n            if(!enableSpring1){\n                if(this.limitVelocity1>0.005)this.limitVelocity1-=0.005;\n                else if(this.limitVelocity1<-0.005)this.limitVelocity1+=0.005;\n                else this.limitVelocity1=0;\n            }\n        }else{\n            this.limitState1=2;\n            this.limitImpulse1=0;\n        }\n\n        if(enableLimit2){\n            if(this.lowerLimit2==this.upperLimit2){\n                if(this.limitState2!=0){\n                    this.limitState2=0;\n                    this.limitImpulse2=0;\n                }\n                this.limitVelocity2=this.lowerLimit2-d2;\n                if(!enableSpring2)d2=this.lowerLimit2;\n            }else if(d2<this.lowerLimit2){\n                if(this.limitState2!=-1){\n                    this.limitState2=-1;\n                    this.limitImpulse2=0;\n                }\n                this.limitVelocity2=this.lowerLimit2-d2;\n                if(!enableSpring2)d2=this.lowerLimit2;\n            }else if(d2>this.upperLimit2){\n                if(this.limitState2!=1){\n                    this.limitState2=1;\n                    this.limitImpulse2=0;\n                }\n                this.limitVelocity2=this.upperLimit2-d2;\n                if(!enableSpring2)d2=this.upperLimit2;\n            }else{\n                this.limitState2=2;\n                this.limitImpulse2=0;\n                this.limitVelocity2=0;\n            }\n            if(!enableSpring2){\n                if(this.limitVelocity2>0.005)this.limitVelocity2-=0.005;\n                else if(this.limitVelocity2<-0.005)this.limitVelocity2+=0.005;\n                else this.limitVelocity2=0;\n            }\n        }else{\n            this.limitState2=2;\n            this.limitImpulse2=0;\n        }\n\n        if(enableLimit3){\n            if(this.lowerLimit3==this.upperLimit3){\n                if(this.limitState3!=0){\n                    this.limitState3=0;\n                    this.limitImpulse3=0;\n                }\n                this.limitVelocity3=this.lowerLimit3-d3;\n                if(!enableSpring3)d3=this.lowerLimit3;\n                }else if(d3<this.lowerLimit3){\n                if(this.limitState3!=-1){\n                    this.limitState3=-1;\n                    this.limitImpulse3=0;\n                }\n                this.limitVelocity3=this.lowerLimit3-d3;\n                if(!enableSpring3)d3=this.lowerLimit3;\n            }else if(d3>this.upperLimit3){\n                if(this.limitState3!=1){\n                    this.limitState3=1;\n                    this.limitImpulse3=0;\n                }\n                this.limitVelocity3=this.upperLimit3-d3;\n                if(!enableSpring3)d3=this.upperLimit3;\n            }else{\n                this.limitState3=2;\n                this.limitImpulse3=0;\n                this.limitVelocity3=0;\n            }\n            if(!enableSpring3){\n                if(this.limitVelocity3>0.005)this.limitVelocity3-=0.005;\n                else if(this.limitVelocity3<-0.005)this.limitVelocity3+=0.005;\n                else this.limitVelocity3=0;\n            }\n        }else{\n            this.limitState3=2;\n            this.limitImpulse3=0;\n        }\n\n        if(this.enableMotor1&&(this.limitState1!=0||enableSpring1)){\n            this.maxMotorImpulse1=this.maxMotorForce1*timeStep;\n        }else{\n            this.motorImpulse1=0;\n            this.maxMotorImpulse1=0;\n        }\n\n        if(this.enableMotor2&&(this.limitState2!=0||enableSpring2)){\n            this.maxMotorImpulse2=this.maxMotorForce2*timeStep;\n        }else{\n            this.motorImpulse2=0;\n            this.maxMotorImpulse2=0;\n        }\n\n        if(this.enableMotor3&&(this.limitState3!=0||enableSpring3)){\n            this.maxMotorImpulse3=this.maxMotorForce3*timeStep;\n        }else{\n            this.motorImpulse3=0;\n            this.maxMotorImpulse3=0;\n        }\n        \n        var rdx=d1*this.ax1+d2*this.ax2+d3*this.ax2;\n        var rdy=d1*this.ay1+d2*this.ay2+d3*this.ay2;\n        var rdz=d1*this.az1+d2*this.az2+d3*this.az2;\n        var w1=this.m2/(this.m1+this.m2);\n        if(this.weight>=0)w1=this.weight; // use given weight\n        var w2=1-w1;\n        this.r1x=this.r1.x+rdx*w1;\n        this.r1y=this.r1.y+rdy*w1;\n        this.r1z=this.r1.z+rdz*w1;\n        this.r2x=this.r2.x-rdx*w2;\n        this.r2y=this.r2.y-rdy*w2;\n        this.r2z=this.r2.z-rdz*w2;\n\n        // build jacobians\n        this.t1x1=this.r1y*this.az1-this.r1z*this.ay1;\n        this.t1y1=this.r1z*this.ax1-this.r1x*this.az1;\n        this.t1z1=this.r1x*this.ay1-this.r1y*this.ax1;\n        this.t2x1=this.r2y*this.az1-this.r2z*this.ay1;\n        this.t2y1=this.r2z*this.ax1-this.r2x*this.az1;\n        this.t2z1=this.r2x*this.ay1-this.r2y*this.ax1;\n        this.l1x1=this.ax1*this.m1;\n        this.l1y1=this.ay1*this.m1;\n        this.l1z1=this.az1*this.m1;\n        this.l2x1=this.ax1*this.m2;\n        this.l2y1=this.ay1*this.m2;\n        this.l2z1=this.az1*this.m2;\n        this.a1x1=this.t1x1*this.i1e00+this.t1y1*this.i1e01+this.t1z1*this.i1e02;\n        this.a1y1=this.t1x1*this.i1e10+this.t1y1*this.i1e11+this.t1z1*this.i1e12;\n        this.a1z1=this.t1x1*this.i1e20+this.t1y1*this.i1e21+this.t1z1*this.i1e22;\n        this.a2x1=this.t2x1*this.i2e00+this.t2y1*this.i2e01+this.t2z1*this.i2e02;\n        this.a2y1=this.t2x1*this.i2e10+this.t2y1*this.i2e11+this.t2z1*this.i2e12;\n        this.a2z1=this.t2x1*this.i2e20+this.t2y1*this.i2e21+this.t2z1*this.i2e22;\n\n        this.t1x2=this.r1y*this.az2-this.r1z*this.ay2;\n        this.t1y2=this.r1z*this.ax2-this.r1x*this.az2;\n        this.t1z2=this.r1x*this.ay2-this.r1y*this.ax2;\n        this.t2x2=this.r2y*this.az2-this.r2z*this.ay2;\n        this.t2y2=this.r2z*this.ax2-this.r2x*this.az2;\n        this.t2z2=this.r2x*this.ay2-this.r2y*this.ax2;\n        this.l1x2=this.ax2*this.m1;\n        this.l1y2=this.ay2*this.m1;\n        this.l1z2=this.az2*this.m1;\n        this.l2x2=this.ax2*this.m2;\n        this.l2y2=this.ay2*this.m2;\n        this.l2z2=this.az2*this.m2;\n        this.a1x2=this.t1x2*this.i1e00+this.t1y2*this.i1e01+this.t1z2*this.i1e02;\n        this.a1y2=this.t1x2*this.i1e10+this.t1y2*this.i1e11+this.t1z2*this.i1e12;\n        this.a1z2=this.t1x2*this.i1e20+this.t1y2*this.i1e21+this.t1z2*this.i1e22;\n        this.a2x2=this.t2x2*this.i2e00+this.t2y2*this.i2e01+this.t2z2*this.i2e02;\n        this.a2y2=this.t2x2*this.i2e10+this.t2y2*this.i2e11+this.t2z2*this.i2e12;\n        this.a2z2=this.t2x2*this.i2e20+this.t2y2*this.i2e21+this.t2z2*this.i2e22;\n\n        this.t1x3=this.r1y*this.az3-this.r1z*this.ay3;\n        this.t1y3=this.r1z*this.ax3-this.r1x*this.az3;\n        this.t1z3=this.r1x*this.ay3-this.r1y*this.ax3;\n        this.t2x3=this.r2y*this.az3-this.r2z*this.ay3;\n        this.t2y3=this.r2z*this.ax3-this.r2x*this.az3;\n        this.t2z3=this.r2x*this.ay3-this.r2y*this.ax3;\n        this.l1x3=this.ax3*this.m1;\n        this.l1y3=this.ay3*this.m1;\n        this.l1z3=this.az3*this.m1;\n        this.l2x3=this.ax3*this.m2;\n        this.l2y3=this.ay3*this.m2;\n        this.l2z3=this.az3*this.m2;\n        this.a1x3=this.t1x3*this.i1e00+this.t1y3*this.i1e01+this.t1z3*this.i1e02;\n        this.a1y3=this.t1x3*this.i1e10+this.t1y3*this.i1e11+this.t1z3*this.i1e12;\n        this.a1z3=this.t1x3*this.i1e20+this.t1y3*this.i1e21+this.t1z3*this.i1e22;\n        this.a2x3=this.t2x3*this.i2e00+this.t2y3*this.i2e01+this.t2z3*this.i2e02;\n        this.a2y3=this.t2x3*this.i2e10+this.t2y3*this.i2e11+this.t2z3*this.i2e12;\n        this.a2z3=this.t2x3*this.i2e20+this.t2y3*this.i2e21+this.t2z3*this.i2e22;\n\n        // build an impulse matrix\n        var m12=this.m1+this.m2;\n        this.k00=(this.ax1*this.ax1+this.ay1*this.ay1+this.az1*this.az1)*m12;\n        this.k01=(this.ax1*this.ax2+this.ay1*this.ay2+this.az1*this.az2)*m12;\n        this.k02=(this.ax1*this.ax3+this.ay1*this.ay3+this.az1*this.az3)*m12;\n        this.k10=(this.ax2*this.ax1+this.ay2*this.ay1+this.az2*this.az1)*m12;\n        this.k11=(this.ax2*this.ax2+this.ay2*this.ay2+this.az2*this.az2)*m12;\n        this.k12=(this.ax2*this.ax3+this.ay2*this.ay3+this.az2*this.az3)*m12;\n        this.k20=(this.ax3*this.ax1+this.ay3*this.ay1+this.az3*this.az1)*m12;\n        this.k21=(this.ax3*this.ax2+this.ay3*this.ay2+this.az3*this.az2)*m12;\n        this.k22=(this.ax3*this.ax3+this.ay3*this.ay3+this.az3*this.az3)*m12;\n\n        this.k00+=this.t1x1*this.a1x1+this.t1y1*this.a1y1+this.t1z1*this.a1z1;\n        this.k01+=this.t1x1*this.a1x2+this.t1y1*this.a1y2+this.t1z1*this.a1z2;\n        this.k02+=this.t1x1*this.a1x3+this.t1y1*this.a1y3+this.t1z1*this.a1z3;\n        this.k10+=this.t1x2*this.a1x1+this.t1y2*this.a1y1+this.t1z2*this.a1z1;\n        this.k11+=this.t1x2*this.a1x2+this.t1y2*this.a1y2+this.t1z2*this.a1z2;\n        this.k12+=this.t1x2*this.a1x3+this.t1y2*this.a1y3+this.t1z2*this.a1z3;\n        this.k20+=this.t1x3*this.a1x1+this.t1y3*this.a1y1+this.t1z3*this.a1z1;\n        this.k21+=this.t1x3*this.a1x2+this.t1y3*this.a1y2+this.t1z3*this.a1z2;\n        this.k22+=this.t1x3*this.a1x3+this.t1y3*this.a1y3+this.t1z3*this.a1z3;\n\n        this.k00+=this.t2x1*this.a2x1+this.t2y1*this.a2y1+this.t2z1*this.a2z1;\n        this.k01+=this.t2x1*this.a2x2+this.t2y1*this.a2y2+this.t2z1*this.a2z2;\n        this.k02+=this.t2x1*this.a2x3+this.t2y1*this.a2y3+this.t2z1*this.a2z3;\n        this.k10+=this.t2x2*this.a2x1+this.t2y2*this.a2y1+this.t2z2*this.a2z1;\n        this.k11+=this.t2x2*this.a2x2+this.t2y2*this.a2y2+this.t2z2*this.a2z2;\n        this.k12+=this.t2x2*this.a2x3+this.t2y2*this.a2y3+this.t2z2*this.a2z3;\n        this.k20+=this.t2x3*this.a2x1+this.t2y3*this.a2y1+this.t2z3*this.a2z1;\n        this.k21+=this.t2x3*this.a2x2+this.t2y3*this.a2y2+this.t2z3*this.a2z2;\n        this.k22+=this.t2x3*this.a2x3+this.t2y3*this.a2y3+this.t2z3*this.a2z3;\n\n        this.kv00=this.k00;\n        this.kv11=this.k11;\n        this.kv22=this.k22;\n\n        this.dv00=1/this.kv00;\n        this.dv11=1/this.kv11;\n        this.dv22=1/this.kv22;\n\n        if(enableSpring1&&this.limitState1!=2){\n            var omega=6.2831853*frequency1;\n            var k=omega*omega*timeStep;\n            var dmp=invTimeStep/(k+2*this.limitMotor1.dampingRatio*omega);\n            this.cfm1=this.kv00*dmp;\n            this.limitVelocity1*=k*dmp;\n        }else{\n            this.cfm1=0;\n            this.limitVelocity1*=invTimeStep*0.05;\n        }\n        if(enableSpring2&&this.limitState2!=2){\n            omega=6.2831853*frequency2;\n            k=omega*omega*timeStep;\n            dmp=invTimeStep/(k+2*this.limitMotor2.dampingRatio*omega);\n            this.cfm2=this.kv11*dmp;\n            this.limitVelocity2*=k*dmp;\n        }else{\n            this.cfm2=0;\n            this.limitVelocity2*=invTimeStep*0.05;\n        }\n        if(enableSpring3&&this.limitState3!=2){\n            omega=6.2831853*frequency3;\n            k=omega*omega*timeStep;\n            dmp=invTimeStep/(k+2*this.limitMotor3.dampingRatio*omega);\n            this.cfm3=this.kv22*dmp;\n            this.limitVelocity3*=k*dmp;\n        }else{\n            this.cfm3=0;\n            this.limitVelocity3*=invTimeStep*0.05;\n        }\n        this.k00+=this.cfm1;\n        this.k11+=this.cfm2;\n        this.k22+=this.cfm3;\n\n        var inv=1/(\n        this.k00*(this.k11*this.k22-this.k21*this.k12)+\n        this.k10*(this.k21*this.k02-this.k01*this.k22)+\n        this.k20*(this.k01*this.k12-this.k11*this.k02)\n        );\n        this.d00=(this.k11*this.k22-this.k12*this.k21)*inv;\n        this.d01=(this.k02*this.k21-this.k01*this.k22)*inv;\n        this.d02=(this.k01*this.k12-this.k02*this.k11)*inv;\n        this.d10=(this.k12*this.k20-this.k10*this.k22)*inv;\n        this.d11=(this.k00*this.k22-this.k02*this.k20)*inv;\n        this.d12=(this.k02*this.k10-this.k00*this.k12)*inv;\n        this.d20=(this.k10*this.k21-this.k11*this.k20)*inv;\n        this.d21=(this.k01*this.k20-this.k00*this.k21)*inv;\n        this.d22=(this.k00*this.k11-this.k01*this.k10)*inv;\n\n        // warm starting\n        var totalImpulse1=this.limitImpulse1+this.motorImpulse1;\n        var totalImpulse2=this.limitImpulse2+this.motorImpulse2;\n        var totalImpulse3=this.limitImpulse3+this.motorImpulse3;\n        this.l1.x+=totalImpulse1*this.l1x1+totalImpulse2*this.l1x2+totalImpulse3*this.l1x3;\n        this.l1.y+=totalImpulse1*this.l1y1+totalImpulse2*this.l1y2+totalImpulse3*this.l1y3;\n        this.l1.z+=totalImpulse1*this.l1z1+totalImpulse2*this.l1z2+totalImpulse3*this.l1z3;\n        this.a1.x+=totalImpulse1*this.a1x1+totalImpulse2*this.a1x2+totalImpulse3*this.a1x3;\n        this.a1.y+=totalImpulse1*this.a1y1+totalImpulse2*this.a1y2+totalImpulse3*this.a1y3;\n        this.a1.z+=totalImpulse1*this.a1z1+totalImpulse2*this.a1z2+totalImpulse3*this.a1z3;\n        this.l2.x-=totalImpulse1*this.l2x1+totalImpulse2*this.l2x2+totalImpulse3*this.l2x3;\n        this.l2.y-=totalImpulse1*this.l2y1+totalImpulse2*this.l2y2+totalImpulse3*this.l2y3;\n        this.l2.z-=totalImpulse1*this.l2z1+totalImpulse2*this.l2z2+totalImpulse3*this.l2z3;\n        this.a2.x-=totalImpulse1*this.a2x1+totalImpulse2*this.a2x2+totalImpulse3*this.a2x3;\n        this.a2.y-=totalImpulse1*this.a2y1+totalImpulse2*this.a2y2+totalImpulse3*this.a2y3;\n        this.a2.z-=totalImpulse1*this.a2z1+totalImpulse2*this.a2z2+totalImpulse3*this.a2z3;\n    },\n\n    solve:function(){\n        var rvx=this.l2.x-this.l1.x+this.a2.y*this.r2z-this.a2.z*this.r2y-this.a1.y*this.r1z+this.a1.z*this.r1y;\n        var rvy=this.l2.y-this.l1.y+this.a2.z*this.r2x-this.a2.x*this.r2z-this.a1.z*this.r1x+this.a1.x*this.r1z;\n        var rvz=this.l2.z-this.l1.z+this.a2.x*this.r2y-this.a2.y*this.r2x-this.a1.x*this.r1y+this.a1.y*this.r1x;\n        var rvn1=rvx*this.ax1+rvy*this.ay1+rvz*this.az1;\n        var rvn2=rvx*this.ax2+rvy*this.ay2+rvz*this.az2;\n        var rvn3=rvx*this.ax3+rvy*this.ay3+rvz*this.az3;\n        var oldMotorImpulse1=this.motorImpulse1;\n        var oldMotorImpulse2=this.motorImpulse2;\n        var oldMotorImpulse3=this.motorImpulse3;\n        var dMotorImpulse1=0;\n        var dMotorImpulse2=0;\n        var dMotorImpulse3=0;\n        if(this.enableMotor1){\n            dMotorImpulse1=(rvn1-this.motorSpeed1)*this.dv00;\n            this.motorImpulse1+=dMotorImpulse1;\n            if(this.motorImpulse1>this.maxMotorImpulse1){ // clamp motor impulse\n                this.motorImpulse1=this.maxMotorImpulse1;\n            }else if(this.motorImpulse1<-this.maxMotorImpulse1){\n                this.motorImpulse1=-this.maxMotorImpulse1;\n            }\n            dMotorImpulse1=this.motorImpulse1-oldMotorImpulse1;\n        }\n        if(this.enableMotor2){\n            dMotorImpulse2=(rvn2-this.motorSpeed2)*this.dv11;\n            this.motorImpulse2+=dMotorImpulse2;\n            if(this.motorImpulse2>this.maxMotorImpulse2){ // clamp motor impulse\n                this.motorImpulse2=this.maxMotorImpulse2;\n            }else if(this.motorImpulse2<-this.maxMotorImpulse2){\n                this.motorImpulse2=-this.maxMotorImpulse2;\n            }\n            dMotorImpulse2=this.motorImpulse2-oldMotorImpulse2;\n        }\n        if(this.enableMotor3){\n            dMotorImpulse3=(rvn3-this.motorSpeed3)*this.dv22;\n            this.motorImpulse3+=dMotorImpulse3;\n            if(this.motorImpulse3>this.maxMotorImpulse3){ // clamp motor impulse\n                this.motorImpulse3=this.maxMotorImpulse3;\n            }else if(this.motorImpulse3<-this.maxMotorImpulse3){\n                this.motorImpulse3=-this.maxMotorImpulse3;\n            }\n            dMotorImpulse3=this.motorImpulse3-oldMotorImpulse3;\n        }\n\n        // apply motor impulse to relative velocity\n        rvn1+=dMotorImpulse1*this.kv00+dMotorImpulse2*this.k01+dMotorImpulse3*this.k02;\n        rvn2+=dMotorImpulse1*this.k10+dMotorImpulse2*this.kv11+dMotorImpulse3*this.k12;\n        rvn3+=dMotorImpulse1*this.k20+dMotorImpulse2*this.k21+dMotorImpulse3*this.kv22;\n\n        // subtract target velocity and applied impulse\n        rvn1-=this.limitVelocity1+this.limitImpulse1*this.cfm1;\n        rvn2-=this.limitVelocity2+this.limitImpulse2*this.cfm2;\n        rvn3-=this.limitVelocity3+this.limitImpulse3*this.cfm3;\n\n        var oldLimitImpulse1=this.limitImpulse1;\n        var oldLimitImpulse2=this.limitImpulse2;\n        var oldLimitImpulse3=this.limitImpulse3;\n\n        var dLimitImpulse1=rvn1*this.d00+rvn2*this.d01+rvn3*this.d02;\n        var dLimitImpulse2=rvn1*this.d10+rvn2*this.d11+rvn3*this.d12;\n        var dLimitImpulse3=rvn1*this.d20+rvn2*this.d21+rvn3*this.d22;\n\n        this.limitImpulse1+=dLimitImpulse1;\n        this.limitImpulse2+=dLimitImpulse2;\n        this.limitImpulse3+=dLimitImpulse3;\n\n        // clamp\n        var clampState=0;\n        if(this.limitState1==2||this.limitImpulse1*this.limitState1<0){\n            dLimitImpulse1=-oldLimitImpulse1;\n            rvn2+=dLimitImpulse1*this.k10;\n            rvn3+=dLimitImpulse1*this.k20;\n            clampState|=1;\n        }\n        if(this.limitState2==2||this.limitImpulse2*this.limitState2<0){\n            dLimitImpulse2=-oldLimitImpulse2;\n            rvn1+=dLimitImpulse2*this.k01;\n            rvn3+=dLimitImpulse2*this.k21;\n            clampState|=2;\n        }\n        if(this.limitState3==2||this.limitImpulse3*this.limitState3<0){\n            dLimitImpulse3=-oldLimitImpulse3;\n            rvn1+=dLimitImpulse3*this.k02;\n            rvn2+=dLimitImpulse3*this.k12;\n            clampState|=4;\n        }\n\n        // update un-clamped impulse\n        // TODO: isolate division\n        var det;\n        switch(clampState){\n            case 1:// update 2 3\n            det=1/(this.k11*this.k22-this.k12*this.k21);\n            dLimitImpulse2=(this.k22*rvn2+-this.k12*rvn3)*det;\n            dLimitImpulse3=(-this.k21*rvn2+this.k11*rvn3)*det;\n            break;\n            case 2:// update 1 3\n            det=1/(this.k00*this.k22-this.k02*this.k20);\n            dLimitImpulse1=(this.k22*rvn1+-this.k02*rvn3)*det;\n            dLimitImpulse3=(-this.k20*rvn1+this.k00*rvn3)*det;\n            break;\n            case 3:// update 3\n            dLimitImpulse3=rvn3/this.k22;\n            break;\n            case 4:// update 1 2\n            det=1/(this.k00*this.k11-this.k01*this.k10);\n            dLimitImpulse1=(this.k11*rvn1+-this.k01*rvn2)*det;\n            dLimitImpulse2=(-this.k10*rvn1+this.k00*rvn2)*det;\n            break;\n            case 5:// update 2\n            dLimitImpulse2=rvn2/this.k11;\n            break;\n            case 6:// update 1\n            dLimitImpulse1=rvn1/this.k00;\n            break;\n        }\n\n        this.limitImpulse1=oldLimitImpulse1+dLimitImpulse1;\n        this.limitImpulse2=oldLimitImpulse2+dLimitImpulse2;\n        this.limitImpulse3=oldLimitImpulse3+dLimitImpulse3;\n\n        var dImpulse1=dMotorImpulse1+dLimitImpulse1;\n        var dImpulse2=dMotorImpulse2+dLimitImpulse2;\n        var dImpulse3=dMotorImpulse3+dLimitImpulse3;\n\n        // apply impulse\n        this.l1.x+=dImpulse1*this.l1x1+dImpulse2*this.l1x2+dImpulse3*this.l1x3;\n        this.l1.y+=dImpulse1*this.l1y1+dImpulse2*this.l1y2+dImpulse3*this.l1y3;\n        this.l1.z+=dImpulse1*this.l1z1+dImpulse2*this.l1z2+dImpulse3*this.l1z3;\n        this.a1.x+=dImpulse1*this.a1x1+dImpulse2*this.a1x2+dImpulse3*this.a1x3;\n        this.a1.y+=dImpulse1*this.a1y1+dImpulse2*this.a1y2+dImpulse3*this.a1y3;\n        this.a1.z+=dImpulse1*this.a1z1+dImpulse2*this.a1z2+dImpulse3*this.a1z3;\n        this.l2.x-=dImpulse1*this.l2x1+dImpulse2*this.l2x2+dImpulse3*this.l2x3;\n        this.l2.y-=dImpulse1*this.l2y1+dImpulse2*this.l2y2+dImpulse3*this.l2y3;\n        this.l2.z-=dImpulse1*this.l2z1+dImpulse2*this.l2z2+dImpulse3*this.l2z3;\n        this.a2.x-=dImpulse1*this.a2x1+dImpulse2*this.a2x2+dImpulse3*this.a2x3;\n        this.a2.y-=dImpulse1*this.a2y1+dImpulse2*this.a2y2+dImpulse3*this.a2y3;\n        this.a2.z-=dImpulse1*this.a2z1+dImpulse2*this.a2z2+dImpulse3*this.a2z3;\n    }\n    \n} );\n\n/**\n * A prismatic joint allows only for relative translation of rigid bodies along the axis.\n *\n * @author saharan\n * @author lo-th\n */\n\nfunction PrismaticJoint( config, lowerTranslation, upperTranslation ){\n\n    Joint.call( this, config );\n\n    this.type = JOINT_PRISMATIC;\n\n    // The axis in the first body's coordinate system.\n    this.localAxis1 = config.localAxis1.clone().normalize();\n    // The axis in the second body's coordinate system.\n    this.localAxis2 = config.localAxis2.clone().normalize();\n\n    this.ax1 = new Vec3();\n    this.ax2 = new Vec3();\n    \n    this.nor = new Vec3();\n    this.tan = new Vec3();\n    this.bin = new Vec3();\n\n    this.ac = new AngularConstraint( this, new Quat().setFromUnitVectors( this.localAxis1, this.localAxis2 ) );\n\n    // The translational limit and motor information of the joint.\n    this.limitMotor = new LimitMotor( this.nor, true );\n    this.limitMotor.lowerLimit = lowerTranslation;\n    this.limitMotor.upperLimit = upperTranslation;\n    this.t3 = new Translational3Constraint( this, this.limitMotor, new LimitMotor( this.tan, true ), new LimitMotor( this.bin, true ) );\n\n}\n\nPrismaticJoint.prototype = Object.assign( Object.create( Joint.prototype ), {\n\n    constructor: PrismaticJoint,\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n        this.updateAnchorPoints();\n\n        this.ax1.copy( this.localAxis1 ).applyMatrix3( this.body1.rotation, true );\n        this.ax2.copy( this.localAxis2 ).applyMatrix3( this.body2.rotation, true );\n\n        // normal tangent binormal\n\n        this.nor.set(\n            this.ax1.x*this.body2.inverseMass + this.ax2.x*this.body1.inverseMass,\n            this.ax1.y*this.body2.inverseMass + this.ax2.y*this.body1.inverseMass,\n            this.ax1.z*this.body2.inverseMass + this.ax2.z*this.body1.inverseMass\n        ).normalize();\n        this.tan.tangent( this.nor ).normalize();\n        this.bin.crossVectors( this.nor, this.tan );\n\n        // preSolve\n\n        this.ac.preSolve( timeStep, invTimeStep );\n        this.t3.preSolve( timeStep, invTimeStep );\n\n    },\n\n    solve: function () {\n\n        this.ac.solve();\n        this.t3.solve();\n        \n    },\n\n    postSolve: function () {\n\n    }\n\n});\n\n/**\n * A slider joint allows for relative translation and relative rotation between two rigid bodies along the axis.\n *\n * @author saharan\n * @author lo-th\n */\n\nfunction SliderJoint( config, lowerTranslation, upperTranslation ){\n\n    Joint.call( this, config );\n\n    this.type = JOINT_SLIDER;\n\n    // The axis in the first body's coordinate system.\n    this.localAxis1 = config.localAxis1.clone().normalize();\n    // The axis in the second body's coordinate system.\n    this.localAxis2 = config.localAxis2.clone().normalize();\n\n    // make angle axis\n    var arc = new Mat33().setQuat( new Quat().setFromUnitVectors( this.localAxis1, this.localAxis2 ) );\n    this.localAngle1 = new Vec3().tangent( this.localAxis1 ).normalize();\n    this.localAngle2 = this.localAngle1.clone().applyMatrix3( arc, true );\n\n    this.ax1 = new Vec3();\n    this.ax2 = new Vec3();\n    this.an1 = new Vec3();\n    this.an2 = new Vec3();\n\n    this.tmp = new Vec3();\n    \n    this.nor = new Vec3();\n    this.tan = new Vec3();\n    this.bin = new Vec3();\n\n    // The limit and motor for the rotation\n    this.rotationalLimitMotor = new LimitMotor( this.nor, false );\n    this.r3 = new Rotational3Constraint( this, this.rotationalLimitMotor, new LimitMotor( this.tan, true ), new LimitMotor( this.bin, true ) );\n\n    // The limit and motor for the translation.\n    this.translationalLimitMotor = new LimitMotor( this.nor, true );\n    this.translationalLimitMotor.lowerLimit = lowerTranslation;\n    this.translationalLimitMotor.upperLimit = upperTranslation;\n    this.t3 = new Translational3Constraint( this, this.translationalLimitMotor, new LimitMotor( this.tan, true ), new LimitMotor( this.bin, true ) );\n\n}\n\nSliderJoint.prototype = Object.assign( Object.create( Joint.prototype ), {\n\n    constructor: SliderJoint,\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n        this.updateAnchorPoints();\n\n        this.ax1.copy( this.localAxis1 ).applyMatrix3( this.body1.rotation, true );\n        this.an1.copy( this.localAngle1 ).applyMatrix3( this.body1.rotation, true );\n\n        this.ax2.copy( this.localAxis2 ).applyMatrix3( this.body2.rotation, true );\n        this.an2.copy( this.localAngle2 ).applyMatrix3( this.body2.rotation, true );\n\n        // normal tangent binormal\n\n        this.nor.set(\n            this.ax1.x*this.body2.inverseMass + this.ax2.x*this.body1.inverseMass,\n            this.ax1.y*this.body2.inverseMass + this.ax2.y*this.body1.inverseMass,\n            this.ax1.z*this.body2.inverseMass + this.ax2.z*this.body1.inverseMass\n        ).normalize();\n        this.tan.tangent( this.nor ).normalize();\n        this.bin.crossVectors( this.nor, this.tan );\n\n        // calculate hinge angle\n\n        this.tmp.crossVectors( this.an1, this.an2 );\n\n        var limite = _Math.acosClamp( _Math.dotVectors( this.an1, this.an2 ) );\n\n        if( _Math.dotVectors( this.nor, this.tmp ) < 0 ) this.rotationalLimitMotor.angle = -limite;\n        else this.rotationalLimitMotor.angle = limite;\n\n        // angular error\n\n        this.tmp.crossVectors( this.ax1, this.ax2 );\n        this.r3.limitMotor2.angle = _Math.dotVectors( this.tan, this.tmp );\n        this.r3.limitMotor3.angle = _Math.dotVectors( this.bin, this.tmp );\n\n        // preSolve\n        \n        this.r3.preSolve( timeStep, invTimeStep );\n        this.t3.preSolve( timeStep, invTimeStep );\n\n    },\n\n    solve: function () {\n\n        this.r3.solve();\n        this.t3.solve();\n\n    },\n\n    postSolve: function () {\n\n    }\n\n});\n\n/**\n * A wheel joint allows for relative rotation between two rigid bodies along two axes.\n * The wheel joint also allows for relative translation for the suspension.\n *\n * @author saharan\n * @author lo-th\n */\n\nfunction WheelJoint ( config ){\n\n    Joint.call( this, config );\n\n    this.type = JOINT_WHEEL;\n\n    // The axis in the first body's coordinate system.\n    this.localAxis1 = config.localAxis1.clone().normalize();\n    // The axis in the second body's coordinate system.\n    this.localAxis2 = config.localAxis2.clone().normalize();\n\n    this.localAngle1 = new Vec3();\n    this.localAngle2 = new Vec3();\n\n    var dot = _Math.dotVectors( this.localAxis1, this.localAxis2 );\n\n    if( dot > -1 && dot < 1 ){\n\n        this.localAngle1.set(\n            this.localAxis2.x - dot*this.localAxis1.x,\n            this.localAxis2.y - dot*this.localAxis1.y,\n            this.localAxis2.z - dot*this.localAxis1.z\n        ).normalize();\n\n        this.localAngle2.set(\n            this.localAxis1.x - dot*this.localAxis2.x,\n            this.localAxis1.y - dot*this.localAxis2.y,\n            this.localAxis1.z - dot*this.localAxis2.z\n        ).normalize();\n\n    } else {\n\n        var arc = new Mat33().setQuat( new Quat().setFromUnitVectors( this.localAxis1, this.localAxis2 ) );\n        this.localAngle1.tangent( this.localAxis1 ).normalize();\n        this.localAngle2 = this.localAngle1.clone().applyMatrix3( arc, true );\n\n    }\n\n    this.ax1 = new Vec3();\n    this.ax2 = new Vec3();\n    this.an1 = new Vec3();\n    this.an2 = new Vec3();\n\n    this.tmp = new Vec3();\n\n    this.nor = new Vec3();\n    this.tan = new Vec3();\n    this.bin = new Vec3();\n\n    // The translational limit and motor information of the joint.\n    this.translationalLimitMotor = new LimitMotor( this.tan,true );\n    this.translationalLimitMotor.frequency = 8;\n    this.translationalLimitMotor.dampingRatio = 1;\n    // The first rotational limit and motor information of the joint.\n    this.rotationalLimitMotor1 = new LimitMotor( this.tan, false );\n    // The second rotational limit and motor information of the joint.\n    this.rotationalLimitMotor2 = new LimitMotor( this.bin, false );\n\n    this.t3 = new Translational3Constraint( this, new LimitMotor( this.nor, true ),this.translationalLimitMotor,new LimitMotor( this.bin, true ));\n    this.t3.weight = 1;\n    this.r3 = new Rotational3Constraint(this,new LimitMotor( this.nor, true ),this.rotationalLimitMotor1,this.rotationalLimitMotor2);\n\n}\n\nWheelJoint.prototype = Object.assign( Object.create( Joint.prototype ), {\n\n    constructor: WheelJoint,\n\n    preSolve: function ( timeStep, invTimeStep ) {\n\n        this.updateAnchorPoints();\n\n        this.ax1.copy( this.localAxis1 ).applyMatrix3( this.body1.rotation, true );\n        this.an1.copy( this.localAngle1 ).applyMatrix3( this.body1.rotation, true );\n\n        this.ax2.copy( this.localAxis2 ).applyMatrix3( this.body2.rotation, true );\n        this.an2.copy( this.localAngle2 ).applyMatrix3( this.body2.rotation, true );\n\n        this.r3.limitMotor1.angle = _Math.dotVectors( this.ax1, this.ax2 );\n\n        var limite = _Math.dotVectors( this.an1, this.ax2 );\n\n        if( _Math.dotVectors( this.ax1, this.tmp.crossVectors( this.an1, this.ax2 ) ) < 0 ) this.rotationalLimitMotor1.angle = -limite;\n        else this.rotationalLimitMotor1.angle = limite;\n\n        limite = _Math.dotVectors( this.an2, this.ax1 );\n\n        if( _Math.dotVectors( this.ax2, this.tmp.crossVectors( this.an2, this.ax1 ) ) < 0 ) this.rotationalLimitMotor2.angle = -limite;\n        else this.rotationalLimitMotor2.angle = limite;\n\n        this.nor.crossVectors( this.ax1, this.ax2 ).normalize();\n        this.tan.crossVectors( this.nor, this.ax2 ).normalize();\n        this.bin.crossVectors( this.nor, this.ax1 ).normalize();\n        \n        this.r3.preSolve(timeStep,invTimeStep);\n        this.t3.preSolve(timeStep,invTimeStep);\n\n    },\n\n    solve: function () {\n\n        this.r3.solve();\n        this.t3.solve();\n\n    },\n\n    postSolve: function () {\n\n    }\n\n});\n\nfunction JointConfig(){\r\n\r\n    this.scale = 1;\r\n    this.invScale = 1;\r\n\r\n    // The first rigid body of the joint.\r\n    this.body1 = null;\r\n    // The second rigid body of the joint.\r\n    this.body2 = null;\r\n    // The anchor point on the first rigid body in local coordinate system.\r\n    this.localAnchorPoint1 = new Vec3();\r\n    //  The anchor point on the second rigid body in local coordinate system.\r\n    this.localAnchorPoint2 = new Vec3();\r\n    // The axis in the first body's coordinate system.\r\n    // his property is available in some joints.\r\n    this.localAxis1 = new Vec3();\r\n    // The axis in the second body's coordinate system.\r\n    // This property is available in some joints.\r\n    this.localAxis2 = new Vec3();\r\n    //  Whether allow collision between connected rigid bodies or not.\r\n    this.allowCollision = false;\r\n\r\n}\n\n/**\r\n * This class holds mass information of a shape.\r\n * @author lo-th\r\n * @author saharan\r\n */\r\n\r\nfunction MassInfo (){\r\n\r\n    // Mass of the shape.\r\n    this.mass = 0;\r\n\r\n    // The moment inertia of the shape.\r\n    this.inertia = new Mat33();\r\n\r\n}\n\n/**\n* A link list of contacts.\n* @author saharan\n*/\nfunction ContactLink ( contact ){\n    \n\t// The previous contact link.\n    this.prev = null;\n    // The next contact link.\n    this.next = null;\n    // The shape of the contact.\n    this.shape = null;\n    // The other rigid body.\n    this.body = null;\n    // The contact of the link.\n    this.contact = contact;\n\n}\n\nfunction ImpulseDataBuffer (){\n\n    this.lp1X = NaN;\n    this.lp1Y = NaN;\n    this.lp1Z = NaN;\n    this.lp2X = NaN;\n    this.lp2Y = NaN;\n    this.lp2Z = NaN;\n    this.impulse = NaN;\n\n}\n\n/**\n* The class holds details of the contact point.\n* @author saharan\n*/\n\nfunction ManifoldPoint(){\n\n    // Whether this manifold point is persisting or not.\n    this.warmStarted = false;\n    //  The position of this manifold point.\n    this.position = new Vec3();\n    // The position in the first shape's coordinate.\n    this.localPoint1 = new Vec3();\n    //  The position in the second shape's coordinate.\n    this.localPoint2 = new Vec3();\n    // The normal vector of this manifold point.\n    this.normal = new Vec3();\n    // The tangent vector of this manifold point.\n    this.tangent = new Vec3();\n    // The binormal vector of this manifold point.\n    this.binormal = new Vec3();\n    // The impulse in normal direction.\n    this.normalImpulse = 0;\n    // The impulse in tangent direction.\n    this.tangentImpulse = 0;\n    // The impulse in binormal direction.\n    this.binormalImpulse = 0;\n    // The denominator in normal direction.\n    this.normalDenominator = 0;\n    // The denominator in tangent direction.\n    this.tangentDenominator = 0;\n    // The denominator in binormal direction.\n    this.binormalDenominator = 0;\n    // The depth of penetration.\n    this.penetration = 0;\n\n}\n\n/**\n* A contact manifold between two shapes.\n* @author saharan\n* @author lo-th\n*/\n\nfunction ContactManifold () {\n\n    // The first rigid body.\n    this.body1 = null;\n    // The second rigid body.\n    this.body2 = null;\n    // The number of manifold points.\n    this.numPoints = 0;\n    // The manifold points.\n    this.points = [\n        new ManifoldPoint(),\n        new ManifoldPoint(),\n        new ManifoldPoint(),\n        new ManifoldPoint()\n    ];\n\n}\n\nContactManifold.prototype = {\n\n    constructor: ContactManifold,\n\n    //Reset the manifold.\n    reset:function( shape1, shape2 ){\n\n        this.body1 = shape1.parent;\n        this.body2 = shape2.parent;\n        this.numPoints = 0;\n\n    },\n\n    //  Add a point into this manifold.\n    addPointVec: function ( pos, norm, penetration, flip ) {\n        \n        var p = this.points[ this.numPoints++ ];\n\n        p.position.copy( pos );\n        p.localPoint1.sub( pos, this.body1.position ).applyMatrix3( this.body1.rotation );\n        p.localPoint2.sub( pos, this.body2.position ).applyMatrix3( this.body2.rotation );\n\n        p.normal.copy( norm );\n        if( flip ) p.normal.negate();\n\n        p.normalImpulse = 0;\n        p.penetration = penetration;\n        p.warmStarted = false;\n        \n    },\n\n    //  Add a point into this manifold.\n    addPoint: function ( x, y, z, nx, ny, nz, penetration, flip ) {\n        \n        var p = this.points[ this.numPoints++ ];\n\n        p.position.set( x, y, z );\n        p.localPoint1.sub( p.position, this.body1.position ).applyMatrix3( this.body1.rotation );\n        p.localPoint2.sub( p.position, this.body2.position ).applyMatrix3( this.body2.rotation );\n\n        p.normalImpulse = 0;\n\n        p.normal.set( nx, ny, nz );\n        if( flip ) p.normal.negate();\n\n        p.penetration = penetration;\n        p.warmStarted = false;\n        \n    }\n};\n\nfunction ContactPointDataBuffer (){\n\n    this.nor = new Vec3();\n    this.tan = new Vec3();\n    this.bin = new Vec3();\n\n    this.norU1 = new Vec3();\n    this.tanU1 = new Vec3();\n    this.binU1 = new Vec3();\n\n    this.norU2 = new Vec3();\n    this.tanU2 = new Vec3();\n    this.binU2 = new Vec3();\n\n    this.norT1 = new Vec3();\n    this.tanT1 = new Vec3();\n    this.binT1 = new Vec3();\n\n    this.norT2 = new Vec3();\n    this.tanT2 = new Vec3();\n    this.binT2 = new Vec3();\n\n    this.norTU1 = new Vec3();\n    this.tanTU1 = new Vec3();\n    this.binTU1 = new Vec3();\n\n    this.norTU2 = new Vec3();\n    this.tanTU2 = new Vec3();\n    this.binTU2 = new Vec3();\n\n    this.norImp = 0;\n    this.tanImp = 0;\n    this.binImp = 0;\n\n    this.norDen = 0;\n    this.tanDen = 0;\n    this.binDen = 0;\n\n    this.norTar = 0;\n\n    this.next = null;\n    this.last = false;\n\n}\n\n/**\n* ...\n* @author saharan\n*/\nfunction ContactConstraint ( manifold ){\n    \n    Constraint.call( this );\n    // The contact manifold of the constraint.\n    this.manifold = manifold;\n    // The coefficient of restitution of the constraint.\n    this.restitution=NaN;\n    // The coefficient of friction of the constraint.\n    this.friction=NaN;\n    this.p1=null;\n    this.p2=null;\n    this.lv1=null;\n    this.lv2=null;\n    this.av1=null;\n    this.av2=null;\n    this.i1=null;\n    this.i2=null;\n\n    //this.ii1 = null;\n    //this.ii2 = null;\n\n    this.tmp = new Vec3();\n    this.tmpC1 = new Vec3();\n    this.tmpC2 = new Vec3();\n\n    this.tmpP1 = new Vec3();\n    this.tmpP2 = new Vec3();\n\n    this.tmplv1 = new Vec3();\n    this.tmplv2 = new Vec3();\n    this.tmpav1 = new Vec3();\n    this.tmpav2 = new Vec3();\n\n    this.m1=NaN;\n    this.m2=NaN;\n    this.num=0;\n    \n    this.ps = manifold.points;\n    this.cs = new ContactPointDataBuffer();\n    this.cs.next = new ContactPointDataBuffer();\n    this.cs.next.next = new ContactPointDataBuffer();\n    this.cs.next.next.next = new ContactPointDataBuffer();\n}\n\nContactConstraint.prototype = Object.assign( Object.create( Constraint.prototype ), {\n\n    constructor: ContactConstraint,\n\n    // Attach the constraint to the bodies.\n    attach: function(){\n\n        this.p1=this.body1.position;\n        this.p2=this.body2.position;\n        this.lv1=this.body1.linearVelocity;\n        this.av1=this.body1.angularVelocity;\n        this.lv2=this.body2.linearVelocity;\n        this.av2=this.body2.angularVelocity;\n        this.i1=this.body1.inverseInertia;\n        this.i2=this.body2.inverseInertia;\n\n    },\n\n    // Detach the constraint from the bodies.\n    detach: function(){\n\n        this.p1=null;\n        this.p2=null;\n        this.lv1=null;\n        this.lv2=null;\n        this.av1=null;\n        this.av2=null;\n        this.i1=null;\n        this.i2=null;\n\n    },\n\n    preSolve: function( timeStep, invTimeStep ){\n\n        this.m1 = this.body1.inverseMass;\n        this.m2 = this.body2.inverseMass;\n\n        var m1m2 = this.m1 + this.m2;\n\n        this.num = this.manifold.numPoints;\n\n        var c = this.cs;\n        var p, rvn, len, norImp, norTar, sepV, i1, i2;\n\n        for( var i=0; i < this.num; i++ ){\n\n            p = this.ps[i];\n\n            this.tmpP1.sub( p.position, this.p1 );\n            this.tmpP2.sub( p.position, this.p2 );\n\n            this.tmpC1.crossVectors( this.av1, this.tmpP1 );\n            this.tmpC2.crossVectors( this.av2, this.tmpP2 );\n\n            c.norImp = p.normalImpulse;\n            c.tanImp = p.tangentImpulse;\n            c.binImp = p.binormalImpulse;\n\n            c.nor.copy( p.normal );\n\n            this.tmp.set(\n\n                ( this.lv2.x + this.tmpC2.x ) - ( this.lv1.x + this.tmpC1.x ),\n                ( this.lv2.y + this.tmpC2.y ) - ( this.lv1.y + this.tmpC1.y ),\n                ( this.lv2.z + this.tmpC2.z ) - ( this.lv1.z + this.tmpC1.z )\n\n            );\n\n            rvn = _Math.dotVectors( c.nor, this.tmp );\n\n            c.tan.set(\n                this.tmp.x - rvn * c.nor.x,\n                this.tmp.y - rvn * c.nor.y,\n                this.tmp.z - rvn * c.nor.z\n            );\n\n            len = _Math.dotVectors( c.tan, c.tan );\n\n            if( len <= 0.04 ) {\n                c.tan.tangent( c.nor );\n            }\n\n            c.tan.normalize();\n\n            c.bin.crossVectors( c.nor, c.tan );\n\n            c.norU1.scale( c.nor, this.m1 );\n            c.norU2.scale( c.nor, this.m2 );\n\n            c.tanU1.scale( c.tan, this.m1 );\n            c.tanU2.scale( c.tan, this.m2 );\n\n            c.binU1.scale( c.bin, this.m1 );\n            c.binU2.scale( c.bin, this.m2 );\n\n            c.norT1.crossVectors( this.tmpP1, c.nor );\n            c.tanT1.crossVectors( this.tmpP1, c.tan );\n            c.binT1.crossVectors( this.tmpP1, c.bin );\n\n            c.norT2.crossVectors( this.tmpP2, c.nor );\n            c.tanT2.crossVectors( this.tmpP2, c.tan );\n            c.binT2.crossVectors( this.tmpP2, c.bin );\n\n            i1 = this.i1;\n            i2 = this.i2;\n\n            c.norTU1.copy( c.norT1 ).applyMatrix3( i1, true );\n            c.tanTU1.copy( c.tanT1 ).applyMatrix3( i1, true );\n            c.binTU1.copy( c.binT1 ).applyMatrix3( i1, true );\n\n            c.norTU2.copy( c.norT2 ).applyMatrix3( i2, true );\n            c.tanTU2.copy( c.tanT2 ).applyMatrix3( i2, true );\n            c.binTU2.copy( c.binT2 ).applyMatrix3( i2, true );\n\n            /*c.norTU1.mulMat( this.i1, c.norT1 );\n            c.tanTU1.mulMat( this.i1, c.tanT1 );\n            c.binTU1.mulMat( this.i1, c.binT1 );\n\n            c.norTU2.mulMat( this.i2, c.norT2 );\n            c.tanTU2.mulMat( this.i2, c.tanT2 );\n            c.binTU2.mulMat( this.i2, c.binT2 );*/\n\n            this.tmpC1.crossVectors( c.norTU1, this.tmpP1 );\n            this.tmpC2.crossVectors( c.norTU2, this.tmpP2 );\n            this.tmp.add( this.tmpC1, this.tmpC2 );\n            c.norDen = 1 / ( m1m2 +_Math.dotVectors( c.nor, this.tmp ));\n\n            this.tmpC1.crossVectors( c.tanTU1, this.tmpP1 );\n            this.tmpC2.crossVectors( c.tanTU2, this.tmpP2 );\n            this.tmp.add( this.tmpC1, this.tmpC2 );\n            c.tanDen = 1 / ( m1m2 +_Math.dotVectors( c.tan, this.tmp ));\n\n            this.tmpC1.crossVectors( c.binTU1, this.tmpP1 );\n            this.tmpC2.crossVectors( c.binTU2, this.tmpP2 );\n            this.tmp.add( this.tmpC1, this.tmpC2 );\n            c.binDen = 1 / ( m1m2 +_Math.dotVectors( c.bin, this.tmp ));\n\n            if( p.warmStarted ){\n\n                norImp = p.normalImpulse;\n\n                this.lv1.addScaledVector( c.norU1, norImp );\n                this.av1.addScaledVector( c.norTU1, norImp );\n\n                this.lv2.subScaledVector( c.norU2, norImp );\n                this.av2.subScaledVector( c.norTU2, norImp );\n\n                c.norImp = norImp;\n                c.tanImp = 0;\n                c.binImp = 0;\n                rvn = 0; // disable bouncing\n\n            } else {\n\n                c.norImp=0;\n                c.tanImp=0;\n                c.binImp=0;\n\n            }\n\n\n            if(rvn>-1) rvn=0; // disable bouncing\n            \n            norTar = this.restitution*-rvn;\n            sepV = -(p.penetration+0.005)*invTimeStep*0.05; // allow 0.5cm error\n            if(norTar<sepV) norTar=sepV;\n            c.norTar = norTar;\n            c.last = i==this.num-1;\n            c = c.next;\n        }\n    },\n\n    solve: function(){\n\n        this.tmplv1.copy( this.lv1 );\n        this.tmplv2.copy( this.lv2 );\n        this.tmpav1.copy( this.av1 );\n        this.tmpav2.copy( this.av2 );\n\n        var oldImp1, newImp1, oldImp2, newImp2, rvn, norImp, tanImp, binImp, max, len;\n\n        var c = this.cs;\n\n        while(true){\n\n            norImp = c.norImp;\n            tanImp = c.tanImp;\n            binImp = c.binImp;\n            max = -norImp * this.friction;\n\n            this.tmp.sub( this.tmplv2, this.tmplv1 );\n\n            rvn = _Math.dotVectors( this.tmp, c.tan ) + _Math.dotVectors( this.tmpav2, c.tanT2 ) - _Math.dotVectors( this.tmpav1, c.tanT1 );\n        \n            oldImp1 = tanImp;\n            newImp1 = rvn*c.tanDen;\n            tanImp += newImp1;\n\n            rvn = _Math.dotVectors( this.tmp, c.bin ) + _Math.dotVectors( this.tmpav2, c.binT2 ) - _Math.dotVectors( this.tmpav1, c.binT1 );\n      \n            oldImp2 = binImp;\n            newImp2 = rvn*c.binDen;\n            binImp += newImp2;\n\n            // cone friction clamp\n            len = tanImp*tanImp + binImp*binImp;\n            if(len > max * max ){\n                len = max/_Math.sqrt(len);\n                tanImp *= len;\n                binImp *= len;\n            }\n\n            newImp1 = tanImp-oldImp1;\n            newImp2 = binImp-oldImp2;\n\n            //\n\n            this.tmp.set( \n                c.tanU1.x*newImp1 + c.binU1.x*newImp2,\n                c.tanU1.y*newImp1 + c.binU1.y*newImp2,\n                c.tanU1.z*newImp1 + c.binU1.z*newImp2\n            );\n\n            this.tmplv1.addEqual( this.tmp );\n\n            this.tmp.set(\n                c.tanTU1.x*newImp1 + c.binTU1.x*newImp2,\n                c.tanTU1.y*newImp1 + c.binTU1.y*newImp2,\n                c.tanTU1.z*newImp1 + c.binTU1.z*newImp2\n            );\n\n            this.tmpav1.addEqual( this.tmp );\n\n            this.tmp.set(\n                c.tanU2.x*newImp1 + c.binU2.x*newImp2,\n                c.tanU2.y*newImp1 + c.binU2.y*newImp2,\n                c.tanU2.z*newImp1 + c.binU2.z*newImp2\n            );\n\n            this.tmplv2.subEqual( this.tmp );\n\n            this.tmp.set(\n                c.tanTU2.x*newImp1 + c.binTU2.x*newImp2,\n                c.tanTU2.y*newImp1 + c.binTU2.y*newImp2,\n                c.tanTU2.z*newImp1 + c.binTU2.z*newImp2\n            );\n\n            this.tmpav2.subEqual( this.tmp );\n\n            // restitution part\n\n            this.tmp.sub( this.tmplv2, this.tmplv1 );\n\n            rvn = _Math.dotVectors( this.tmp, c.nor ) + _Math.dotVectors( this.tmpav2, c.norT2 ) - _Math.dotVectors( this.tmpav1, c.norT1 );\n\n            oldImp1 = norImp;\n            newImp1 = (rvn-c.norTar)*c.norDen;\n            norImp += newImp1;\n            if( norImp > 0 ) norImp = 0;\n\n            newImp1 = norImp - oldImp1;\n\n            this.tmplv1.addScaledVector( c.norU1, newImp1 );\n            this.tmpav1.addScaledVector( c.norTU1, newImp1 );\n            this.tmplv2.subScaledVector( c.norU2, newImp1 );\n            this.tmpav2.subScaledVector( c.norTU2, newImp1 );\n\n            c.norImp = norImp;\n            c.tanImp = tanImp;\n            c.binImp = binImp;\n\n            if(c.last)break;\n            c = c.next;\n        }\n\n        this.lv1.copy( this.tmplv1 );\n        this.lv2.copy( this.tmplv2 );\n        this.av1.copy( this.tmpav1 );\n        this.av2.copy( this.tmpav2 );\n\n    },\n\n    postSolve: function(){\n\n        var c = this.cs, p;\n        var i = this.num;\n        while(i--){\n        //for(var i=0;i<this.num;i++){\n            p = this.ps[i];\n            p.normal.copy( c.nor );\n            p.tangent.copy( c.tan );\n            p.binormal.copy( c.bin );\n\n            p.normalImpulse = c.norImp;\n            p.tangentImpulse = c.tanImp;\n            p.binormalImpulse = c.binImp;\n            p.normalDenominator = c.norDen;\n            p.tangentDenominator = c.tanDen;\n            p.binormalDenominator = c.binDen;\n            c=c.next;\n        }\n    }\n\n});\n\n/**\n* A contact is a pair of shapes whose axis-aligned bounding boxes are overlapping.\n* @author saharan\n*/\n\nfunction Contact(){\n\n    // The first shape.\n    this.shape1 = null;\n    // The second shape.\n    this.shape2 = null;\n    // The first rigid body.\n    this.body1 = null;\n    // The second rigid body.\n    this.body2 = null;\n    // The previous contact in the world.\n    this.prev = null;\n    // The next contact in the world.\n    this.next = null;\n    // Internal\n    this.persisting = false;\n    // Whether both the rigid bodies are sleeping or not.\n    this.sleeping = false;\n    // The collision detector between two shapes.\n    this.detector = null;\n    // The contact constraint of the contact.\n    this.constraint = null;\n    // Whether the shapes are touching or not.\n    this.touching = false;\n    // shapes is very close and touching \n    this.close = false;\n\n    this.dist = _Math.INF;\n\n    this.b1Link = new ContactLink( this );\n    this.b2Link = new ContactLink( this );\n    this.s1Link = new ContactLink( this );\n    this.s2Link = new ContactLink( this );\n\n    // The contact manifold of the contact.\n    this.manifold = new ContactManifold();\n\n    this.buffer = [\n\n        new ImpulseDataBuffer(),\n        new ImpulseDataBuffer(),\n        new ImpulseDataBuffer(),\n        new ImpulseDataBuffer()\n\n    ];\n\n    this.points = this.manifold.points;\n    this.constraint = new ContactConstraint( this.manifold );\n    \n}\n\nObject.assign( Contact.prototype, {\n\n    Contact: true,\n\n    mixRestitution: function ( restitution1, restitution2 ) {\n\n        return _Math.sqrt(restitution1*restitution2);\n\n    },\n    mixFriction: function ( friction1, friction2 ) {\n\n        return _Math.sqrt(friction1*friction2);\n\n    },\n\n    /**\n    * Update the contact manifold.\n    */\n    updateManifold: function () {\n\n        this.constraint.restitution =this.mixRestitution(this.shape1.restitution,this.shape2.restitution);\n        this.constraint.friction=this.mixFriction(this.shape1.friction,this.shape2.friction);\n        var numBuffers=this.manifold.numPoints;\n        var i = numBuffers;\n        while(i--){\n        //for(var i=0;i<numBuffers;i++){\n            var b = this.buffer[i];\n            var p = this.points[i];\n            b.lp1X=p.localPoint1.x;\n            b.lp1Y=p.localPoint1.y;\n            b.lp1Z=p.localPoint1.z;\n            b.lp2X=p.localPoint2.x;\n            b.lp2Y=p.localPoint2.y;\n            b.lp2Z=p.localPoint2.z;\n            b.impulse=p.normalImpulse;\n        }\n        this.manifold.numPoints=0;\n        this.detector.detectCollision(this.shape1,this.shape2,this.manifold);\n        var num=this.manifold.numPoints;\n        if(num==0){\n            this.touching = false;\n            this.close = false;\n            this.dist = _Math.INF;\n            return;\n        }\n\n        if( this.touching || this.dist < 0.001 ) this.close = true;\n        this.touching=true;\n        i = num;\n        while(i--){\n        //for(i=0; i<num; i++){\n            p=this.points[i];\n            var lp1x=p.localPoint1.x;\n            var lp1y=p.localPoint1.y;\n            var lp1z=p.localPoint1.z;\n            var lp2x=p.localPoint2.x;\n            var lp2y=p.localPoint2.y;\n            var lp2z=p.localPoint2.z;\n            var index=-1;\n            var minDistance=0.0004;\n            var j = numBuffers;\n            while(j--){\n            //for(var j=0;j<numBuffers;j++){\n                b=this.buffer[j];\n                var dx=b.lp1X-lp1x;\n                var dy=b.lp1Y-lp1y;\n                var dz=b.lp1Z-lp1z;\n                var distance1=dx*dx+dy*dy+dz*dz;\n                dx=b.lp2X-lp2x;\n                dy=b.lp2Y-lp2y;\n                dz=b.lp2Z-lp2z;\n                var distance2=dx*dx+dy*dy+dz*dz;\n                if(distance1<distance2){\n                    if(distance1<minDistance){\n                        minDistance=distance1;\n                        index=j;\n                    }\n                }else{\n                    if(distance2<minDistance){\n                        minDistance=distance2;\n                        index=j;\n                    }\n                }\n\n                if( minDistance < this.dist ) this.dist = minDistance;\n\n            }\n            if(index!=-1){\n                var tmp=this.buffer[index];\n                this.buffer[index]=this.buffer[--numBuffers];\n                this.buffer[numBuffers]=tmp;\n                p.normalImpulse=tmp.impulse;\n                p.warmStarted=true;\n            }else{\n                p.normalImpulse=0;\n                p.warmStarted=false;\n            }\n        }\n    },\n    /**\n    * Attach the contact to the shapes.\n    * @param   shape1\n    * @param   shape2\n    */\n    attach:function(shape1,shape2){\n        this.shape1=shape1;\n        this.shape2=shape2;\n        this.body1=shape1.parent;\n        this.body2=shape2.parent;\n\n        this.manifold.body1=this.body1;\n        this.manifold.body2=this.body2;\n        this.constraint.body1=this.body1;\n        this.constraint.body2=this.body2;\n        this.constraint.attach();\n\n        this.s1Link.shape=shape2;\n        this.s1Link.body=this.body2;\n        this.s2Link.shape=shape1;\n        this.s2Link.body=this.body1;\n\n        if(shape1.contactLink!=null)(this.s1Link.next=shape1.contactLink).prev=this.s1Link;\n        else this.s1Link.next=null;\n        shape1.contactLink=this.s1Link;\n        shape1.numContacts++;\n\n        if(shape2.contactLink!=null)(this.s2Link.next=shape2.contactLink).prev=this.s2Link;\n        else this.s2Link.next=null;\n        shape2.contactLink=this.s2Link;\n        shape2.numContacts++;\n\n        this.b1Link.shape=shape2;\n        this.b1Link.body=this.body2;\n        this.b2Link.shape=shape1;\n        this.b2Link.body=this.body1;\n\n        if(this.body1.contactLink!=null)(this.b1Link.next=this.body1.contactLink).prev=this.b1Link;\n        else this.b1Link.next=null;\n        this.body1.contactLink=this.b1Link;\n        this.body1.numContacts++;\n\n        if(this.body2.contactLink!=null)(this.b2Link.next=this.body2.contactLink).prev=this.b2Link;\n        else this.b2Link.next=null;\n        this.body2.contactLink=this.b2Link;\n        this.body2.numContacts++;\n\n        this.prev=null;\n        this.next=null;\n\n        this.persisting=true;\n        this.sleeping=this.body1.sleeping&&this.body2.sleeping;\n        this.manifold.numPoints=0;\n    },\n    /**\n    * Detach the contact from the shapes.\n    */\n    detach:function(){\n        var prev=this.s1Link.prev;\n        var next=this.s1Link.next;\n        if(prev!==null)prev.next=next;\n        if(next!==null)next.prev=prev;\n        if(this.shape1.contactLink==this.s1Link)this.shape1.contactLink=next;\n        this.s1Link.prev=null;\n        this.s1Link.next=null;\n        this.s1Link.shape=null;\n        this.s1Link.body=null;\n        this.shape1.numContacts--;\n\n        prev=this.s2Link.prev;\n        next=this.s2Link.next;\n        if(prev!==null)prev.next=next;\n        if(next!==null)next.prev=prev;\n        if(this.shape2.contactLink==this.s2Link)this.shape2.contactLink=next;\n        this.s2Link.prev=null;\n        this.s2Link.next=null;\n        this.s2Link.shape=null;\n        this.s2Link.body=null;\n        this.shape2.numContacts--;\n\n        prev=this.b1Link.prev;\n        next=this.b1Link.next;\n        if(prev!==null)prev.next=next;\n        if(next!==null)next.prev=prev;\n        if(this.body1.contactLink==this.b1Link)this.body1.contactLink=next;\n        this.b1Link.prev=null;\n        this.b1Link.next=null;\n        this.b1Link.shape=null;\n        this.b1Link.body=null;\n        this.body1.numContacts--;\n\n        prev=this.b2Link.prev;\n        next=this.b2Link.next;\n        if(prev!==null)prev.next=next;\n        if(next!==null)next.prev=prev;\n        if(this.body2.contactLink==this.b2Link)this.body2.contactLink=next;\n        this.b2Link.prev=null;\n        this.b2Link.next=null;\n        this.b2Link.shape=null;\n        this.b2Link.body=null;\n        this.body2.numContacts--;\n\n        this.manifold.body1=null;\n        this.manifold.body2=null;\n        this.constraint.body1=null;\n        this.constraint.body2=null;\n        this.constraint.detach();\n\n        this.shape1=null;\n        this.shape2=null;\n        this.body1=null;\n        this.body2=null;\n    }\n\n} );\n\n/**\r\n* The class of rigid body.\r\n* Rigid body has the shape of a single or multiple collision processing,\r\n* I can set the parameters individually.\r\n* @author saharan\r\n* @author lo-th\r\n*/\r\n\r\nfunction RigidBody ( Position, Rotation ) {\r\n\r\n    this.position = Position || new Vec3();\r\n    this.orientation = Rotation || new Quat();\r\n\r\n    this.scale = 1;\r\n    this.invScale = 1;\r\n\r\n    // possible link to three Mesh;\r\n    this.mesh = null;\r\n\r\n    this.id = NaN;\r\n    this.name = \"\";\r\n    // The maximum number of shapes that can be added to a one rigid.\r\n    //this.MAX_SHAPES = 64;//64;\r\n\r\n    this.prev = null;\r\n    this.next = null;\r\n\r\n    // I represent the kind of rigid body.\r\n    // Please do not change from the outside this variable.\r\n    // If you want to change the type of rigid body, always\r\n    // Please specify the type you want to set the arguments of setupMass method.\r\n    this.type = BODY_NULL;\r\n\r\n    this.massInfo = new MassInfo();\r\n\r\n    this.newPosition = new Vec3();\r\n    this.controlPos = false;\r\n    this.newOrientation = new Quat();\r\n    this.newRotation = new Vec3();\r\n    this.currentRotation = new Vec3();\r\n    this.controlRot = false;\r\n    this.controlRotInTime = false;\r\n\r\n    this.quaternion = new Quat();\r\n    this.pos = new Vec3();\r\n\r\n\r\n\r\n    // Is the translational velocity.\r\n    this.linearVelocity = new Vec3();\r\n    // Is the angular velocity.\r\n    this.angularVelocity = new Vec3();\r\n\r\n    //--------------------------------------------\r\n    //  Please do not change from the outside this variables.\r\n    //--------------------------------------------\r\n\r\n    // It is a world that rigid body has been added.\r\n    this.parent = null;\r\n    this.contactLink = null;\r\n    this.numContacts = 0;\r\n\r\n    // An array of shapes that are included in the rigid body.\r\n    this.shapes = null;\r\n    // The number of shapes that are included in the rigid body.\r\n    this.numShapes = 0;\r\n\r\n    // It is the link array of joint that is connected to the rigid body.\r\n    this.jointLink = null;\r\n    // The number of joints that are connected to the rigid body.\r\n    this.numJoints = 0;\r\n\r\n    // It is the world coordinate of the center of gravity in the sleep just before.\r\n    this.sleepPosition = new Vec3();\r\n    // It is a quaternion that represents the attitude of sleep just before.\r\n    this.sleepOrientation = new Quat();\r\n    // I will show this rigid body to determine whether it is a rigid body static.\r\n    this.isStatic = false;\r\n    // I indicates that this rigid body to determine whether it is a rigid body dynamic.\r\n    this.isDynamic = false;\r\n\r\n    this.isKinematic = false;\r\n\r\n    // It is a rotation matrix representing the orientation.\r\n    this.rotation = new Mat33();\r\n\r\n    //--------------------------------------------\r\n    // It will be recalculated automatically from the shape, which is included.\r\n    //--------------------------------------------\r\n\r\n    // This is the weight.\r\n    this.mass = 0;\r\n    // It is the reciprocal of the mass.\r\n    this.inverseMass = 0;\r\n    // It is the inverse of the inertia tensor in the world system.\r\n    this.inverseInertia = new Mat33();\r\n    // It is the inertia tensor in the initial state.\r\n    this.localInertia = new Mat33();\r\n    // It is the inverse of the inertia tensor in the initial state.\r\n    this.inverseLocalInertia = new Mat33();\r\n\r\n    this.tmpInertia = new Mat33();\r\n\r\n\r\n    // I indicates rigid body whether it has been added to the simulation Island.\r\n    this.addedToIsland = false;\r\n    // It shows how to sleep rigid body.\r\n    this.allowSleep = true;\r\n    // This is the time from when the rigid body at rest.\r\n    this.sleepTime = 0;\r\n    // I shows rigid body to determine whether it is a sleep state.\r\n    this.sleeping = false;\r\n\r\n}\r\n\r\nObject.assign( RigidBody.prototype, {\r\n\r\n    setParent: function ( world ) {\r\n\r\n        this.parent = world;\r\n        this.scale = this.parent.scale;\r\n        this.invScale = this.parent.invScale;\r\n        this.id = this.parent.numRigidBodies;\r\n        if( !this.name ) this.name = this.id;\r\n\r\n        this.updateMesh();\r\n\r\n    },\r\n\r\n    /**\r\n     * I'll add a shape to rigid body.\r\n     * If you add a shape, please call the setupMass method to step up to the start of the next.\r\n     * @param   shape shape to Add\r\n     */\r\n    addShape:function(shape){\r\n\r\n        if(shape.parent){\r\n\t\t\tprintError(\"RigidBody\", \"It is not possible that you add a shape which already has an associated body.\");\r\n\t\t}\r\n\r\n        if(this.shapes!=null)( this.shapes.prev = shape ).next = this.shapes;\r\n        this.shapes = shape;\r\n        shape.parent = this;\r\n        if(this.parent) this.parent.addShape( shape );\r\n        this.numShapes++;\r\n\r\n    },\r\n    /**\r\n     * I will delete the shape from the rigid body.\r\n     * If you delete a shape, please call the setupMass method to step up to the start of the next.\r\n     * @param shape {Shape} to delete\r\n     * @return void\r\n     */\r\n    removeShape:function(shape){\r\n\r\n        var remove = shape;\r\n        if(remove.parent!=this)return;\r\n        var prev=remove.prev;\r\n        var next=remove.next;\r\n        if(prev!=null) prev.next=next;\r\n        if(next!=null) next.prev=prev;\r\n        if(this.shapes==remove)this.shapes=next;\r\n        remove.prev=null;\r\n        remove.next=null;\r\n        remove.parent=null;\r\n        if(this.parent)this.parent.removeShape(remove);\r\n        this.numShapes--;\r\n\r\n    },\r\n\r\n    remove: function () {\r\n\r\n        this.dispose();\r\n\r\n    },\r\n\r\n    dispose: function () {\r\n\r\n        this.parent.removeRigidBody( this );\r\n\r\n    },\r\n\r\n    checkContact: function( name ) {\r\n\r\n        this.parent.checkContact( this.name, name );\r\n\r\n    },\r\n\r\n    /**\r\n     * Calulates mass datas(center of gravity, mass, moment inertia, etc...).\r\n     * If the parameter type is set to BODY_STATIC, the rigid body will be fixed to the space.\r\n     * If the parameter adjustPosition is set to true, the shapes' relative positions and\r\n     * the rigid body's position will be adjusted to the center of gravity.\r\n     * @param type\r\n     * @param adjustPosition\r\n     * @return void\r\n     */\r\n    setupMass: function ( type, AdjustPosition ) {\r\n\r\n        var adjustPosition = ( AdjustPosition !== undefined ) ? AdjustPosition : true;\r\n\r\n        this.type = type || BODY_STATIC;\r\n        this.isDynamic = this.type === BODY_DYNAMIC;\r\n        this.isStatic = this.type === BODY_STATIC;\r\n\r\n        this.mass = 0;\r\n        this.localInertia.set(0,0,0,0,0,0,0,0,0);\r\n\r\n\r\n        var tmpM = new Mat33();\r\n        var tmpV = new Vec3();\r\n\r\n        for( var shape = this.shapes; shape !== null; shape = shape.next ){\r\n\r\n            shape.calculateMassInfo( this.massInfo );\r\n            var shapeMass = this.massInfo.mass;\r\n            tmpV.addScaledVector(shape.relativePosition, shapeMass);\r\n            this.mass += shapeMass;\r\n            this.rotateInertia( shape.relativeRotation, this.massInfo.inertia, tmpM );\r\n            this.localInertia.add( tmpM );\r\n\r\n            // add offset inertia\r\n            this.localInertia.addOffset( shapeMass, shape.relativePosition );\r\n\r\n        }\r\n\r\n        this.inverseMass = 1 / this.mass;\r\n        tmpV.scaleEqual( this.inverseMass );\r\n\r\n        if( adjustPosition ){\r\n            this.position.add( tmpV );\r\n            for( shape=this.shapes; shape !== null; shape = shape.next ){\r\n                shape.relativePosition.subEqual(tmpV);\r\n            }\r\n\r\n            // subtract offset inertia\r\n            this.localInertia.subOffset( this.mass, tmpV );\r\n\r\n        }\r\n\r\n        this.inverseLocalInertia.invert( this.localInertia );\r\n\r\n        //}\r\n\r\n        if( this.type === BODY_STATIC ){\r\n            this.inverseMass = 0;\r\n            this.inverseLocalInertia.set(0,0,0,0,0,0,0,0,0);\r\n        }\r\n\r\n        this.syncShapes();\r\n        this.awake();\r\n\r\n    },\r\n    /**\r\n     * Awake the rigid body.\r\n     */\r\n    awake:function(){\r\n\r\n        if( !this.allowSleep || !this.sleeping ) return;\r\n        this.sleeping = false;\r\n        this.sleepTime = 0;\r\n        // awake connected constraints\r\n        var cs = this.contactLink;\r\n        while(cs != null){\r\n            cs.body.sleepTime = 0;\r\n            cs.body.sleeping = false;\r\n            cs = cs.next;\r\n        }\r\n        var js = this.jointLink;\r\n        while(js != null){\r\n            js.body.sleepTime = 0;\r\n            js.body.sleeping = false;\r\n            js = js.next;\r\n        }\r\n        for(var shape = this.shapes; shape!=null; shape = shape.next){\r\n            shape.updateProxy();\r\n        }\r\n\r\n    },\r\n    /**\r\n     * Sleep the rigid body.\r\n     */\r\n    sleep:function(){\r\n\r\n        if( !this.allowSleep || this.sleeping ) return;\r\n\r\n        this.linearVelocity.set(0,0,0);\r\n        this.angularVelocity.set(0,0,0);\r\n        this.sleepPosition.copy( this.position );\r\n        this.sleepOrientation.copy( this.orientation );\r\n\r\n        this.sleepTime = 0;\r\n        this.sleeping = true;\r\n        for( var shape = this.shapes; shape != null; shape = shape.next ) {\r\n            shape.updateProxy();\r\n        }\r\n    },\r\n\r\n    testWakeUp: function(){\r\n\r\n        if( this.linearVelocity.testZero() || this.angularVelocity.testZero() || this.position.testDiff( this.sleepPosition ) || this.orientation.testDiff( this.sleepOrientation )) this.awake(); // awake the body\r\n\r\n    },\r\n\r\n    /**\r\n     * Get whether the rigid body has not any connection with others.\r\n     * @return {void}\r\n     */\r\n    isLonely: function () {\r\n        return this.numJoints==0 && this.numContacts==0;\r\n    },\r\n\r\n    /**\r\n     * The time integration of the motion of a rigid body, you can update the information such as the shape.\r\n     * This method is invoked automatically when calling the step of the World,\r\n     * There is no need to call from outside usually.\r\n     * @param  timeStep time\r\n     * @return {void}\r\n     */\r\n\r\n    updatePosition: function ( timeStep ) {\r\n        switch(this.type){\r\n            case BODY_STATIC:\r\n                this.linearVelocity.set(0,0,0);\r\n                this.angularVelocity.set(0,0,0);\r\n\r\n                // ONLY FOR TEST\r\n                if(this.controlPos){\r\n                    this.position.copy(this.newPosition);\r\n                    this.controlPos = false;\r\n                }\r\n                if(this.controlRot){\r\n                    this.orientation.copy(this.newOrientation);\r\n                    this.controlRot = false;\r\n                }\r\n                /*this.linearVelocity.x=0;\r\n                this.linearVelocity.y=0;\r\n                this.linearVelocity.z=0;\r\n                this.angularVelocity.x=0;\r\n                this.angularVelocity.y=0;\r\n                this.angularVelocity.z=0;*/\r\n            break;\r\n            case BODY_DYNAMIC:\r\n\r\n                if( this.isKinematic ){\r\n\r\n                    this.linearVelocity.set(0,0,0);\r\n                    this.angularVelocity.set(0,0,0);\r\n\r\n                }\r\n\r\n                if(this.controlPos){\r\n\r\n                    this.linearVelocity.subVectors( this.newPosition, this.position ).multiplyScalar(1/timeStep);\r\n                    this.controlPos = false;\r\n\r\n                }\r\n                if(this.controlRot){\r\n\r\n                    this.angularVelocity.copy( this.getAxis() );\r\n                    this.orientation.copy( this.newOrientation );\r\n                    this.controlRot = false;\r\n\r\n                }\r\n\r\n                this.position.addScaledVector(this.linearVelocity, timeStep);\r\n                this.orientation.addTime(this.angularVelocity, timeStep);\r\n\r\n                this.updateMesh();\r\n\r\n            break;\r\n            default: printError(\"RigidBody\", \"Invalid type.\");\r\n        }\r\n\r\n        this.syncShapes();\r\n        this.updateMesh();\r\n\r\n    },\r\n\r\n    getAxis: function () {\r\n\r\n        return new Vec3( 0,1,0 ).applyMatrix3( this.inverseLocalInertia, true ).normalize();\r\n\r\n    },\r\n\r\n    rotateInertia: function ( rot, inertia, out ) {\r\n\r\n        this.tmpInertia.multiplyMatrices( rot, inertia );\r\n        out.multiplyMatrices( this.tmpInertia, rot, true );\r\n\r\n    },\r\n\r\n    syncShapes: function () {\r\n\r\n        this.rotation.setQuat( this.orientation );\r\n        this.rotateInertia( this.rotation, this.inverseLocalInertia, this.inverseInertia );\r\n        \r\n        for(var shape = this.shapes; shape!=null; shape = shape.next){\r\n\r\n            shape.position.copy( shape.relativePosition ).applyMatrix3( this.rotation, true ).add( this.position );\r\n            // add by QuaziKb\r\n            shape.rotation.multiplyMatrices( this.rotation, shape.relativeRotation );\r\n            shape.updateProxy();\r\n        }\r\n    },\r\n\r\n\r\n    //---------------------------------------------\r\n    // APPLY IMPULSE FORCE\r\n    //---------------------------------------------\r\n\r\n    applyImpulse: function(position, force){\r\n        this.linearVelocity.addScaledVector(force, this.inverseMass);\r\n        var rel = new Vec3().copy( position ).sub( this.position ).cross( force ).applyMatrix3( this.inverseInertia, true );\r\n        this.angularVelocity.add( rel );\r\n    },\r\n\r\n\r\n    //---------------------------------------------\r\n    // SET DYNAMIQUE POSITION AND ROTATION\r\n    //---------------------------------------------\r\n\r\n    setPosition: function(pos){\r\n        this.newPosition.copy( pos ).multiplyScalar( this.invScale );\r\n        this.controlPos = true;\r\n        if( !this.isKinematic ) this.isKinematic = true;\r\n    },\r\n\r\n    setQuaternion: function(q){\r\n        this.newOrientation.set(q.x, q.y, q.z, q.w);\r\n        this.controlRot = true;\r\n        if( !this.isKinematic ) this.isKinematic = true;\r\n    },\r\n\r\n    setRotation: function ( rot ) {\r\n\r\n        this.newOrientation = new Quat().setFromEuler( rot.x * _Math.degtorad, rot.y * _Math.degtorad, rot.y * _Math.degtorad );//this.rotationVectToQuad( rot );\r\n        this.controlRot = true;\r\n\r\n    },\r\n\r\n    //---------------------------------------------\r\n    // RESET DYNAMIQUE POSITION AND ROTATION\r\n    //---------------------------------------------\r\n\r\n    resetPosition:function(x,y,z){\r\n\r\n        this.linearVelocity.set( 0, 0, 0 );\r\n        this.angularVelocity.set( 0, 0, 0 );\r\n        this.position.set( x, y, z ).multiplyScalar( this.invScale );\r\n        //this.position.set( x*OIMO.WorldScale.invScale, y*OIMO.WorldScale.invScale, z*OIMO.WorldScale.invScale );\r\n        this.awake();\r\n    },\r\n\r\n    resetQuaternion:function( q ){\r\n\r\n        this.angularVelocity.set(0,0,0);\r\n        this.orientation = new Quat( q.x, q.y, q.z, q.w );\r\n        this.awake();\r\n\r\n    },\r\n\r\n    resetRotation:function(x,y,z){\r\n\r\n        this.angularVelocity.set(0,0,0);\r\n        this.orientation = new Quat().setFromEuler( x * _Math.degtorad, y * _Math.degtorad,  z * _Math.degtorad );//this.rotationVectToQuad( new Vec3(x,y,z) );\r\n        this.awake();\r\n\r\n    },\r\n\r\n    //---------------------------------------------\r\n    // GET POSITION AND ROTATION\r\n    //---------------------------------------------\r\n\r\n    getPosition:function () {\r\n\r\n        return this.pos;\r\n\r\n    },\r\n\r\n    getQuaternion: function () {\r\n\r\n        return this.quaternion;\r\n\r\n    },\r\n\r\n    //---------------------------------------------\r\n    // AUTO UPDATE THREE MESH\r\n    //---------------------------------------------\r\n\r\n    connectMesh: function ( mesh ) {\r\n\r\n        this.mesh = mesh;\r\n        this.updateMesh();\r\n\r\n    },\r\n\r\n    updateMesh: function(){\r\n\r\n        this.pos.scale( this.position, this.scale );\r\n        this.quaternion.copy( this.orientation );\r\n\r\n        if( this.mesh === null ) return;\r\n\r\n        this.mesh.position.copy( this.getPosition() );\r\n        this.mesh.quaternion.copy( this.getQuaternion() );\r\n\r\n    },\r\n\r\n} );\n\n/**\r\n* A pair of shapes that may collide.\r\n* @author saharan\r\n*/\r\nfunction Pair ( s1, s2 ){\r\n\r\n    // The first shape.\r\n    this.shape1 = s1 || null;\r\n    // The second shape.\r\n    this.shape2 = s2 || null;\r\n\r\n}\n\n/**\r\n* The broad-phase is used for collecting all possible pairs for collision.\r\n*/\r\n\r\n function BroadPhase(){\r\n\r\n    this.types = BR_NULL;\r\n    this.numPairChecks = 0;\r\n    this.numPairs = 0;\r\n    this.pairs = [];\r\n\r\n}\r\n\r\nObject.assign( BroadPhase.prototype, {\r\n\r\n    BroadPhase: true,\r\n\r\n    // Create a new proxy.\r\n    createProxy: function ( shape ) {\r\n\r\n        printError(\"BroadPhase\",\"Inheritance error.\");\r\n\r\n    },\r\n\r\n    // Add the proxy into the broad-phase.\r\n    addProxy: function ( proxy ) {\r\n\r\n        printError(\"BroadPhase\",\"Inheritance error.\");\r\n    },\r\n\r\n    // Remove the proxy from the broad-phase.\r\n    removeProxy: function ( proxy ) {\r\n\r\n        printError(\"BroadPhase\",\"Inheritance error.\");\r\n\r\n    },\r\n\r\n    // Returns whether the pair is available or not.\r\n    isAvailablePair: function ( s1, s2 ) {\r\n\r\n        var b1 = s1.parent;\r\n        var b2 = s2.parent;\r\n        if( b1 == b2 || // same parents\r\n            (!b1.isDynamic && !b2.isDynamic) || // static or kinematic object\r\n            (s1.belongsTo&s2.collidesWith)==0 ||\r\n            (s2.belongsTo&s1.collidesWith)==0 // collision filtering\r\n        ){ return false; }\r\n        var js;\r\n        if(b1.numJoints<b2.numJoints) js = b1.jointLink;\r\n        else js = b2.jointLink;\r\n        while(js!==null){\r\n           var joint = js.joint;\r\n           if( !joint.allowCollision && ((joint.body1==b1 && joint.body2==b2) || (joint.body1==b2 && joint.body2==b1)) ){ return false; }\r\n           js = js.next;\r\n        }\r\n\r\n        return true;\r\n\r\n    },\r\n\r\n    // Detect overlapping pairs.\r\n    detectPairs: function () {\r\n\r\n        // clear old\r\n        this.pairs = [];\r\n        this.numPairs = 0;\r\n        this.numPairChecks = 0;\r\n        this.collectPairs();\r\n\r\n    },\r\n\r\n    collectPairs: function () {\r\n\r\n        Error(\"BroadPhase\", \"Inheritance error.\");\r\n\r\n    },\r\n\r\n    addPair: function ( s1, s2 ) {\r\n\r\n        var pair = new Pair( s1, s2 );\r\n        this.pairs.push(pair);\r\n        this.numPairs++;\r\n\r\n    }\r\n\r\n});\n\nvar count$1 = 0;\r\nfunction ProxyIdCount() { return count$1++; }\r\n\r\n/**\r\n * A proxy is used for broad-phase collecting pairs that can be colliding.\r\n *\r\n * @author lo-th\r\n */\r\n\r\nfunction Proxy( shape ) {\r\n\r\n\t//The parent shape.\r\n    this.shape = shape;\r\n\r\n    //The axis-aligned bounding box.\r\n    this.aabb = shape.aabb;\r\n\r\n}\r\n\r\nObject.assign( Proxy.prototype, {\r\n\r\n    Proxy: true,\r\n\r\n\t// Update the proxy. Must be inherited by a child.\r\n\r\n    update: function(){\r\n\r\n        printError(\"Proxy\",\"Inheritance error.\");\r\n\r\n    }\r\n\r\n});\n\n/**\r\n* A basic implementation of proxies.\r\n*\r\n* @author saharan\r\n*/\r\n\r\nfunction BasicProxy ( shape ) {\r\n\r\n    Proxy.call( this, shape );\r\n\r\n    this.id = ProxyIdCount();\r\n\r\n}\r\n\r\nBasicProxy.prototype = Object.assign( Object.create( Proxy.prototype ), {\r\n\r\n    constructor: BasicProxy,\r\n\r\n    update: function () {\r\n\r\n    }\r\n\r\n});\n\n/**\r\n* A broad-phase algorithm with brute-force search.\r\n* This always checks for all possible pairs.\r\n*/\r\n\r\nfunction BruteForceBroadPhase(){\r\n\r\n    BroadPhase.call( this );\r\n    this.types = BR_BRUTE_FORCE;\r\n    //this.numProxies=0;\r\n    ///this.maxProxies = 256;\r\n    this.proxies = [];\r\n    //this.proxies.length = 256;\r\n\r\n}\r\n\r\n\r\nBruteForceBroadPhase.prototype = Object.assign( Object.create( BroadPhase.prototype ), {\r\n\r\n    constructor: BruteForceBroadPhase,\r\n\r\n    createProxy: function ( shape ) {\r\n\r\n        return new BasicProxy( shape );\r\n\r\n    },\r\n\r\n    addProxy: function ( proxy ) {\r\n\r\n        /*if(this.numProxies==this.maxProxies){\r\n            //this.maxProxies<<=1;\r\n            this.maxProxies*=2;\r\n            var newProxies=[];\r\n            newProxies.length = this.maxProxies;\r\n            var i = this.numProxies;\r\n            while(i--){\r\n            //for(var i=0, l=this.numProxies;i<l;i++){\r\n                newProxies[i]=this.proxies[i];\r\n            }\r\n            this.proxies=newProxies;\r\n        }*/\r\n        //this.proxies[this.numProxies++] = proxy;\r\n        this.proxies.push( proxy );\r\n        //this.numProxies++;\r\n\r\n    },\r\n\r\n    removeProxy: function ( proxy ) {\r\n\r\n        var n = this.proxies.indexOf( proxy );\r\n        if ( n > -1 ){\r\n            this.proxies.splice( n, 1 );\r\n            //this.numProxies--;\r\n        }\r\n\r\n        /*var i = this.numProxies;\r\n        while(i--){\r\n        //for(var i=0, l=this.numProxies;i<l;i++){\r\n            if(this.proxies[i] == proxy){\r\n                this.proxies[i] = this.proxies[--this.numProxies];\r\n                this.proxies[this.numProxies] = null;\r\n                return;\r\n            }\r\n        }*/\r\n\r\n    },\r\n\r\n    collectPairs: function () {\r\n\r\n        var i = 0, j, p1, p2;\r\n\r\n        var px = this.proxies;\r\n        var l = px.length;//this.numProxies;\r\n        //var ar1 = [];\r\n        //var ar2 = [];\r\n\r\n        //for( i = px.length ; i-- ; ar1[ i ] = px[ i ] ){};\r\n        //for( i = px.length ; i-- ; ar2[ i ] = px[ i ] ){};\r\n\r\n        //var ar1 = JSON.parse(JSON.stringify(this.proxies))\r\n        //var ar2 = JSON.parse(JSON.stringify(this.proxies))\r\n\r\n        this.numPairChecks = l*(l-1)>>1;\r\n        //this.numPairChecks=this.numProxies*(this.numProxies-1)*0.5;\r\n\r\n        while( i < l ){\r\n            p1 = px[i++];\r\n            j = i + 1;\r\n            while( j < l ){\r\n                p2 = px[j++];\r\n                if ( p1.aabb.intersectTest( p2.aabb ) || !this.isAvailablePair( p1.shape, p2.shape ) ) continue;\r\n                this.addPair( p1.shape, p2.shape );\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * A projection axis for sweep and prune broad-phase.\r\n * @author saharan\r\n */\r\n\r\nfunction SAPAxis (){\r\n\r\n    this.numElements = 0;\r\n    this.bufferSize = 256;\r\n    this.elements = [];\r\n    this.elements.length = this.bufferSize;\r\n    this.stack = new Float32Array( 64 );\r\n\r\n}\r\n\r\nObject.assign( SAPAxis.prototype, {\r\n\r\n    SAPAxis: true,\r\n\r\n    addElements: function ( min, max ) {\r\n\r\n        if(this.numElements+2>=this.bufferSize){\r\n            //this.bufferSize<<=1;\r\n            this.bufferSize*=2;\r\n            var newElements=[];\r\n            var i = this.numElements;\r\n            while(i--){\r\n            //for(var i=0, l=this.numElements; i<l; i++){\r\n                newElements[i] = this.elements[i];\r\n            }\r\n        }\r\n        this.elements[this.numElements++] = min;\r\n        this.elements[this.numElements++] = max;\r\n\r\n    },\r\n\r\n    removeElements: function ( min, max ) {\r\n\r\n        var minIndex=-1;\r\n        var maxIndex=-1;\r\n        for(var i=0, l=this.numElements; i<l; i++){\r\n            var e=this.elements[i];\r\n            if(e==min||e==max){\r\n                if(minIndex==-1){\r\n                    minIndex=i;\r\n                }else{\r\n                    maxIndex=i;\r\n                break;\r\n                }\r\n            }\r\n        }\r\n        for(i = minIndex+1, l = maxIndex; i < l; i++){\r\n            this.elements[i-1] = this.elements[i];\r\n        }\r\n        for(i = maxIndex+1, l = this.numElements; i < l; i++){\r\n            this.elements[i-2] = this.elements[i];\r\n        }\r\n\r\n        this.elements[--this.numElements] = null;\r\n        this.elements[--this.numElements] = null;\r\n\r\n    },\r\n\r\n    sort: function () {\r\n\r\n        var count = 0;\r\n        var threshold = 1;\r\n        while((this.numElements >> threshold) != 0 ) threshold++;\r\n        threshold = threshold * this.numElements >> 2;\r\n        count = 0;\r\n\r\n        var giveup = false;\r\n        var elements = this.elements;\r\n        for( var i = 1, l = this.numElements; i < l; i++){ // try insertion sort\r\n            var tmp=elements[i];\r\n            var pivot=tmp.value;\r\n            var tmp2=elements[i-1];\r\n            if(tmp2.value>pivot){\r\n                var j=i;\r\n                do{\r\n                    elements[j]=tmp2;\r\n                    if(--j==0)break;\r\n                    tmp2=elements[j-1];\r\n                }while(tmp2.value>pivot);\r\n                elements[j]=tmp;\r\n                count+=i-j;\r\n                if(count>threshold){\r\n                    giveup=true; // stop and use quick sort\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        if(!giveup)return;\r\n        count=2;var stack=this.stack;\r\n        stack[0]=0;\r\n        stack[1]=this.numElements-1;\r\n        while(count>0){\r\n            var right=stack[--count];\r\n            var left=stack[--count];\r\n            var diff=right-left;\r\n            if(diff>16){  // quick sort\r\n                //var mid=left+(diff>>1);\r\n                var mid = left + (_Math.floor(diff*0.5));\r\n                tmp = elements[mid];\r\n                elements[mid] = elements[right];\r\n                elements[right] = tmp;\r\n                pivot = tmp.value;\r\n                i = left-1;\r\n                j = right;\r\n                while( true ){\r\n                    var ei;\r\n                    var ej;\r\n                    do{ ei = elements[++i]; } while( ei.value < pivot);\r\n                    do{ ej = elements[--j]; } while( pivot < ej.value && j != left );\r\n                    if( i >= j ) break;\r\n                    elements[i] = ej;\r\n                    elements[j] = ei;\r\n                }\r\n\r\n                elements[right] = elements[i];\r\n                elements[i] = tmp;\r\n                if( i - left > right - i ) {\r\n                    stack[count++] = left;\r\n                    stack[count++] = i - 1;\r\n                    stack[count++] = i + 1;\r\n                    stack[count++] = right;\r\n                }else{\r\n                    stack[count++] = i + 1;\r\n                    stack[count++] = right;\r\n                    stack[count++] = left;\r\n                    stack[count++] = i - 1;\r\n                }\r\n            }else{\r\n                for( i = left + 1; i <= right; i++ ) {\r\n                    tmp = elements[i];\r\n                    pivot = tmp.value;\r\n                    tmp2 = elements[i-1];\r\n                    if( tmp2.value > pivot ) {\r\n                        j = i;\r\n                        do{\r\n                            elements[j] = tmp2;\r\n                            if( --j == 0 ) break;\r\n                            tmp2 = elements[j-1];\r\n                        }while( tmp2.value > pivot );\r\n                        elements[j] = tmp;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        \r\n    },\r\n\r\n    calculateTestCount: function () {\r\n\r\n        var num = 1;\r\n        var sum = 0;\r\n        for(var i = 1, l = this.numElements; i<l; i++){\r\n            if(this.elements[i].max){\r\n                num--;\r\n            }else{\r\n                sum += num;\r\n                num++;\r\n            }\r\n        }\r\n        return sum;\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * An element of proxies.\r\n * @author saharan\r\n */\r\n\r\nfunction SAPElement ( proxy, max ) {\r\n\r\n    // The parent proxy\r\n    this.proxy = proxy;\r\n\t// The pair element.\r\n    this.pair = null;\r\n    // The minimum element on other axis.\r\n    this.min1 = null;\r\n    // The maximum element on other axis.\r\n    this.max1 = null;\r\n    // The minimum element on other axis.\r\n    this.min2 = null;\r\n    // The maximum element on other axis.\r\n    this.max2 = null;\r\n    // Whether the element has maximum value or not.\r\n    this.max = max;\r\n    // The value of the element.\r\n    this.value = 0;\r\n\r\n}\n\n/**\r\n * A proxy for sweep and prune broad-phase.\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction SAPProxy ( sap, shape ){\r\n\r\n    Proxy.call( this, shape );\r\n    // Type of the axis to which the proxy belongs to. [0:none, 1:dynamic, 2:static]\r\n    this.belongsTo = 0;\r\n    // The maximum elements on each axis.\r\n    this.max = [];\r\n    // The minimum elements on each axis.\r\n    this.min = [];\r\n    \r\n    this.sap = sap;\r\n    this.min[0] = new SAPElement( this, false );\r\n    this.max[0] = new SAPElement( this, true );\r\n    this.min[1] = new SAPElement( this, false );\r\n    this.max[1] = new SAPElement( this, true );\r\n    this.min[2] = new SAPElement( this, false );\r\n    this.max[2] = new SAPElement( this, true );\r\n    this.max[0].pair = this.min[0];\r\n    this.max[1].pair = this.min[1];\r\n    this.max[2].pair = this.min[2];\r\n    this.min[0].min1 = this.min[1];\r\n    this.min[0].max1 = this.max[1];\r\n    this.min[0].min2 = this.min[2];\r\n    this.min[0].max2 = this.max[2];\r\n    this.min[1].min1 = this.min[0];\r\n    this.min[1].max1 = this.max[0];\r\n    this.min[1].min2 = this.min[2];\r\n    this.min[1].max2 = this.max[2];\r\n    this.min[2].min1 = this.min[0];\r\n    this.min[2].max1 = this.max[0];\r\n    this.min[2].min2 = this.min[1];\r\n    this.min[2].max2 = this.max[1];\r\n\r\n}\r\n\r\nSAPProxy.prototype = Object.assign( Object.create( Proxy.prototype ), {\r\n\r\n    constructor: SAPProxy,\r\n\r\n\r\n    // Returns whether the proxy is dynamic or not.\r\n    isDynamic: function () {\r\n\r\n        var body = this.shape.parent;\r\n        return body.isDynamic && !body.sleeping;\r\n\r\n    },\r\n\r\n    update: function () {\r\n\r\n        var te = this.aabb.elements;\r\n        this.min[0].value = te[0];\r\n        this.min[1].value = te[1];\r\n        this.min[2].value = te[2];\r\n        this.max[0].value = te[3];\r\n        this.max[1].value = te[4];\r\n        this.max[2].value = te[5];\r\n\r\n        if( this.belongsTo == 1 && !this.isDynamic() || this.belongsTo == 2 && this.isDynamic() ){\r\n            this.sap.removeProxy(this);\r\n            this.sap.addProxy(this);\r\n        }\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * A broad-phase collision detection algorithm using sweep and prune.\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction SAPBroadPhase () {\r\n\r\n    BroadPhase.call( this);\r\n    this.types = BR_SWEEP_AND_PRUNE;\r\n\r\n    this.numElementsD = 0;\r\n    this.numElementsS = 0;\r\n    // dynamic proxies\r\n    this.axesD = [\r\n       new SAPAxis(),\r\n       new SAPAxis(),\r\n       new SAPAxis()\r\n    ];\r\n    // static or sleeping proxies\r\n    this.axesS = [\r\n       new SAPAxis(),\r\n       new SAPAxis(),\r\n       new SAPAxis()\r\n    ];\r\n\r\n    this.index1 = 0;\r\n    this.index2 = 1;\r\n\r\n}\r\n\r\nSAPBroadPhase.prototype = Object.assign( Object.create( BroadPhase.prototype ), {\r\n\r\n    constructor: SAPBroadPhase,\r\n\r\n    createProxy: function ( shape ) {\r\n\r\n        return new SAPProxy( this, shape );\r\n\r\n    },\r\n\r\n    addProxy: function ( proxy ) {\r\n\r\n        var p = proxy;\r\n        if(p.isDynamic()){\r\n            this.axesD[0].addElements( p.min[0], p.max[0] );\r\n            this.axesD[1].addElements( p.min[1], p.max[1] );\r\n            this.axesD[2].addElements( p.min[2], p.max[2] );\r\n            p.belongsTo = 1;\r\n            this.numElementsD += 2;\r\n        } else {\r\n            this.axesS[0].addElements( p.min[0], p.max[0] );\r\n            this.axesS[1].addElements( p.min[1], p.max[1] );\r\n            this.axesS[2].addElements( p.min[2], p.max[2] );\r\n            p.belongsTo = 2;\r\n            this.numElementsS += 2;\r\n        }\r\n\r\n    },\r\n\r\n    removeProxy: function ( proxy ) {\r\n\r\n        var p = proxy;\r\n        if ( p.belongsTo == 0 ) return;\r\n\r\n        /*else if ( p.belongsTo == 1 ) {\r\n            this.axesD[0].removeElements( p.min[0], p.max[0] );\r\n            this.axesD[1].removeElements( p.min[1], p.max[1] );\r\n            this.axesD[2].removeElements( p.min[2], p.max[2] );\r\n            this.numElementsD -= 2;\r\n        } else if ( p.belongsTo == 2 ) {\r\n            this.axesS[0].removeElements( p.min[0], p.max[0] );\r\n            this.axesS[1].removeElements( p.min[1], p.max[1] );\r\n            this.axesS[2].removeElements( p.min[2], p.max[2] );\r\n            this.numElementsS -= 2;\r\n        }*/\r\n\r\n        switch( p.belongsTo ){\r\n            case 1:\r\n            this.axesD[0].removeElements( p.min[0], p.max[0] );\r\n            this.axesD[1].removeElements( p.min[1], p.max[1] );\r\n            this.axesD[2].removeElements( p.min[2], p.max[2] );\r\n            this.numElementsD -= 2;\r\n            break;\r\n            case 2:\r\n            this.axesS[0].removeElements( p.min[0], p.max[0] );\r\n            this.axesS[1].removeElements( p.min[1], p.max[1] );\r\n            this.axesS[2].removeElements( p.min[2], p.max[2] );\r\n            this.numElementsS -= 2;\r\n            break;\r\n        }\r\n\r\n        p.belongsTo = 0;\r\n\r\n    },\r\n\r\n    collectPairs: function () {\r\n\r\n        if( this.numElementsD == 0 ) return;\r\n\r\n        var axis1 = this.axesD[this.index1];\r\n        var axis2 = this.axesD[this.index2];\r\n\r\n        axis1.sort();\r\n        axis2.sort();\r\n\r\n        var count1 = axis1.calculateTestCount();\r\n        var count2 = axis2.calculateTestCount();\r\n        var elementsD;\r\n        var elementsS;\r\n        if( count1 <= count2 ){// select the best axis\r\n            axis2 = this.axesS[this.index1];\r\n            axis2.sort();\r\n            elementsD = axis1.elements;\r\n            elementsS = axis2.elements;\r\n        }else{\r\n            axis1 = this.axesS[this.index2];\r\n            axis1.sort();\r\n            elementsD = axis2.elements;\r\n            elementsS = axis1.elements;\r\n            this.index1 ^= this.index2;\r\n            this.index2 ^= this.index1;\r\n            this.index1 ^= this.index2;\r\n        }\r\n        var activeD;\r\n        var activeS;\r\n        var p = 0;\r\n        var q = 0;\r\n        while( p < this.numElementsD ){\r\n            var e1;\r\n            var dyn;\r\n            if (q == this.numElementsS ){\r\n                e1 = elementsD[p];\r\n                dyn = true;\r\n                p++;\r\n            }else{\r\n                var d = elementsD[p];\r\n                var s = elementsS[q];\r\n                if( d.value < s.value ){\r\n                    e1 = d;\r\n                    dyn = true;\r\n                    p++;\r\n                }else{\r\n                    e1 = s;\r\n                    dyn = false;\r\n                    q++;\r\n                }\r\n            }\r\n            if( !e1.max ){\r\n                var s1 = e1.proxy.shape;\r\n                var min1 = e1.min1.value;\r\n                var max1 = e1.max1.value;\r\n                var min2 = e1.min2.value;\r\n                var max2 = e1.max2.value;\r\n\r\n                for( var e2 = activeD; e2 != null; e2 = e2.pair ) {// test for dynamic\r\n                    var s2 = e2.proxy.shape;\r\n\r\n                    this.numPairChecks++;\r\n                    if( min1 > e2.max1.value || max1 < e2.min1.value || min2 > e2.max2.value || max2 < e2.min2.value || !this.isAvailablePair( s1, s2 ) ) continue;\r\n                    this.addPair( s1, s2 );\r\n                }\r\n                if( dyn ){\r\n                    for( e2 = activeS; e2 != null; e2 = e2.pair ) {// test for static\r\n                        s2 = e2.proxy.shape;\r\n\r\n                        this.numPairChecks++;\r\n\r\n                        if( min1 > e2.max1.value || max1 < e2.min1.value|| min2 > e2.max2.value || max2 < e2.min2.value || !this.isAvailablePair(s1,s2) ) continue;\r\n                        this.addPair( s1, s2 );\r\n                    }\r\n                    e1.pair = activeD;\r\n                    activeD = e1;\r\n                }else{\r\n                    e1.pair = activeS;\r\n                    activeS = e1;\r\n                }\r\n            }else{\r\n                var min = e1.pair;\r\n                if( dyn ){\r\n                    if( min == activeD ){\r\n                        activeD = activeD.pair;\r\n                        continue;\r\n                    }else{\r\n                        e1 = activeD;\r\n                    }\r\n                }else{\r\n                    if( min == activeS ){\r\n                        activeS = activeS.pair;\r\n                        continue;\r\n                    }else{\r\n                        e1 = activeS;\r\n                    }\r\n                }\r\n                do{\r\n                    e2 = e1.pair;\r\n                    if( e2 == min ){\r\n                        e1.pair = e2.pair;\r\n                        break;\r\n                    }\r\n                    e1 = e2;\r\n                }while( e1 != null );\r\n            }\r\n        }\r\n        this.index2 = (this.index1|this.index2)^3;\r\n        \r\n    }\r\n\r\n});\n\n/**\r\n* A node of the dynamic bounding volume tree.\r\n* @author saharan\r\n*/\r\n\r\nfunction DBVTNode(){\r\n    \r\n\t// The first child node of this node.\r\n    this.child1 = null;\r\n    // The second child node of this node.\r\n    this.child2 = null;\r\n    //  The parent node of this tree.\r\n    this.parent = null;\r\n    // The proxy of this node. This has no value if this node is not leaf.\r\n    this.proxy = null;\r\n    // The maximum distance from leaf nodes.\r\n    this.height = 0;\r\n    // The AABB of this node.\r\n    this.aabb = new AABB();\r\n\r\n}\n\n/**\r\n * A dynamic bounding volume tree for the broad-phase algorithm.\r\n *\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction DBVT(){\r\n\r\n    // The root of the tree.\r\n    this.root = null;\r\n    this.freeNodes = [];\r\n    this.freeNodes.length = 16384;\r\n    this.numFreeNodes = 0;\r\n    this.aabb = new AABB();\r\n\r\n}\r\n\r\nObject.assign( DBVT.prototype, {\r\n\r\n    DBVT: true,\r\n\r\n    moveLeaf: function( leaf ) {\r\n\r\n        this.deleteLeaf( leaf );\r\n        this.insertLeaf( leaf );\r\n    \r\n    },\r\n\r\n    insertLeaf: function ( leaf ) {\r\n\r\n        if(this.root == null){\r\n            this.root = leaf;\r\n            return;\r\n        }\r\n        var lb = leaf.aabb;\r\n        var sibling = this.root;\r\n        var oldArea;\r\n        var newArea;\r\n        while(sibling.proxy == null){ // descend the node to search the best pair\r\n            var c1 = sibling.child1;\r\n            var c2 = sibling.child2;\r\n            var b = sibling.aabb;\r\n            var c1b = c1.aabb;\r\n            var c2b = c2.aabb;\r\n            oldArea = b.surfaceArea();\r\n            this.aabb.combine(lb,b);\r\n            newArea = this.aabb.surfaceArea();\r\n            var creatingCost = newArea*2;\r\n            var incrementalCost = (newArea-oldArea)*2; // cost of creating a new pair with the node\r\n            var discendingCost1 = incrementalCost;\r\n            this.aabb.combine(lb,c1b);\r\n            if(c1.proxy!=null){\r\n                // leaf cost = area(combined aabb)\r\n                discendingCost1+=this.aabb.surfaceArea();\r\n            }else{\r\n                // node cost = area(combined aabb) - area(old aabb)\r\n                discendingCost1+=this.aabb.surfaceArea()-c1b.surfaceArea();\r\n            }\r\n            var discendingCost2=incrementalCost;\r\n            this.aabb.combine(lb,c2b);\r\n            if(c2.proxy!=null){\r\n                // leaf cost = area(combined aabb)\r\n                discendingCost2+=this.aabb.surfaceArea();\r\n            }else{\r\n                // node cost = area(combined aabb) - area(old aabb)\r\n                discendingCost2+=this.aabb.surfaceArea()-c2b.surfaceArea();\r\n            }\r\n            if(discendingCost1<discendingCost2){\r\n                if(creatingCost<discendingCost1){\r\n                    break;// stop descending\r\n                }else{\r\n                    sibling = c1;// descend into first child\r\n                }\r\n            }else{\r\n                if(creatingCost<discendingCost2){\r\n                    break;// stop descending\r\n                }else{\r\n                    sibling = c2;// descend into second child\r\n                }\r\n            }\r\n        }\r\n        var oldParent = sibling.parent;\r\n        var newParent;\r\n        if(this.numFreeNodes>0){\r\n            newParent = this.freeNodes[--this.numFreeNodes];\r\n        }else{\r\n            newParent = new DBVTNode();\r\n        }\r\n\r\n        newParent.parent = oldParent;\r\n        newParent.child1 = leaf;\r\n        newParent.child2 = sibling;\r\n        newParent.aabb.combine(leaf.aabb,sibling.aabb);\r\n        newParent.height = sibling.height+1;\r\n        sibling.parent = newParent;\r\n        leaf.parent = newParent;\r\n        if(sibling == this.root){\r\n            // replace root\r\n            this.root = newParent;\r\n        }else{\r\n            // replace child\r\n            if(oldParent.child1 == sibling){\r\n                oldParent.child1 = newParent;\r\n            }else{\r\n                oldParent.child2 = newParent;\r\n            }\r\n        }\r\n        // update whole tree\r\n        do{\r\n            newParent = this.balance(newParent);\r\n            this.fix(newParent);\r\n            newParent = newParent.parent;\r\n        }while(newParent != null);\r\n    },\r\n\r\n    getBalance: function( node ) {\r\n\r\n        if(node.proxy!=null)return 0;\r\n        return node.child1.height-node.child2.height;\r\n\r\n    },\r\n\r\n    deleteLeaf: function( leaf ) {\r\n\r\n        if(leaf == this.root){\r\n            this.root = null;\r\n            return;\r\n        }\r\n        var parent = leaf.parent;\r\n        var sibling;\r\n        if(parent.child1==leaf){\r\n            sibling=parent.child2;\r\n        }else{\r\n            sibling=parent.child1;\r\n        }\r\n        if(parent==this.root){\r\n            this.root=sibling;\r\n            sibling.parent=null;\r\n            return;\r\n        }\r\n        var grandParent = parent.parent;\r\n        sibling.parent = grandParent;\r\n        if(grandParent.child1 == parent ) {\r\n            grandParent.child1 = sibling;\r\n        }else{\r\n            grandParent.child2 = sibling;\r\n        }\r\n        if(this.numFreeNodes<16384){\r\n            this.freeNodes[this.numFreeNodes++] = parent;\r\n        }\r\n        do{\r\n            grandParent = this.balance(grandParent);\r\n            this.fix(grandParent);\r\n            grandParent = grandParent.parent;\r\n        }while( grandParent != null );\r\n    \r\n    },\r\n\r\n    balance: function( node ) {\r\n\r\n        var nh = node.height;\r\n        if(nh<2){\r\n            return node;\r\n        }\r\n        var p = node.parent;\r\n        var l = node.child1;\r\n        var r = node.child2;\r\n        var lh = l.height;\r\n        var rh = r.height;\r\n        var balance = lh-rh;\r\n        var t;// for bit operation\r\n\r\n        //          [ N ]\r\n        //         /     \\\r\n        //    [ L ]       [ R ]\r\n        //     / \\         / \\\r\n        // [L-L] [L-R] [R-L] [R-R]\r\n\r\n        // Is the tree balanced?\r\n        if(balance>1){\r\n            var ll = l.child1;\r\n            var lr = l.child2;\r\n            var llh = ll.height;\r\n            var lrh = lr.height;\r\n\r\n            // Is L-L higher than L-R?\r\n            if(llh>lrh){\r\n                // set N to L-R\r\n                l.child2 = node;\r\n                node.parent = l;\r\n\r\n                //          [ L ]\r\n                //         /     \\\r\n                //    [L-L]       [ N ]\r\n                //     / \\         / \\\r\n                // [...] [...] [ L ] [ R ]\r\n                \r\n                // set L-R\r\n                node.child1 = lr;\r\n                lr.parent = node;\r\n\r\n                //          [ L ]\r\n                //         /     \\\r\n                //    [L-L]       [ N ]\r\n                //     / \\         / \\\r\n                // [...] [...] [L-R] [ R ]\r\n                \r\n                // fix bounds and heights\r\n                node.aabb.combine( lr.aabb, r.aabb );\r\n                t = lrh-rh;\r\n                node.height=lrh-(t&t>>31)+1;\r\n                l.aabb.combine(ll.aabb,node.aabb);\r\n                t=llh-nh;\r\n                l.height=llh-(t&t>>31)+1;\r\n            }else{\r\n                // set N to L-L\r\n                l.child1=node;\r\n                node.parent=l;\r\n\r\n                //          [ L ]\r\n                //         /     \\\r\n                //    [ N ]       [L-R]\r\n                //     / \\         / \\\r\n                // [ L ] [ R ] [...] [...]\r\n                \r\n                // set L-L\r\n                node.child1 = ll;\r\n                ll.parent = node;\r\n\r\n                //          [ L ]\r\n                //         /     \\\r\n                //    [ N ]       [L-R]\r\n                //     / \\         / \\\r\n                // [L-L] [ R ] [...] [...]\r\n                \r\n                // fix bounds and heights\r\n                node.aabb.combine(ll.aabb,r.aabb);\r\n                t = llh - rh;\r\n                node.height=llh-(t&t>>31)+1;\r\n\r\n                l.aabb.combine(node.aabb,lr.aabb);\r\n                t=nh-lrh;\r\n                l.height=nh-(t&t>>31)+1;\r\n            }\r\n            // set new parent of L\r\n            if(p!=null){\r\n                if(p.child1==node){\r\n                    p.child1=l;\r\n                }else{\r\n                    p.child2=l;\r\n                }\r\n            }else{\r\n                this.root=l;\r\n            }\r\n            l.parent=p;\r\n            return l;\r\n        }else if(balance<-1){\r\n            var rl = r.child1;\r\n            var rr = r.child2;\r\n            var rlh = rl.height;\r\n            var rrh = rr.height;\r\n\r\n            // Is R-L higher than R-R?\r\n            if( rlh > rrh ) {\r\n                // set N to R-R\r\n                r.child2 = node;\r\n                node.parent = r;\r\n\r\n                //          [ R ]\r\n                //         /     \\\r\n                //    [R-L]       [ N ]\r\n                //     / \\         / \\\r\n                // [...] [...] [ L ] [ R ]\r\n                \r\n                // set R-R\r\n                node.child2 = rr;\r\n                rr.parent = node;\r\n\r\n                //          [ R ]\r\n                //         /     \\\r\n                //    [R-L]       [ N ]\r\n                //     / \\         / \\\r\n                // [...] [...] [ L ] [R-R]\r\n                \r\n                // fix bounds and heights\r\n                node.aabb.combine(l.aabb,rr.aabb);\r\n                t = lh-rrh;\r\n                node.height = lh-(t&t>>31)+1;\r\n                r.aabb.combine(rl.aabb,node.aabb);\r\n                t = rlh-nh;\r\n                r.height = rlh-(t&t>>31)+1;\r\n            }else{\r\n                // set N to R-L\r\n                r.child1 = node;\r\n                node.parent = r;\r\n                //          [ R ]\r\n                //         /     \\\r\n                //    [ N ]       [R-R]\r\n                //     / \\         / \\\r\n                // [ L ] [ R ] [...] [...]\r\n                \r\n                // set R-L\r\n                node.child2 = rl;\r\n                rl.parent = node;\r\n\r\n                //          [ R ]\r\n                //         /     \\\r\n                //    [ N ]       [R-R]\r\n                //     / \\         / \\\r\n                // [ L ] [R-L] [...] [...]\r\n                \r\n                // fix bounds and heights\r\n                node.aabb.combine(l.aabb,rl.aabb);\r\n                t=lh-rlh;\r\n                node.height=lh-(t&t>>31)+1;\r\n                r.aabb.combine(node.aabb,rr.aabb);\r\n                t=nh-rrh;\r\n                r.height=nh-(t&t>>31)+1;\r\n            }\r\n            // set new parent of R\r\n            if(p!=null){\r\n                if(p.child1==node){\r\n                    p.child1=r;\r\n                }else{\r\n                    p.child2=r;\r\n                }\r\n            }else{\r\n                this.root=r;\r\n            }\r\n            r.parent=p;\r\n            return r;\r\n        }\r\n        return node;\r\n    },\r\n\r\n    fix: function ( node ) {\r\n\r\n        var c1 = node.child1;\r\n        var c2 = node.child2;\r\n        node.aabb.combine( c1.aabb, c2.aabb );\r\n        node.height = c1.height < c2.height ? c2.height+1 : c1.height+1; \r\n\r\n    }\r\n    \r\n});\n\n/**\r\n* A proxy for dynamic bounding volume tree broad-phase.\r\n* @author saharan\r\n*/\r\n\r\nfunction DBVTProxy ( shape ) {\r\n\r\n    Proxy.call( this, shape);\r\n    // The leaf of the proxy.\r\n    this.leaf = new DBVTNode();\r\n    this.leaf.proxy = this;\r\n\r\n}\r\n\r\nDBVTProxy.prototype = Object.assign( Object.create( Proxy.prototype ), {\r\n\r\n    constructor: DBVTProxy,\r\n\r\n    update: function () {\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * A broad-phase algorithm using dynamic bounding volume tree.\r\n *\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\nfunction DBVTBroadPhase(){\r\n\r\n    BroadPhase.call( this );\r\n\r\n    this.types = BR_BOUNDING_VOLUME_TREE;\r\n\r\n    this.tree = new DBVT();\r\n    this.stack = [];\r\n    this.leaves = [];\r\n    this.numLeaves = 0;\r\n\r\n}\r\n\r\nDBVTBroadPhase.prototype = Object.assign( Object.create( BroadPhase.prototype ), {\r\n\r\n    constructor: DBVTBroadPhase,\r\n\r\n    createProxy: function ( shape ) {\r\n\r\n        return new DBVTProxy( shape );\r\n\r\n    },\r\n\r\n    addProxy: function ( proxy ) {\r\n\r\n        this.tree.insertLeaf( proxy.leaf );\r\n        this.leaves.push( proxy.leaf );\r\n        this.numLeaves++;\r\n\r\n    },\r\n\r\n    removeProxy: function ( proxy ) {\r\n\r\n        this.tree.deleteLeaf( proxy.leaf );\r\n        var n = this.leaves.indexOf( proxy.leaf );\r\n        if ( n > -1 ) {\r\n            this.leaves.splice(n,1);\r\n            this.numLeaves--;\r\n        }\r\n\r\n    },\r\n\r\n    collectPairs: function () {\r\n\r\n        if ( this.numLeaves < 2 ) return;\r\n\r\n        var leaf, margin = 0.1, i = this.numLeaves;\r\n\r\n        while(i--){\r\n\r\n            leaf = this.leaves[i];\r\n\r\n            if ( leaf.proxy.aabb.intersectTestTwo( leaf.aabb ) ){\r\n\r\n                leaf.aabb.copy( leaf.proxy.aabb, margin );\r\n                this.tree.deleteLeaf( leaf );\r\n                this.tree.insertLeaf( leaf );\r\n                this.collide( leaf, this.tree.root );\r\n\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    collide: function ( node1, node2 ) {\r\n\r\n        var stackCount = 2;\r\n        var s1, s2, n1, n2, l1, l2;\r\n        this.stack[0] = node1;\r\n        this.stack[1] = node2;\r\n\r\n        while( stackCount > 0 ){\r\n\r\n            n1 = this.stack[--stackCount];\r\n            n2 = this.stack[--stackCount];\r\n            l1 = n1.proxy != null;\r\n            l2 = n2.proxy != null;\r\n            \r\n            this.numPairChecks++;\r\n\r\n            if( l1 && l2 ){\r\n                s1 = n1.proxy.shape;\r\n                s2 = n2.proxy.shape;\r\n                if ( s1 == s2 || s1.aabb.intersectTest( s2.aabb ) || !this.isAvailablePair( s1, s2 ) ) continue;\r\n\r\n                this.addPair(s1,s2);\r\n\r\n            }else{\r\n\r\n                if ( n1.aabb.intersectTest( n2.aabb ) ) continue;\r\n                \r\n                /*if(stackCount+4>=this.maxStack){// expand the stack\r\n                    //this.maxStack<<=1;\r\n                    this.maxStack*=2;\r\n                    var newStack = [];// vector\r\n                    newStack.length = this.maxStack;\r\n                    for(var i=0;i<stackCount;i++){\r\n                        newStack[i] = this.stack[i];\r\n                    }\r\n                    this.stack = newStack;\r\n                }*/\r\n\r\n                if( l2 || !l1 && (n1.aabb.surfaceArea() > n2.aabb.surfaceArea()) ){\r\n                    this.stack[stackCount++] = n1.child1;\r\n                    this.stack[stackCount++] = n2;\r\n                    this.stack[stackCount++] = n1.child2;\r\n                    this.stack[stackCount++] = n2;\r\n                }else{\r\n                    this.stack[stackCount++] = n1;\r\n                    this.stack[stackCount++] = n2.child1;\r\n                    this.stack[stackCount++] = n1;\r\n                    this.stack[stackCount++] = n2.child2;\r\n                }\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n});\n\nfunction CollisionDetector (){\r\n\r\n    this.flip = false;\r\n\r\n}\r\n\r\nObject.assign( CollisionDetector.prototype, {\r\n\r\n    CollisionDetector: true,\r\n\r\n    detectCollision: function ( shape1, shape2, manifold ) {\r\n\r\n        printError(\"CollisionDetector\", \"Inheritance error.\");\r\n\r\n    }\r\n\r\n} );\n\n/**\r\n * A collision detector which detects collisions between two boxes.\r\n * @author saharan\r\n */\r\nfunction BoxBoxCollisionDetector() {\r\n\r\n    CollisionDetector.call( this );\r\n    this.clipVertices1 = new Float32Array( 24 ); // 8 vertices x,y,z\r\n    this.clipVertices2 = new Float32Array( 24 );\r\n    this.used = new Float32Array( 8 );\r\n    \r\n    this.INF = 1/0;\r\n\r\n}\r\n\r\nBoxBoxCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\r\n\r\n    constructor: BoxBoxCollisionDetector,\r\n\r\n    detectCollision: function ( shape1, shape2, manifold ) {\r\n        // What you are doing \r\n        // · I to prepare a separate axis of the fifteen \r\n        //-Six in each of three normal vectors of the xyz direction of the box both \r\n        // · Remaining nine 3x3 a vector perpendicular to the side of the box 2 and the side of the box 1 \r\n        // · Calculate the depth to the separation axis \r\n\r\n        // Calculates the distance using the inner product and put the amount of embedment \r\n        // · However a vertical separation axis and side to weight a little to avoid vibration \r\n        // And end when there is a separate axis that is remote even one \r\n        // · I look for separation axis with little to dent most \r\n        // Men and if separation axis of the first six - end collision \r\n        // Heng If it separate axis of nine other - side collision \r\n        // Heng - case of a side collision \r\n        // · Find points of two sides on which you made ​​the separation axis \r\n\r\n        // Calculates the point of closest approach of a straight line consisting of separate axis points obtained, and the collision point \r\n        //-Surface - the case of the plane crash \r\n        //-Box A, box B and the other a box of better made ​​a separate axis \r\n        // • The surface A and the plane that made the separation axis of the box A, and B to the surface the face of the box B close in the opposite direction to the most isolated axis \r\n\r\n        // When viewed from the front surface A, and the cut part exceeding the area of the surface A is a surface B \r\n        //-Plane B becomes the 3-8 triangle, I a candidate for the collision point the vertex of surface B \r\n        // • If more than one candidate 5 exists, scraping up to four \r\n\r\n        // For potential collision points of all, to examine the distance between the surface A \r\n        // • If you were on the inside surface of A, and the collision point\r\n\r\n        var b1;\r\n        var b2;\r\n        if(shape1.id<shape2.id){\r\n            b1=(shape1);\r\n            b2=(shape2);\r\n        }else{\r\n            b1=(shape2);\r\n            b2=(shape1);\r\n        }\r\n        var V1 = b1.elements;\r\n        var V2 = b2.elements;\r\n\r\n        var D1 = b1.dimentions;\r\n        var D2 = b2.dimentions;\r\n\r\n        var p1=b1.position;\r\n        var p2=b2.position;\r\n        var p1x=p1.x;\r\n        var p1y=p1.y;\r\n        var p1z=p1.z;\r\n        var p2x=p2.x;\r\n        var p2y=p2.y;\r\n        var p2z=p2.z;\r\n        // diff\r\n        var dx=p2x-p1x;\r\n        var dy=p2y-p1y;\r\n        var dz=p2z-p1z;\r\n        // distance\r\n        var w1=b1.halfWidth;\r\n        var h1=b1.halfHeight;\r\n        var d1=b1.halfDepth;\r\n        var w2=b2.halfWidth;\r\n        var h2=b2.halfHeight;\r\n        var d2=b2.halfDepth;\r\n        // direction\r\n\r\n        // ----------------------------\r\n        // 15 separating axes\r\n        // 1~6: face\r\n        // 7~f: edge\r\n        // http://marupeke296.com/COL_3D_No13_OBBvsOBB.html\r\n        // ----------------------------\r\n        \r\n        var a1x=D1[0];\r\n        var a1y=D1[1];\r\n        var a1z=D1[2];\r\n        var a2x=D1[3];\r\n        var a2y=D1[4];\r\n        var a2z=D1[5];\r\n        var a3x=D1[6];\r\n        var a3y=D1[7];\r\n        var a3z=D1[8];\r\n        var d1x=D1[9];\r\n        var d1y=D1[10];\r\n        var d1z=D1[11];\r\n        var d2x=D1[12];\r\n        var d2y=D1[13];\r\n        var d2z=D1[14];\r\n        var d3x=D1[15];\r\n        var d3y=D1[16];\r\n        var d3z=D1[17];\r\n\r\n        var a4x=D2[0];\r\n        var a4y=D2[1];\r\n        var a4z=D2[2];\r\n        var a5x=D2[3];\r\n        var a5y=D2[4];\r\n        var a5z=D2[5];\r\n        var a6x=D2[6];\r\n        var a6y=D2[7];\r\n        var a6z=D2[8];\r\n        var d4x=D2[9];\r\n        var d4y=D2[10];\r\n        var d4z=D2[11];\r\n        var d5x=D2[12];\r\n        var d5y=D2[13];\r\n        var d5z=D2[14];\r\n        var d6x=D2[15];\r\n        var d6y=D2[16];\r\n        var d6z=D2[17];\r\n        \r\n        var a7x=a1y*a4z-a1z*a4y;\r\n        var a7y=a1z*a4x-a1x*a4z;\r\n        var a7z=a1x*a4y-a1y*a4x;\r\n        var a8x=a1y*a5z-a1z*a5y;\r\n        var a8y=a1z*a5x-a1x*a5z;\r\n        var a8z=a1x*a5y-a1y*a5x;\r\n        var a9x=a1y*a6z-a1z*a6y;\r\n        var a9y=a1z*a6x-a1x*a6z;\r\n        var a9z=a1x*a6y-a1y*a6x;\r\n        var aax=a2y*a4z-a2z*a4y;\r\n        var aay=a2z*a4x-a2x*a4z;\r\n        var aaz=a2x*a4y-a2y*a4x;\r\n        var abx=a2y*a5z-a2z*a5y;\r\n        var aby=a2z*a5x-a2x*a5z;\r\n        var abz=a2x*a5y-a2y*a5x;\r\n        var acx=a2y*a6z-a2z*a6y;\r\n        var acy=a2z*a6x-a2x*a6z;\r\n        var acz=a2x*a6y-a2y*a6x;\r\n        var adx=a3y*a4z-a3z*a4y;\r\n        var ady=a3z*a4x-a3x*a4z;\r\n        var adz=a3x*a4y-a3y*a4x;\r\n        var aex=a3y*a5z-a3z*a5y;\r\n        var aey=a3z*a5x-a3x*a5z;\r\n        var aez=a3x*a5y-a3y*a5x;\r\n        var afx=a3y*a6z-a3z*a6y;\r\n        var afy=a3z*a6x-a3x*a6z;\r\n        var afz=a3x*a6y-a3y*a6x;\r\n        // right or left flags\r\n        var right1;\r\n        var right2;\r\n        var right3;\r\n        var right4;\r\n        var right5;\r\n        var right6;\r\n        var right7;\r\n        var right8;\r\n        var right9;\r\n        var righta;\r\n        var rightb;\r\n        var rightc;\r\n        var rightd;\r\n        var righte;\r\n        var rightf;\r\n        // overlapping distances\r\n        var overlap1;\r\n        var overlap2;\r\n        var overlap3;\r\n        var overlap4;\r\n        var overlap5;\r\n        var overlap6;\r\n        var overlap7;\r\n        var overlap8;\r\n        var overlap9;\r\n        var overlapa;\r\n        var overlapb;\r\n        var overlapc;\r\n        var overlapd;\r\n        var overlape;\r\n        var overlapf;\r\n        // invalid flags\r\n        var invalid7=false;\r\n        var invalid8=false;\r\n        var invalid9=false;\r\n        var invalida=false;\r\n        var invalidb=false;\r\n        var invalidc=false;\r\n        var invalidd=false;\r\n        var invalide=false;\r\n        var invalidf=false;\r\n        // temporary variables\r\n        var len;\r\n        var len1;\r\n        var len2;\r\n        var dot1;\r\n        var dot2;\r\n        var dot3;\r\n        // try axis 1\r\n        len=a1x*dx+a1y*dy+a1z*dz;\r\n        right1=len>0;\r\n        if(!right1)len=-len;\r\n        len1=w1;\r\n        dot1=a1x*a4x+a1y*a4y+a1z*a4z;\r\n        dot2=a1x*a5x+a1y*a5y+a1z*a5z;\r\n        dot3=a1x*a6x+a1y*a6y+a1z*a6z;\r\n        if(dot1<0)dot1=-dot1;\r\n        if(dot2<0)dot2=-dot2;\r\n        if(dot3<0)dot3=-dot3;\r\n        len2=dot1*w2+dot2*h2+dot3*d2;\r\n        overlap1=len-len1-len2;\r\n        if(overlap1>0)return;\r\n        // try axis 2\r\n        len=a2x*dx+a2y*dy+a2z*dz;\r\n        right2=len>0;\r\n        if(!right2)len=-len;\r\n        len1=h1;\r\n        dot1=a2x*a4x+a2y*a4y+a2z*a4z;\r\n        dot2=a2x*a5x+a2y*a5y+a2z*a5z;\r\n        dot3=a2x*a6x+a2y*a6y+a2z*a6z;\r\n        if(dot1<0)dot1=-dot1;\r\n        if(dot2<0)dot2=-dot2;\r\n        if(dot3<0)dot3=-dot3;\r\n        len2=dot1*w2+dot2*h2+dot3*d2;\r\n        overlap2=len-len1-len2;\r\n        if(overlap2>0)return;\r\n        // try axis 3\r\n        len=a3x*dx+a3y*dy+a3z*dz;\r\n        right3=len>0;\r\n        if(!right3)len=-len;\r\n        len1=d1;\r\n        dot1=a3x*a4x+a3y*a4y+a3z*a4z;\r\n        dot2=a3x*a5x+a3y*a5y+a3z*a5z;\r\n        dot3=a3x*a6x+a3y*a6y+a3z*a6z;\r\n        if(dot1<0)dot1=-dot1;\r\n        if(dot2<0)dot2=-dot2;\r\n        if(dot3<0)dot3=-dot3;\r\n        len2=dot1*w2+dot2*h2+dot3*d2;\r\n        overlap3=len-len1-len2;\r\n        if(overlap3>0)return;\r\n        // try axis 4\r\n        len=a4x*dx+a4y*dy+a4z*dz;\r\n        right4=len>0;\r\n        if(!right4)len=-len;\r\n        dot1=a4x*a1x+a4y*a1y+a4z*a1z;\r\n        dot2=a4x*a2x+a4y*a2y+a4z*a2z;\r\n        dot3=a4x*a3x+a4y*a3y+a4z*a3z;\r\n        if(dot1<0)dot1=-dot1;\r\n        if(dot2<0)dot2=-dot2;\r\n        if(dot3<0)dot3=-dot3;\r\n        len1=dot1*w1+dot2*h1+dot3*d1;\r\n        len2=w2;\r\n        overlap4=(len-len1-len2)*1.0;\r\n        if(overlap4>0)return;\r\n        // try axis 5\r\n        len=a5x*dx+a5y*dy+a5z*dz;\r\n        right5=len>0;\r\n        if(!right5)len=-len;\r\n        dot1=a5x*a1x+a5y*a1y+a5z*a1z;\r\n        dot2=a5x*a2x+a5y*a2y+a5z*a2z;\r\n        dot3=a5x*a3x+a5y*a3y+a5z*a3z;\r\n        if(dot1<0)dot1=-dot1;\r\n        if(dot2<0)dot2=-dot2;\r\n        if(dot3<0)dot3=-dot3;\r\n        len1=dot1*w1+dot2*h1+dot3*d1;\r\n        len2=h2;\r\n        overlap5=(len-len1-len2)*1.0;\r\n        if(overlap5>0)return;\r\n        // try axis 6\r\n        len=a6x*dx+a6y*dy+a6z*dz;\r\n        right6=len>0;\r\n        if(!right6)len=-len;\r\n        dot1=a6x*a1x+a6y*a1y+a6z*a1z;\r\n        dot2=a6x*a2x+a6y*a2y+a6z*a2z;\r\n        dot3=a6x*a3x+a6y*a3y+a6z*a3z;\r\n        if(dot1<0)dot1=-dot1;\r\n        if(dot2<0)dot2=-dot2;\r\n        if(dot3<0)dot3=-dot3;\r\n        len1=dot1*w1+dot2*h1+dot3*d1;\r\n        len2=d2;\r\n        overlap6=(len-len1-len2)*1.0;\r\n        if(overlap6>0)return;\r\n        // try axis 7\r\n        len=a7x*a7x+a7y*a7y+a7z*a7z;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            a7x*=len;\r\n            a7y*=len;\r\n            a7z*=len;\r\n            len=a7x*dx+a7y*dy+a7z*dz;\r\n            right7=len>0;\r\n            if(!right7)len=-len;\r\n            dot1=a7x*a2x+a7y*a2y+a7z*a2z;\r\n            dot2=a7x*a3x+a7y*a3y+a7z*a3z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*h1+dot2*d1;\r\n            dot1=a7x*a5x+a7y*a5y+a7z*a5z;\r\n            dot2=a7x*a6x+a7y*a6y+a7z*a6z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*h2+dot2*d2;\r\n            overlap7=len-len1-len2;\r\n            if(overlap7>0)return;\r\n        }else{\r\n            right7=false;\r\n            overlap7=0;\r\n            invalid7=true;\r\n        }\r\n        // try axis 8\r\n        len=a8x*a8x+a8y*a8y+a8z*a8z;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            a8x*=len;\r\n            a8y*=len;\r\n            a8z*=len;\r\n            len=a8x*dx+a8y*dy+a8z*dz;\r\n            right8=len>0;\r\n            if(!right8)len=-len;\r\n            dot1=a8x*a2x+a8y*a2y+a8z*a2z;\r\n            dot2=a8x*a3x+a8y*a3y+a8z*a3z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*h1+dot2*d1;\r\n            dot1=a8x*a4x+a8y*a4y+a8z*a4z;\r\n            dot2=a8x*a6x+a8y*a6y+a8z*a6z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*w2+dot2*d2;\r\n            overlap8=len-len1-len2;\r\n            if(overlap8>0)return;\r\n        }else{\r\n            right8=false;\r\n            overlap8=0;\r\n            invalid8=true;\r\n        }\r\n        // try axis 9\r\n        len=a9x*a9x+a9y*a9y+a9z*a9z;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            a9x*=len;\r\n            a9y*=len;\r\n            a9z*=len;\r\n            len=a9x*dx+a9y*dy+a9z*dz;\r\n            right9=len>0;\r\n            if(!right9)len=-len;\r\n            dot1=a9x*a2x+a9y*a2y+a9z*a2z;\r\n            dot2=a9x*a3x+a9y*a3y+a9z*a3z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*h1+dot2*d1;\r\n            dot1=a9x*a4x+a9y*a4y+a9z*a4z;\r\n            dot2=a9x*a5x+a9y*a5y+a9z*a5z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*w2+dot2*h2;\r\n            overlap9=len-len1-len2;\r\n            if(overlap9>0)return;\r\n        }else{\r\n            right9=false;\r\n            overlap9=0;\r\n            invalid9=true;\r\n        }\r\n        // try axis 10\r\n        len=aax*aax+aay*aay+aaz*aaz;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            aax*=len;\r\n            aay*=len;\r\n            aaz*=len;\r\n            len=aax*dx+aay*dy+aaz*dz;\r\n            righta=len>0;\r\n            if(!righta)len=-len;\r\n            dot1=aax*a1x+aay*a1y+aaz*a1z;\r\n            dot2=aax*a3x+aay*a3y+aaz*a3z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*w1+dot2*d1;\r\n            dot1=aax*a5x+aay*a5y+aaz*a5z;\r\n            dot2=aax*a6x+aay*a6y+aaz*a6z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*h2+dot2*d2;\r\n            overlapa=len-len1-len2;\r\n            if(overlapa>0)return;\r\n        }else{\r\n            righta=false;\r\n            overlapa=0;\r\n            invalida=true;\r\n        }\r\n        // try axis 11\r\n        len=abx*abx+aby*aby+abz*abz;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            abx*=len;\r\n            aby*=len;\r\n            abz*=len;\r\n            len=abx*dx+aby*dy+abz*dz;\r\n            rightb=len>0;\r\n            if(!rightb)len=-len;\r\n            dot1=abx*a1x+aby*a1y+abz*a1z;\r\n            dot2=abx*a3x+aby*a3y+abz*a3z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*w1+dot2*d1;\r\n            dot1=abx*a4x+aby*a4y+abz*a4z;\r\n            dot2=abx*a6x+aby*a6y+abz*a6z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*w2+dot2*d2;\r\n            overlapb=len-len1-len2;\r\n            if(overlapb>0)return;\r\n        }else{\r\n            rightb=false;\r\n            overlapb=0;\r\n            invalidb=true;\r\n        }\r\n        // try axis 12\r\n        len=acx*acx+acy*acy+acz*acz;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            acx*=len;\r\n            acy*=len;\r\n            acz*=len;\r\n            len=acx*dx+acy*dy+acz*dz;\r\n            rightc=len>0;\r\n            if(!rightc)len=-len;\r\n            dot1=acx*a1x+acy*a1y+acz*a1z;\r\n            dot2=acx*a3x+acy*a3y+acz*a3z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*w1+dot2*d1;\r\n            dot1=acx*a4x+acy*a4y+acz*a4z;\r\n            dot2=acx*a5x+acy*a5y+acz*a5z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*w2+dot2*h2;\r\n            overlapc=len-len1-len2;\r\n            if(overlapc>0)return;\r\n        }else{\r\n            rightc=false;\r\n            overlapc=0;\r\n            invalidc=true;\r\n        }\r\n        // try axis 13\r\n        len=adx*adx+ady*ady+adz*adz;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            adx*=len;\r\n            ady*=len;\r\n            adz*=len;\r\n            len=adx*dx+ady*dy+adz*dz;\r\n            rightd=len>0;\r\n            if(!rightd)len=-len;\r\n            dot1=adx*a1x+ady*a1y+adz*a1z;\r\n            dot2=adx*a2x+ady*a2y+adz*a2z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*w1+dot2*h1;\r\n            dot1=adx*a5x+ady*a5y+adz*a5z;\r\n            dot2=adx*a6x+ady*a6y+adz*a6z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*h2+dot2*d2;\r\n            overlapd=len-len1-len2;\r\n            if(overlapd>0)return;\r\n        }else{\r\n            rightd=false;\r\n            overlapd=0;\r\n            invalidd=true;\r\n        }\r\n        // try axis 14\r\n        len=aex*aex+aey*aey+aez*aez;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            aex*=len;\r\n            aey*=len;\r\n            aez*=len;\r\n            len=aex*dx+aey*dy+aez*dz;\r\n            righte=len>0;\r\n            if(!righte)len=-len;\r\n            dot1=aex*a1x+aey*a1y+aez*a1z;\r\n            dot2=aex*a2x+aey*a2y+aez*a2z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*w1+dot2*h1;\r\n            dot1=aex*a4x+aey*a4y+aez*a4z;\r\n            dot2=aex*a6x+aey*a6y+aez*a6z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*w2+dot2*d2;\r\n            overlape=len-len1-len2;\r\n            if(overlape>0)return;\r\n        }else{\r\n            righte=false;\r\n            overlape=0;\r\n            invalide=true;\r\n        }\r\n        // try axis 15\r\n        len=afx*afx+afy*afy+afz*afz;\r\n        if(len>1e-5){\r\n            len=1/_Math.sqrt(len);\r\n            afx*=len;\r\n            afy*=len;\r\n            afz*=len;\r\n            len=afx*dx+afy*dy+afz*dz;\r\n            rightf=len>0;\r\n            if(!rightf)len=-len;\r\n            dot1=afx*a1x+afy*a1y+afz*a1z;\r\n            dot2=afx*a2x+afy*a2y+afz*a2z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len1=dot1*w1+dot2*h1;\r\n            dot1=afx*a4x+afy*a4y+afz*a4z;\r\n            dot2=afx*a5x+afy*a5y+afz*a5z;\r\n            if(dot1<0)dot1=-dot1;\r\n            if(dot2<0)dot2=-dot2;\r\n            len2=dot1*w2+dot2*h2;\r\n            overlapf=len-len1-len2;\r\n            if(overlapf>0)return;\r\n        }else{\r\n            rightf=false;\r\n            overlapf=0;\r\n            invalidf=true;\r\n        }\r\n        // boxes are overlapping\r\n        var depth=overlap1;\r\n        var depth2=overlap1;\r\n        var minIndex=0;\r\n        var right=right1;\r\n        if(overlap2>depth2){\r\n            depth=overlap2;\r\n            depth2=overlap2;\r\n            minIndex=1;\r\n            right=right2;\r\n        }\r\n        if(overlap3>depth2){\r\n            depth=overlap3;\r\n            depth2=overlap3;\r\n            minIndex=2;\r\n            right=right3;\r\n        }\r\n        if(overlap4>depth2){\r\n            depth=overlap4;\r\n            depth2=overlap4;\r\n            minIndex=3;\r\n            right=right4;\r\n        }\r\n        if(overlap5>depth2){\r\n            depth=overlap5;\r\n            depth2=overlap5;\r\n            minIndex=4;\r\n            right=right5;\r\n        }\r\n        if(overlap6>depth2){\r\n            depth=overlap6;\r\n            depth2=overlap6;\r\n            minIndex=5;\r\n            right=right6;\r\n        }\r\n        if(overlap7-0.01>depth2&&!invalid7){\r\n            depth=overlap7;\r\n            depth2=overlap7-0.01;\r\n            minIndex=6;\r\n            right=right7;\r\n        }\r\n        if(overlap8-0.01>depth2&&!invalid8){\r\n            depth=overlap8;\r\n            depth2=overlap8-0.01;\r\n            minIndex=7;\r\n            right=right8;\r\n        }\r\n        if(overlap9-0.01>depth2&&!invalid9){\r\n            depth=overlap9;\r\n            depth2=overlap9-0.01;\r\n            minIndex=8;\r\n            right=right9;\r\n        }\r\n        if(overlapa-0.01>depth2&&!invalida){\r\n            depth=overlapa;\r\n            depth2=overlapa-0.01;\r\n            minIndex=9;\r\n            right=righta;\r\n        }\r\n        if(overlapb-0.01>depth2&&!invalidb){\r\n            depth=overlapb;\r\n            depth2=overlapb-0.01;\r\n            minIndex=10;\r\n            right=rightb;\r\n        }\r\n        if(overlapc-0.01>depth2&&!invalidc){\r\n            depth=overlapc;\r\n            depth2=overlapc-0.01;\r\n            minIndex=11;\r\n            right=rightc;\r\n        }\r\n        if(overlapd-0.01>depth2&&!invalidd){\r\n            depth=overlapd;\r\n            depth2=overlapd-0.01;\r\n            minIndex=12;\r\n            right=rightd;\r\n        }\r\n        if(overlape-0.01>depth2&&!invalide){\r\n            depth=overlape;\r\n            depth2=overlape-0.01;\r\n            minIndex=13;\r\n            right=righte;\r\n        }\r\n        if(overlapf-0.01>depth2&&!invalidf){\r\n            depth=overlapf;\r\n            minIndex=14;\r\n            right=rightf;\r\n        }\r\n        // normal\r\n        var nx=0;\r\n        var ny=0;\r\n        var nz=0;\r\n        // edge line or face side normal\r\n        var n1x=0;\r\n        var n1y=0;\r\n        var n1z=0;\r\n        var n2x=0;\r\n        var n2y=0;\r\n        var n2z=0;\r\n        // center of current face\r\n        var cx=0;\r\n        var cy=0;\r\n        var cz=0;\r\n        // face side\r\n        var s1x=0;\r\n        var s1y=0;\r\n        var s1z=0;\r\n        var s2x=0;\r\n        var s2y=0;\r\n        var s2z=0;\r\n        // swap b1 b2\r\n        var swap=false;\r\n\r\n        //_______________________________________\r\n\r\n        if(minIndex==0){// b1.x * b2\r\n            if(right){\r\n                cx=p1x+d1x; cy=p1y+d1y;  cz=p1z+d1z;\r\n                nx=a1x; ny=a1y; nz=a1z;\r\n            }else{\r\n                cx=p1x-d1x; cy=p1y-d1y; cz=p1z-d1z;\r\n                nx=-a1x; ny=-a1y; nz=-a1z;\r\n            }\r\n            s1x=d2x; s1y=d2y; s1z=d2z;\r\n            n1x=-a2x; n1y=-a2y; n1z=-a2z;\r\n            s2x=d3x; s2y=d3y; s2z=d3z;\r\n            n2x=-a3x; n2y=-a3y; n2z=-a3z;\r\n        }\r\n        else if(minIndex==1){// b1.y * b2\r\n            if(right){\r\n                cx=p1x+d2x; cy=p1y+d2y; cz=p1z+d2z;\r\n                nx=a2x; ny=a2y; nz=a2z;\r\n            }else{\r\n                cx=p1x-d2x; cy=p1y-d2y; cz=p1z-d2z;\r\n                nx=-a2x; ny=-a2y; nz=-a2z;\r\n            }\r\n            s1x=d1x; s1y=d1y; s1z=d1z;\r\n            n1x=-a1x; n1y=-a1y; n1z=-a1z;\r\n            s2x=d3x; s2y=d3y; s2z=d3z;\r\n            n2x=-a3x; n2y=-a3y; n2z=-a3z;\r\n        }\r\n        else if(minIndex==2){// b1.z * b2\r\n            if(right){\r\n                cx=p1x+d3x; cy=p1y+d3y; cz=p1z+d3z;\r\n                nx=a3x; ny=a3y; nz=a3z;\r\n            }else{\r\n                cx=p1x-d3x; cy=p1y-d3y; cz=p1z-d3z;\r\n                nx=-a3x; ny=-a3y; nz=-a3z;\r\n            }\r\n            s1x=d1x; s1y=d1y; s1z=d1z;\r\n            n1x=-a1x; n1y=-a1y; n1z=-a1z;\r\n            s2x=d2x; s2y=d2y; s2z=d2z;\r\n            n2x=-a2x; n2y=-a2y; n2z=-a2z;\r\n        }\r\n        else if(minIndex==3){// b2.x * b1\r\n            swap=true;\r\n            if(!right){\r\n                cx=p2x+d4x; cy=p2y+d4y; cz=p2z+d4z;\r\n                nx=a4x; ny=a4y; nz=a4z;\r\n            }else{\r\n                cx=p2x-d4x; cy=p2y-d4y; cz=p2z-d4z;\r\n                nx=-a4x; ny=-a4y; nz=-a4z;\r\n            }\r\n            s1x=d5x; s1y=d5y; s1z=d5z;\r\n            n1x=-a5x; n1y=-a5y; n1z=-a5z;\r\n            s2x=d6x; s2y=d6y; s2z=d6z;\r\n            n2x=-a6x; n2y=-a6y; n2z=-a6z;\r\n        }\r\n        else if(minIndex==4){// b2.y * b1\r\n            swap=true;\r\n            if(!right){\r\n                cx=p2x+d5x; cy=p2y+d5y; cz=p2z+d5z;\r\n                nx=a5x; ny=a5y; nz=a5z;\r\n            }else{\r\n                cx=p2x-d5x; cy=p2y-d5y; cz=p2z-d5z;\r\n                nx=-a5x; ny=-a5y; nz=-a5z;\r\n            }\r\n            s1x=d4x; s1y=d4y; s1z=d4z;\r\n            n1x=-a4x; n1y=-a4y; n1z=-a4z;\r\n            s2x=d6x; s2y=d6y; s2z=d6z;\r\n            n2x=-a6x; n2y=-a6y; n2z=-a6z;\r\n        }\r\n        else if(minIndex==5){// b2.z * b1\r\n            swap=true;\r\n            if(!right){\r\n                cx=p2x+d6x; cy=p2y+d6y; cz=p2z+d6z;\r\n                nx=a6x; ny=a6y; nz=a6z;\r\n            }else{\r\n                cx=p2x-d6x; cy=p2y-d6y; cz=p2z-d6z;\r\n                nx=-a6x; ny=-a6y; nz=-a6z;\r\n            }\r\n            s1x=d4x; s1y=d4y; s1z=d4z;\r\n            n1x=-a4x; n1y=-a4y; n1z=-a4z;\r\n            s2x=d5x; s2y=d5y; s2z=d5z;\r\n            n2x=-a5x; n2y=-a5y; n2z=-a5z;\r\n        }\r\n        else if(minIndex==6){// b1.x * b2.x\r\n            nx=a7x; ny=a7y; nz=a7z;\r\n            n1x=a1x; n1y=a1y; n1z=a1z;\r\n            n2x=a4x; n2y=a4y; n2z=a4z;\r\n        }\r\n        else if(minIndex==7){// b1.x * b2.y\r\n            nx=a8x; ny=a8y; nz=a8z;\r\n            n1x=a1x; n1y=a1y; n1z=a1z;\r\n            n2x=a5x; n2y=a5y; n2z=a5z;\r\n        }\r\n        else if(minIndex==8){// b1.x * b2.z\r\n            nx=a9x; ny=a9y; nz=a9z;\r\n            n1x=a1x; n1y=a1y; n1z=a1z;\r\n            n2x=a6x; n2y=a6y; n2z=a6z;\r\n        }\r\n        else if(minIndex==9){// b1.y * b2.x\r\n            nx=aax; ny=aay; nz=aaz;\r\n            n1x=a2x; n1y=a2y; n1z=a2z;\r\n            n2x=a4x; n2y=a4y; n2z=a4z;\r\n        }\r\n        else if(minIndex==10){// b1.y * b2.y\r\n            nx=abx; ny=aby; nz=abz;\r\n            n1x=a2x; n1y=a2y; n1z=a2z;\r\n            n2x=a5x; n2y=a5y; n2z=a5z;\r\n        }\r\n        else if(minIndex==11){// b1.y * b2.z\r\n            nx=acx; ny=acy; nz=acz;\r\n            n1x=a2x; n1y=a2y; n1z=a2z;\r\n            n2x=a6x; n2y=a6y; n2z=a6z;\r\n        }\r\n        else if(minIndex==12){// b1.z * b2.x\r\n            nx=adx;  ny=ady; nz=adz;\r\n            n1x=a3x; n1y=a3y; n1z=a3z;\r\n            n2x=a4x; n2y=a4y; n2z=a4z;\r\n        }\r\n        else if(minIndex==13){// b1.z * b2.y\r\n            nx=aex; ny=aey; nz=aez;\r\n            n1x=a3x; n1y=a3y; n1z=a3z;\r\n            n2x=a5x; n2y=a5y; n2z=a5z;\r\n        }\r\n        else if(minIndex==14){// b1.z * b2.z\r\n            nx=afx; ny=afy; nz=afz;\r\n            n1x=a3x; n1y=a3y; n1z=a3z;\r\n            n2x=a6x; n2y=a6y; n2z=a6z;\r\n        }\r\n\r\n        //__________________________________________\r\n\r\n        //var v;\r\n        if(minIndex>5){\r\n            if(!right){\r\n                nx=-nx; ny=-ny; nz=-nz;\r\n            }\r\n            var distance;\r\n            var maxDistance;\r\n            var vx;\r\n            var vy;\r\n            var vz;\r\n            var v1x;\r\n            var v1y;\r\n            var v1z;\r\n            var v2x;\r\n            var v2y;\r\n            var v2z;\r\n            //vertex1;\r\n            v1x=V1[0]; v1y=V1[1]; v1z=V1[2];\r\n            maxDistance=nx*v1x+ny*v1y+nz*v1z;\r\n            //vertex2;\r\n            vx=V1[3]; vy=V1[4]; vz=V1[5];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance>maxDistance){\r\n                maxDistance=distance;\r\n                v1x=vx; v1y=vy; v1z=vz;\r\n            }\r\n            //vertex3;\r\n            vx=V1[6]; vy=V1[7]; vz=V1[8];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance>maxDistance){\r\n                maxDistance=distance;\r\n                v1x=vx; v1y=vy; v1z=vz;\r\n            }\r\n            //vertex4;\r\n            vx=V1[9]; vy=V1[10]; vz=V1[11];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance>maxDistance){\r\n                maxDistance=distance;\r\n                v1x=vx; v1y=vy; v1z=vz;\r\n            }\r\n            //vertex5;\r\n            vx=V1[12]; vy=V1[13]; vz=V1[14];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance>maxDistance){\r\n                maxDistance=distance;\r\n                v1x=vx; v1y=vy; v1z=vz;\r\n            }\r\n            //vertex6;\r\n            vx=V1[15]; vy=V1[16]; vz=V1[17];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance>maxDistance){\r\n                maxDistance=distance;\r\n                v1x=vx; v1y=vy; v1z=vz;\r\n            }\r\n            //vertex7;\r\n            vx=V1[18]; vy=V1[19]; vz=V1[20];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance>maxDistance){\r\n                maxDistance=distance;\r\n                v1x=vx; v1y=vy; v1z=vz;\r\n            }\r\n            //vertex8;\r\n            vx=V1[21]; vy=V1[22]; vz=V1[23];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance>maxDistance){\r\n                maxDistance=distance;\r\n                v1x=vx; v1y=vy; v1z=vz;\r\n            }\r\n            //vertex1;\r\n            v2x=V2[0]; v2y=V2[1]; v2z=V2[2];\r\n            maxDistance=nx*v2x+ny*v2y+nz*v2z;\r\n            //vertex2;\r\n            vx=V2[3]; vy=V2[4]; vz=V2[5];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance<maxDistance){\r\n                maxDistance=distance;\r\n                v2x=vx; v2y=vy; v2z=vz;\r\n            }\r\n            //vertex3;\r\n            vx=V2[6]; vy=V2[7]; vz=V2[8];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance<maxDistance){\r\n                maxDistance=distance;\r\n                v2x=vx; v2y=vy; v2z=vz;\r\n            }\r\n            //vertex4;\r\n            vx=V2[9]; vy=V2[10]; vz=V2[11];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance<maxDistance){\r\n                maxDistance=distance;\r\n                v2x=vx; v2y=vy; v2z=vz;\r\n            }\r\n            //vertex5;\r\n            vx=V2[12]; vy=V2[13]; vz=V2[14];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance<maxDistance){\r\n                maxDistance=distance;\r\n                v2x=vx; v2y=vy; v2z=vz;\r\n            }\r\n            //vertex6;\r\n            vx=V2[15]; vy=V2[16]; vz=V2[17];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance<maxDistance){\r\n                maxDistance=distance;\r\n                v2x=vx; v2y=vy; v2z=vz;\r\n            }\r\n            //vertex7;\r\n            vx=V2[18]; vy=V2[19]; vz=V2[20];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance<maxDistance){\r\n                maxDistance=distance;\r\n                v2x=vx; v2y=vy; v2z=vz;\r\n            }\r\n            //vertex8;\r\n            vx=V2[21]; vy=V2[22]; vz=V2[23];\r\n            distance=nx*vx+ny*vy+nz*vz;\r\n            if(distance<maxDistance){\r\n                maxDistance=distance;\r\n                v2x=vx; v2y=vy; v2z=vz;\r\n            }\r\n            vx=v2x-v1x; vy=v2y-v1y; vz=v2z-v1z;\r\n            dot1=n1x*n2x+n1y*n2y+n1z*n2z;\r\n            var t=(vx*(n1x-n2x*dot1)+vy*(n1y-n2y*dot1)+vz*(n1z-n2z*dot1))/(1-dot1*dot1);\r\n            manifold.addPoint(v1x+n1x*t+nx*depth*0.5,v1y+n1y*t+ny*depth*0.5,v1z+n1z*t+nz*depth*0.5,nx,ny,nz,depth,false);\r\n            return;\r\n        }\r\n        // now detect face-face collision...\r\n        // target quad\r\n        var q1x;\r\n        var q1y;\r\n        var q1z;\r\n        var q2x;\r\n        var q2y;\r\n        var q2z;\r\n        var q3x;\r\n        var q3y;\r\n        var q3z;\r\n        var q4x;\r\n        var q4y;\r\n        var q4z;\r\n        // search support face and vertex\r\n        var minDot=1;\r\n        var dot=0;\r\n        var minDotIndex=0;\r\n        if(swap){\r\n            dot=a1x*nx+a1y*ny+a1z*nz;\r\n            if(dot<minDot){\r\n                minDot=dot;\r\n                minDotIndex=0;\r\n            }\r\n            if(-dot<minDot){\r\n                minDot=-dot;\r\n                minDotIndex=1;\r\n            }\r\n            dot=a2x*nx+a2y*ny+a2z*nz;\r\n            if(dot<minDot){\r\n                minDot=dot;\r\n                minDotIndex=2;\r\n            }\r\n            if(-dot<minDot){\r\n                minDot=-dot;\r\n                minDotIndex=3;\r\n            }\r\n            dot=a3x*nx+a3y*ny+a3z*nz;\r\n            if(dot<minDot){\r\n                minDot=dot;\r\n                minDotIndex=4;\r\n            }\r\n            if(-dot<minDot){\r\n                minDot=-dot;\r\n                minDotIndex=5;\r\n            }\r\n\r\n            if(minDotIndex==0){// x+ face\r\n                q1x=V1[0]; q1y=V1[1]; q1z=V1[2];//vertex1\r\n                q2x=V1[6]; q2y=V1[7]; q2z=V1[8];//vertex3\r\n                q3x=V1[9]; q3y=V1[10]; q3z=V1[11];//vertex4\r\n                q4x=V1[3]; q4y=V1[4]; q4z=V1[5];//vertex2\r\n            }\r\n            else if(minDotIndex==1){// x- face\r\n                q1x=V1[15]; q1y=V1[16]; q1z=V1[17];//vertex6\r\n                q2x=V1[21]; q2y=V1[22]; q2z=V1[23];//vertex8\r\n                q3x=V1[18]; q3y=V1[19]; q3z=V1[20];//vertex7\r\n                q4x=V1[12]; q4y=V1[13]; q4z=V1[14];//vertex5\r\n            }\r\n            else if(minDotIndex==2){// y+ face\r\n                q1x=V1[12]; q1y=V1[13]; q1z=V1[14];//vertex5\r\n                q2x=V1[0]; q2y=V1[1]; q2z=V1[2];//vertex1\r\n                q3x=V1[3]; q3y=V1[4]; q3z=V1[5];//vertex2\r\n                q4x=V1[15]; q4y=V1[16]; q4z=V1[17];//vertex6\r\n            }\r\n            else if(minDotIndex==3){// y- face\r\n                q1x=V1[21]; q1y=V1[22]; q1z=V1[23];//vertex8\r\n                q2x=V1[9]; q2y=V1[10]; q2z=V1[11];//vertex4\r\n                q3x=V1[6]; q3y=V1[7]; q3z=V1[8];//vertex3\r\n                q4x=V1[18]; q4y=V1[19]; q4z=V1[20];//vertex7\r\n            }\r\n            else if(minDotIndex==4){// z+ face\r\n                q1x=V1[12]; q1y=V1[13]; q1z=V1[14];//vertex5\r\n                q2x=V1[18]; q2y=V1[19]; q2z=V1[20];//vertex7\r\n                q3x=V1[6]; q3y=V1[7]; q3z=V1[8];//vertex3\r\n                q4x=V1[0]; q4y=V1[1]; q4z=V1[2];//vertex1\r\n            }\r\n            else if(minDotIndex==5){// z- face\r\n                q1x=V1[3]; q1y=V1[4]; q1z=V1[5];//vertex2\r\n                //2x=V1[6]; q2y=V1[7]; q2z=V1[8];//vertex4 !!!\r\n                q2x=V2[9]; q2y=V2[10]; q2z=V2[11];//vertex4\r\n                q3x=V1[21]; q3y=V1[22]; q3z=V1[23];//vertex8\r\n                q4x=V1[15]; q4y=V1[16]; q4z=V1[17];//vertex6\r\n            }\r\n\r\n        }else{\r\n            dot=a4x*nx+a4y*ny+a4z*nz;\r\n            if(dot<minDot){\r\n                minDot=dot;\r\n                minDotIndex=0;\r\n            }\r\n            if(-dot<minDot){\r\n                minDot=-dot;\r\n                minDotIndex=1;\r\n            }\r\n            dot=a5x*nx+a5y*ny+a5z*nz;\r\n            if(dot<minDot){\r\n                minDot=dot;\r\n                minDotIndex=2;\r\n            }\r\n            if(-dot<minDot){\r\n                minDot=-dot;\r\n                minDotIndex=3;\r\n            }\r\n            dot=a6x*nx+a6y*ny+a6z*nz;\r\n            if(dot<minDot){\r\n                minDot=dot;\r\n                minDotIndex=4;\r\n            }\r\n            if(-dot<minDot){\r\n                minDot=-dot;\r\n                minDotIndex=5;\r\n            }\r\n\r\n            //______________________________________________________\r\n\r\n            if(minDotIndex==0){// x+ face\r\n                q1x=V2[0]; q1y=V2[1]; q1z=V2[2];//vertex1\r\n                q2x=V2[6]; q2y=V2[7]; q2z=V2[8];//vertex3\r\n                q3x=V2[9]; q3y=V2[10]; q3z=V2[11];//vertex4\r\n                q4x=V2[3]; q4y=V2[4]; q4z=V2[5];//vertex2\r\n            }\r\n            else if(minDotIndex==1){// x- face\r\n                q1x=V2[15]; q1y=V2[16]; q1z=V2[17];//vertex6\r\n                q2x=V2[21]; q2y=V2[22]; q2z=V2[23]; //vertex8\r\n                q3x=V2[18]; q3y=V2[19]; q3z=V2[20];//vertex7\r\n                q4x=V2[12]; q4y=V2[13]; q4z=V2[14];//vertex5\r\n            }\r\n            else if(minDotIndex==2){// y+ face\r\n                q1x=V2[12]; q1y=V2[13]; q1z=V2[14];//vertex5\r\n                q2x=V2[0]; q2y=V2[1]; q2z=V2[2];//vertex1\r\n                q3x=V2[3]; q3y=V2[4]; q3z=V2[5];//vertex2\r\n                q4x=V2[15]; q4y=V2[16]; q4z=V2[17];//vertex6\r\n            }\r\n            else if(minDotIndex==3){// y- face\r\n                q1x=V2[21]; q1y=V2[22]; q1z=V2[23];//vertex8\r\n                q2x=V2[9]; q2y=V2[10]; q2z=V2[11];//vertex4\r\n                q3x=V2[6]; q3y=V2[7]; q3z=V2[8];//vertex3\r\n                q4x=V2[18]; q4y=V2[19]; q4z=V2[20];//vertex7\r\n            }\r\n            else if(minDotIndex==4){// z+ face\r\n                q1x=V2[12]; q1y=V2[13]; q1z=V2[14];//vertex5\r\n                q2x=V2[18]; q2y=V2[19]; q2z=V2[20];//vertex7\r\n                q3x=V2[6]; q3y=V2[7]; q3z=V2[8];//vertex3\r\n                q4x=V2[0]; q4y=V2[1]; q4z=V2[2];//vertex1\r\n            }\r\n            else if(minDotIndex==5){// z- face\r\n                q1x=V2[3]; q1y=V2[4]; q1z=V2[5];//vertex2\r\n                q2x=V2[9]; q2y=V2[10]; q2z=V2[11];//vertex4\r\n                q3x=V2[21]; q3y=V2[22]; q3z=V2[23];//vertex8\r\n                q4x=V2[15]; q4y=V2[16]; q4z=V2[17];//vertex6\r\n            }\r\n      \r\n        }\r\n        // clip vertices\r\n        var numClipVertices;\r\n        var numAddedClipVertices;\r\n        var index;\r\n        var x1;\r\n        var y1;\r\n        var z1;\r\n        var x2;\r\n        var y2;\r\n        var z2;\r\n        this.clipVertices1[0]=q1x;\r\n        this.clipVertices1[1]=q1y;\r\n        this.clipVertices1[2]=q1z;\r\n        this.clipVertices1[3]=q2x;\r\n        this.clipVertices1[4]=q2y;\r\n        this.clipVertices1[5]=q2z;\r\n        this.clipVertices1[6]=q3x;\r\n        this.clipVertices1[7]=q3y;\r\n        this.clipVertices1[8]=q3z;\r\n        this.clipVertices1[9]=q4x;\r\n        this.clipVertices1[10]=q4y;\r\n        this.clipVertices1[11]=q4z;\r\n        numAddedClipVertices=0;\r\n        x1=this.clipVertices1[9];\r\n        y1=this.clipVertices1[10];\r\n        z1=this.clipVertices1[11];\r\n        dot1=(x1-cx-s1x)*n1x+(y1-cy-s1y)*n1y+(z1-cz-s1z)*n1z;\r\n\r\n        //var i = 4;\r\n        //while(i--){\r\n        for(var i=0;i<4;i++){\r\n            index=i*3;\r\n            x2=this.clipVertices1[index];\r\n            y2=this.clipVertices1[index+1];\r\n            z2=this.clipVertices1[index+2];\r\n            dot2=(x2-cx-s1x)*n1x+(y2-cy-s1y)*n1y+(z2-cz-s1z)*n1z;\r\n            if(dot1>0){\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices2[index]=x2;\r\n                    this.clipVertices2[index+1]=y2;\r\n                    this.clipVertices2[index+2]=z2;\r\n                }else{\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices2[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices2[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices2[index+2]=z1+(z2-z1)*t;\r\n                }\r\n            }else{\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices2[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices2[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices2[index+2]=z1+(z2-z1)*t;\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices2[index]=x2;\r\n                    this.clipVertices2[index+1]=y2;\r\n                    this.clipVertices2[index+2]=z2;\r\n                }\r\n            }\r\n            x1=x2;\r\n            y1=y2;\r\n            z1=z2;\r\n            dot1=dot2;\r\n        }\r\n\r\n        numClipVertices=numAddedClipVertices;\r\n        if(numClipVertices==0)return;\r\n        numAddedClipVertices=0;\r\n        index=(numClipVertices-1)*3;\r\n        x1=this.clipVertices2[index];\r\n        y1=this.clipVertices2[index+1];\r\n        z1=this.clipVertices2[index+2];\r\n        dot1=(x1-cx-s2x)*n2x+(y1-cy-s2y)*n2y+(z1-cz-s2z)*n2z;\r\n\r\n        //i = numClipVertices;\r\n        //while(i--){\r\n        for(i=0;i<numClipVertices;i++){\r\n            index=i*3;\r\n            x2=this.clipVertices2[index];\r\n            y2=this.clipVertices2[index+1];\r\n            z2=this.clipVertices2[index+2];\r\n            dot2=(x2-cx-s2x)*n2x+(y2-cy-s2y)*n2y+(z2-cz-s2z)*n2z;\r\n            if(dot1>0){\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices1[index]=x2;\r\n                    this.clipVertices1[index+1]=y2;\r\n                    this.clipVertices1[index+2]=z2;\r\n                }else{\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices1[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices1[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices1[index+2]=z1+(z2-z1)*t;\r\n                }\r\n            }else{\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices1[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices1[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices1[index+2]=z1+(z2-z1)*t;\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices1[index]=x2;\r\n                    this.clipVertices1[index+1]=y2;\r\n                    this.clipVertices1[index+2]=z2;\r\n                }\r\n            }\r\n            x1=x2;\r\n            y1=y2;\r\n            z1=z2;\r\n            dot1=dot2;\r\n        }\r\n\r\n        numClipVertices=numAddedClipVertices;\r\n        if(numClipVertices==0)return;\r\n        numAddedClipVertices=0;\r\n        index=(numClipVertices-1)*3;\r\n        x1=this.clipVertices1[index];\r\n        y1=this.clipVertices1[index+1];\r\n        z1=this.clipVertices1[index+2];\r\n        dot1=(x1-cx+s1x)*-n1x+(y1-cy+s1y)*-n1y+(z1-cz+s1z)*-n1z;\r\n\r\n        //i = numClipVertices;\r\n        //while(i--){\r\n        for(i=0;i<numClipVertices;i++){\r\n            index=i*3;\r\n            x2=this.clipVertices1[index];\r\n            y2=this.clipVertices1[index+1];\r\n            z2=this.clipVertices1[index+2];\r\n            dot2=(x2-cx+s1x)*-n1x+(y2-cy+s1y)*-n1y+(z2-cz+s1z)*-n1z;\r\n            if(dot1>0){\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices2[index]=x2;\r\n                    this.clipVertices2[index+1]=y2;\r\n                    this.clipVertices2[index+2]=z2;\r\n                }else{\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices2[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices2[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices2[index+2]=z1+(z2-z1)*t;\r\n                }\r\n            }else{\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices2[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices2[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices2[index+2]=z1+(z2-z1)*t;\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices2[index]=x2;\r\n                    this.clipVertices2[index+1]=y2;\r\n                    this.clipVertices2[index+2]=z2;\r\n                }\r\n            }\r\n            x1=x2;\r\n            y1=y2;\r\n            z1=z2;\r\n            dot1=dot2;\r\n        }\r\n\r\n        numClipVertices=numAddedClipVertices;\r\n        if(numClipVertices==0)return;\r\n        numAddedClipVertices=0;\r\n        index=(numClipVertices-1)*3;\r\n        x1=this.clipVertices2[index];\r\n        y1=this.clipVertices2[index+1];\r\n        z1=this.clipVertices2[index+2];\r\n        dot1=(x1-cx+s2x)*-n2x+(y1-cy+s2y)*-n2y+(z1-cz+s2z)*-n2z;\r\n\r\n        //i = numClipVertices;\r\n        //while(i--){\r\n        for(i=0;i<numClipVertices;i++){\r\n            index=i*3;\r\n            x2=this.clipVertices2[index];\r\n            y2=this.clipVertices2[index+1];\r\n            z2=this.clipVertices2[index+2];\r\n            dot2=(x2-cx+s2x)*-n2x+(y2-cy+s2y)*-n2y+(z2-cz+s2z)*-n2z;\r\n            if(dot1>0){\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices1[index]=x2;\r\n                    this.clipVertices1[index+1]=y2;\r\n                    this.clipVertices1[index+2]=z2;\r\n                }else{\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices1[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices1[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices1[index+2]=z1+(z2-z1)*t;\r\n                }\r\n            }else{\r\n                if(dot2>0){\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    t=dot1/(dot1-dot2);\r\n                    this.clipVertices1[index]=x1+(x2-x1)*t;\r\n                    this.clipVertices1[index+1]=y1+(y2-y1)*t;\r\n                    this.clipVertices1[index+2]=z1+(z2-z1)*t;\r\n                    index=numAddedClipVertices*3;\r\n                    numAddedClipVertices++;\r\n                    this.clipVertices1[index]=x2;\r\n                    this.clipVertices1[index+1]=y2;\r\n                    this.clipVertices1[index+2]=z2;\r\n                }\r\n            }\r\n            x1=x2;\r\n            y1=y2;\r\n            z1=z2;\r\n            dot1=dot2;\r\n        }\r\n\r\n        numClipVertices=numAddedClipVertices;\r\n        if(swap){\r\n            var tb=b1;\r\n            b1=b2;\r\n            b2=tb;\r\n        }\r\n        if(numClipVertices==0)return;\r\n        var flipped=b1!=shape1;\r\n        if(numClipVertices>4){\r\n            x1=(q1x+q2x+q3x+q4x)*0.25;\r\n            y1=(q1y+q2y+q3y+q4y)*0.25;\r\n            z1=(q1z+q2z+q3z+q4z)*0.25;\r\n            n1x=q1x-x1;\r\n            n1y=q1y-y1;\r\n            n1z=q1z-z1;\r\n            n2x=q2x-x1;\r\n            n2y=q2y-y1;\r\n            n2z=q2z-z1;\r\n            var index1=0;\r\n            var index2=0;\r\n            var index3=0;\r\n            var index4=0;\r\n            var maxDot=-this.INF;\r\n            minDot=this.INF;\r\n\r\n            //i = numClipVertices;\r\n            //while(i--){\r\n            for(i=0;i<numClipVertices;i++){\r\n                this.used[i]=false;\r\n                index=i*3;\r\n                x1=this.clipVertices1[index];\r\n                y1=this.clipVertices1[index+1];\r\n                z1=this.clipVertices1[index+2];\r\n                dot=x1*n1x+y1*n1y+z1*n1z;\r\n                if(dot<minDot){\r\n                    minDot=dot;\r\n                    index1=i;\r\n                }\r\n                if(dot>maxDot){\r\n                    maxDot=dot;\r\n                    index3=i;\r\n                }\r\n            }\r\n\r\n            this.used[index1]=true;\r\n            this.used[index3]=true;\r\n            maxDot=-this.INF;\r\n            minDot=this.INF;\r\n\r\n            //i = numClipVertices;\r\n            //while(i--){\r\n            for(i=0;i<numClipVertices;i++){\r\n                if(this.used[i])continue;\r\n                index=i*3;\r\n                x1=this.clipVertices1[index];\r\n                y1=this.clipVertices1[index+1];\r\n                z1=this.clipVertices1[index+2];\r\n                dot=x1*n2x+y1*n2y+z1*n2z;\r\n                if(dot<minDot){\r\n                    minDot=dot;\r\n                    index2=i;\r\n                }\r\n                if(dot>maxDot){\r\n                    maxDot=dot;\r\n                    index4=i;\r\n                }\r\n            }\r\n\r\n            index=index1*3;\r\n            x1=this.clipVertices1[index];\r\n            y1=this.clipVertices1[index+1];\r\n            z1=this.clipVertices1[index+2];\r\n            dot=(x1-cx)*nx+(y1-cy)*ny+(z1-cz)*nz;\r\n            if(dot<0) manifold.addPoint(x1,y1,z1,nx,ny,nz,dot,flipped);\r\n            \r\n            index=index2*3;\r\n            x1=this.clipVertices1[index];\r\n            y1=this.clipVertices1[index+1];\r\n            z1=this.clipVertices1[index+2];\r\n            dot=(x1-cx)*nx+(y1-cy)*ny+(z1-cz)*nz;\r\n            if(dot<0) manifold.addPoint(x1,y1,z1,nx,ny,nz,dot,flipped);\r\n            \r\n            index=index3*3;\r\n            x1=this.clipVertices1[index];\r\n            y1=this.clipVertices1[index+1];\r\n            z1=this.clipVertices1[index+2];\r\n            dot=(x1-cx)*nx+(y1-cy)*ny+(z1-cz)*nz;\r\n            if(dot<0) manifold.addPoint(x1,y1,z1,nx,ny,nz,dot,flipped);\r\n            \r\n            index=index4*3;\r\n            x1=this.clipVertices1[index];\r\n            y1=this.clipVertices1[index+1];\r\n            z1=this.clipVertices1[index+2];\r\n            dot=(x1-cx)*nx+(y1-cy)*ny+(z1-cz)*nz;\r\n            if(dot<0) manifold.addPoint(x1,y1,z1,nx,ny,nz,dot,flipped);\r\n            \r\n        }else{\r\n            //i = numClipVertices;\r\n            //while(i--){\r\n            for(i=0;i<numClipVertices;i++){\r\n                index=i*3;\r\n                x1=this.clipVertices1[index];\r\n                y1=this.clipVertices1[index+1];\r\n                z1=this.clipVertices1[index+2];\r\n                dot=(x1-cx)*nx+(y1-cy)*ny+(z1-cz)*nz;\r\n                if(dot<0)manifold.addPoint(x1,y1,z1,nx,ny,nz,dot,flipped);\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n});\n\nfunction BoxCylinderCollisionDetector (flip){\r\n\r\n    CollisionDetector.call( this );\r\n    this.flip = flip;\r\n\r\n}\r\n\r\nBoxCylinderCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\r\n\r\n    constructor: BoxCylinderCollisionDetector,\r\n\r\n    getSep: function ( c1, c2, sep, pos, dep ) {\r\n\r\n        var t1x;\r\n        var t1y;\r\n        var t1z;\r\n        var t2x;\r\n        var t2y;\r\n        var t2z;\r\n        var sup=new Vec3();\r\n        var len;\r\n        var p1x;\r\n        var p1y;\r\n        var p1z;\r\n        var p2x;\r\n        var p2y;\r\n        var p2z;\r\n        var v01x=c1.position.x;\r\n        var v01y=c1.position.y;\r\n        var v01z=c1.position.z;\r\n        var v02x=c2.position.x;\r\n        var v02y=c2.position.y;\r\n        var v02z=c2.position.z;\r\n        var v0x=v02x-v01x;\r\n        var v0y=v02y-v01y;\r\n        var v0z=v02z-v01z;\r\n        if(v0x*v0x+v0y*v0y+v0z*v0z==0)v0y=0.001;\r\n        var nx=-v0x;\r\n        var ny=-v0y;\r\n        var nz=-v0z;\r\n        this.supportPointB(c1,-nx,-ny,-nz,sup);\r\n        var v11x=sup.x;\r\n        var v11y=sup.y;\r\n        var v11z=sup.z;\r\n        this.supportPointC(c2,nx,ny,nz,sup);\r\n        var v12x=sup.x;\r\n        var v12y=sup.y;\r\n        var v12z=sup.z;\r\n        var v1x=v12x-v11x;\r\n        var v1y=v12y-v11y;\r\n        var v1z=v12z-v11z;\r\n        if(v1x*nx+v1y*ny+v1z*nz<=0){\r\n        return false;\r\n        }\r\n        nx=v1y*v0z-v1z*v0y;\r\n        ny=v1z*v0x-v1x*v0z;\r\n        nz=v1x*v0y-v1y*v0x;\r\n        if(nx*nx+ny*ny+nz*nz==0){\r\n        sep.set( v1x-v0x, v1y-v0y, v1z-v0z ).normalize();\r\n        pos.set( (v11x+v12x)*0.5, (v11y+v12y)*0.5, (v11z+v12z)*0.5 );\r\n        return true;\r\n        }\r\n        this.supportPointB(c1,-nx,-ny,-nz,sup);\r\n        var v21x=sup.x;\r\n        var v21y=sup.y;\r\n        var v21z=sup.z;\r\n        this.supportPointC(c2,nx,ny,nz,sup);\r\n        var v22x=sup.x;\r\n        var v22y=sup.y;\r\n        var v22z=sup.z;\r\n        var v2x=v22x-v21x;\r\n        var v2y=v22y-v21y;\r\n        var v2z=v22z-v21z;\r\n        if(v2x*nx+v2y*ny+v2z*nz<=0){\r\n        return false;\r\n        }\r\n        t1x=v1x-v0x;\r\n        t1y=v1y-v0y;\r\n        t1z=v1z-v0z;\r\n        t2x=v2x-v0x;\r\n        t2y=v2y-v0y;\r\n        t2z=v2z-v0z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        if(nx*v0x+ny*v0y+nz*v0z>0){\r\n        t1x=v1x;\r\n        t1y=v1y;\r\n        t1z=v1z;\r\n        v1x=v2x;\r\n        v1y=v2y;\r\n        v1z=v2z;\r\n        v2x=t1x;\r\n        v2y=t1y;\r\n        v2z=t1z;\r\n        t1x=v11x;\r\n        t1y=v11y;\r\n        t1z=v11z;\r\n        v11x=v21x;\r\n        v11y=v21y;\r\n        v11z=v21z;\r\n        v21x=t1x;\r\n        v21y=t1y;\r\n        v21z=t1z;\r\n        t1x=v12x;\r\n        t1y=v12y;\r\n        t1z=v12z;\r\n        v12x=v22x;\r\n        v12y=v22y;\r\n        v12z=v22z;\r\n        v22x=t1x;\r\n        v22y=t1y;\r\n        v22z=t1z;\r\n        nx=-nx;\r\n        ny=-ny;\r\n        nz=-nz;\r\n        }\r\n        var iterations=0;\r\n        while(true){\r\n        if(++iterations>100){\r\n        return false;\r\n        }\r\n        this.supportPointB(c1,-nx,-ny,-nz,sup);\r\n        var v31x=sup.x;\r\n        var v31y=sup.y;\r\n        var v31z=sup.z;\r\n        this.supportPointC(c2,nx,ny,nz,sup);\r\n        var v32x=sup.x;\r\n        var v32y=sup.y;\r\n        var v32z=sup.z;\r\n        var v3x=v32x-v31x;\r\n        var v3y=v32y-v31y;\r\n        var v3z=v32z-v31z;\r\n        if(v3x*nx+v3y*ny+v3z*nz<=0){\r\n        return false;\r\n        }\r\n        if((v1y*v3z-v1z*v3y)*v0x+(v1z*v3x-v1x*v3z)*v0y+(v1x*v3y-v1y*v3x)*v0z<0){\r\n        v2x=v3x;\r\n        v2y=v3y;\r\n        v2z=v3z;\r\n        v21x=v31x;\r\n        v21y=v31y;\r\n        v21z=v31z;\r\n        v22x=v32x;\r\n        v22y=v32y;\r\n        v22z=v32z;\r\n        t1x=v1x-v0x;\r\n        t1y=v1y-v0y;\r\n        t1z=v1z-v0z;\r\n        t2x=v3x-v0x;\r\n        t2y=v3y-v0y;\r\n        t2z=v3z-v0z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        continue;\r\n        }\r\n        if((v3y*v2z-v3z*v2y)*v0x+(v3z*v2x-v3x*v2z)*v0y+(v3x*v2y-v3y*v2x)*v0z<0){\r\n        v1x=v3x;\r\n        v1y=v3y;\r\n        v1z=v3z;\r\n        v11x=v31x;\r\n        v11y=v31y;\r\n        v11z=v31z;\r\n        v12x=v32x;\r\n        v12y=v32y;\r\n        v12z=v32z;\r\n        t1x=v3x-v0x;\r\n        t1y=v3y-v0y;\r\n        t1z=v3z-v0z;\r\n        t2x=v2x-v0x;\r\n        t2y=v2y-v0y;\r\n        t2z=v2z-v0z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        continue;\r\n        }\r\n        var hit=false;\r\n        while(true){\r\n        t1x=v2x-v1x;\r\n        t1y=v2y-v1y;\r\n        t1z=v2z-v1z;\r\n        t2x=v3x-v1x;\r\n        t2y=v3y-v1y;\r\n        t2z=v3z-v1z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        len=1/_Math.sqrt(nx*nx+ny*ny+nz*nz);\r\n        nx*=len;\r\n        ny*=len;\r\n        nz*=len;\r\n        if(nx*v1x+ny*v1y+nz*v1z>=0&&!hit){\r\n        var b0=(v1y*v2z-v1z*v2y)*v3x+(v1z*v2x-v1x*v2z)*v3y+(v1x*v2y-v1y*v2x)*v3z;\r\n        var b1=(v3y*v2z-v3z*v2y)*v0x+(v3z*v2x-v3x*v2z)*v0y+(v3x*v2y-v3y*v2x)*v0z;\r\n        var b2=(v0y*v1z-v0z*v1y)*v3x+(v0z*v1x-v0x*v1z)*v3y+(v0x*v1y-v0y*v1x)*v3z;\r\n        var b3=(v2y*v1z-v2z*v1y)*v0x+(v2z*v1x-v2x*v1z)*v0y+(v2x*v1y-v2y*v1x)*v0z;\r\n        var sum=b0+b1+b2+b3;\r\n        if(sum<=0){\r\n        b0=0;\r\n        b1=(v2y*v3z-v2z*v3y)*nx+(v2z*v3x-v2x*v3z)*ny+(v2x*v3y-v2y*v3x)*nz;\r\n        b2=(v3y*v2z-v3z*v2y)*nx+(v3z*v2x-v3x*v2z)*ny+(v3x*v2y-v3y*v2x)*nz;\r\n        b3=(v1y*v2z-v1z*v2y)*nx+(v1z*v2x-v1x*v2z)*ny+(v1x*v2y-v1y*v2x)*nz;\r\n        sum=b1+b2+b3;\r\n        }\r\n        var inv=1/sum;\r\n        p1x=(v01x*b0+v11x*b1+v21x*b2+v31x*b3)*inv;\r\n        p1y=(v01y*b0+v11y*b1+v21y*b2+v31y*b3)*inv;\r\n        p1z=(v01z*b0+v11z*b1+v21z*b2+v31z*b3)*inv;\r\n        p2x=(v02x*b0+v12x*b1+v22x*b2+v32x*b3)*inv;\r\n        p2y=(v02y*b0+v12y*b1+v22y*b2+v32y*b3)*inv;\r\n        p2z=(v02z*b0+v12z*b1+v22z*b2+v32z*b3)*inv;\r\n        hit=true;\r\n        }\r\n        this.supportPointB(c1,-nx,-ny,-nz,sup);\r\n        var v41x=sup.x;\r\n        var v41y=sup.y;\r\n        var v41z=sup.z;\r\n        this.supportPointC(c2,nx,ny,nz,sup);\r\n        var v42x=sup.x;\r\n        var v42y=sup.y;\r\n        var v42z=sup.z;\r\n        var v4x=v42x-v41x;\r\n        var v4y=v42y-v41y;\r\n        var v4z=v42z-v41z;\r\n        var separation=-(v4x*nx+v4y*ny+v4z*nz);\r\n        if((v4x-v3x)*nx+(v4y-v3y)*ny+(v4z-v3z)*nz<=0.01||separation>=0){\r\n        if(hit){\r\n        sep.set( -nx, -ny, -nz );\r\n        pos.set( (p1x+p2x)*0.5, (p1y+p2y)*0.5, (p1z+p2z)*0.5 );\r\n        dep.x=separation;\r\n        return true;\r\n        }\r\n        return false;\r\n        }\r\n        if(\r\n        (v4y*v1z-v4z*v1y)*v0x+\r\n        (v4z*v1x-v4x*v1z)*v0y+\r\n        (v4x*v1y-v4y*v1x)*v0z<0\r\n        ){\r\n        if(\r\n        (v4y*v2z-v4z*v2y)*v0x+\r\n        (v4z*v2x-v4x*v2z)*v0y+\r\n        (v4x*v2y-v4y*v2x)*v0z<0\r\n        ){\r\n        v1x=v4x;\r\n        v1y=v4y;\r\n        v1z=v4z;\r\n        v11x=v41x;\r\n        v11y=v41y;\r\n        v11z=v41z;\r\n        v12x=v42x;\r\n        v12y=v42y;\r\n        v12z=v42z;\r\n        }else{\r\n        v3x=v4x;\r\n        v3y=v4y;\r\n        v3z=v4z;\r\n        v31x=v41x;\r\n        v31y=v41y;\r\n        v31z=v41z;\r\n        v32x=v42x;\r\n        v32y=v42y;\r\n        v32z=v42z;\r\n        }\r\n        }else{\r\n        if(\r\n        (v4y*v3z-v4z*v3y)*v0x+\r\n        (v4z*v3x-v4x*v3z)*v0y+\r\n        (v4x*v3y-v4y*v3x)*v0z<0\r\n        ){\r\n        v2x=v4x;\r\n        v2y=v4y;\r\n        v2z=v4z;\r\n        v21x=v41x;\r\n        v21y=v41y;\r\n        v21z=v41z;\r\n        v22x=v42x;\r\n        v22y=v42y;\r\n        v22z=v42z;\r\n        }else{\r\n        v1x=v4x;\r\n        v1y=v4y;\r\n        v1z=v4z;\r\n        v11x=v41x;\r\n        v11y=v41y;\r\n        v11z=v41z;\r\n        v12x=v42x;\r\n        v12y=v42y;\r\n        v12z=v42z;\r\n    }\r\n    }\r\n    }\r\n    }\r\n    //return false;\r\n    },\r\n\r\n    supportPointB: function( c, dx, dy, dz, out ) {\r\n\r\n        var rot=c.rotation.elements;\r\n        var ldx=rot[0]*dx+rot[3]*dy+rot[6]*dz;\r\n        var ldy=rot[1]*dx+rot[4]*dy+rot[7]*dz;\r\n        var ldz=rot[2]*dx+rot[5]*dy+rot[8]*dz;\r\n        var w=c.halfWidth;\r\n        var h=c.halfHeight;\r\n        var d=c.halfDepth;\r\n        var ox;\r\n        var oy;\r\n        var oz;\r\n        if(ldx<0)ox=-w;\r\n        else ox=w;\r\n        if(ldy<0)oy=-h;\r\n        else oy=h;\r\n        if(ldz<0)oz=-d;\r\n        else oz=d;\r\n        ldx=rot[0]*ox+rot[1]*oy+rot[2]*oz+c.position.x;\r\n        ldy=rot[3]*ox+rot[4]*oy+rot[5]*oz+c.position.y;\r\n        ldz=rot[6]*ox+rot[7]*oy+rot[8]*oz+c.position.z;\r\n        out.set( ldx, ldy, ldz );\r\n\r\n    },\r\n\r\n    supportPointC: function ( c, dx, dy, dz, out ) {\r\n\r\n        var rot=c.rotation.elements;\r\n        var ldx=rot[0]*dx+rot[3]*dy+rot[6]*dz;\r\n        var ldy=rot[1]*dx+rot[4]*dy+rot[7]*dz;\r\n        var ldz=rot[2]*dx+rot[5]*dy+rot[8]*dz;\r\n        var radx=ldx;\r\n        var radz=ldz;\r\n        var len=radx*radx+radz*radz;\r\n        var rad=c.radius;\r\n        var hh=c.halfHeight;\r\n        var ox;\r\n        var oy;\r\n        var oz;\r\n        if(len==0){\r\n        if(ldy<0){\r\n        ox=rad;\r\n        oy=-hh;\r\n        oz=0;\r\n        }else{\r\n        ox=rad;\r\n        oy=hh;\r\n        oz=0;\r\n        }\r\n        }else{\r\n        len=c.radius/_Math.sqrt(len);\r\n        if(ldy<0){\r\n        ox=radx*len;\r\n        oy=-hh;\r\n        oz=radz*len;\r\n        }else{\r\n        ox=radx*len;\r\n        oy=hh;\r\n        oz=radz*len;\r\n        }\r\n        }\r\n        ldx=rot[0]*ox+rot[1]*oy+rot[2]*oz+c.position.x;\r\n        ldy=rot[3]*ox+rot[4]*oy+rot[5]*oz+c.position.y;\r\n        ldz=rot[6]*ox+rot[7]*oy+rot[8]*oz+c.position.z;\r\n        out.set( ldx, ldy, ldz );\r\n\r\n    },\r\n\r\n    detectCollision: function( shape1, shape2, manifold ) {\r\n\r\n        var b;\r\n        var c;\r\n        if(this.flip){\r\n        b=shape2;\r\n        c=shape1;\r\n        }else{\r\n        b=shape1;\r\n        c=shape2;\r\n        }\r\n        var sep=new Vec3();\r\n        var pos=new Vec3();\r\n        var dep=new Vec3();\r\n\r\n        if(!this.getSep(b,c,sep,pos,dep))return;\r\n        var pbx=b.position.x;\r\n        var pby=b.position.y;\r\n        var pbz=b.position.z;\r\n        var pcx=c.position.x;\r\n        var pcy=c.position.y;\r\n        var pcz=c.position.z;\r\n        var bw=b.halfWidth;\r\n        var bh=b.halfHeight;\r\n        var bd=b.halfDepth;\r\n        var ch=c.halfHeight;\r\n        var r=c.radius;\r\n\r\n        var D = b.dimentions;\r\n\r\n        var nwx=D[0];//b.normalDirectionWidth.x;\r\n        var nwy=D[1];//b.normalDirectionWidth.y;\r\n        var nwz=D[2];//b.normalDirectionWidth.z;\r\n        var nhx=D[3];//b.normalDirectionHeight.x;\r\n        var nhy=D[4];//b.normalDirectionHeight.y;\r\n        var nhz=D[5];//b.normalDirectionHeight.z;\r\n        var ndx=D[6];//b.normalDirectionDepth.x;\r\n        var ndy=D[7];//b.normalDirectionDepth.y;\r\n        var ndz=D[8];//b.normalDirectionDepth.z;\r\n\r\n        var dwx=D[9];//b.halfDirectionWidth.x;\r\n        var dwy=D[10];//b.halfDirectionWidth.y;\r\n        var dwz=D[11];//b.halfDirectionWidth.z;\r\n        var dhx=D[12];//b.halfDirectionHeight.x;\r\n        var dhy=D[13];//b.halfDirectionHeight.y;\r\n        var dhz=D[14];//b.halfDirectionHeight.z;\r\n        var ddx=D[15];//b.halfDirectionDepth.x;\r\n        var ddy=D[16];//b.halfDirectionDepth.y;\r\n        var ddz=D[17];//b.halfDirectionDepth.z;\r\n\r\n        var ncx=c.normalDirection.x;\r\n        var ncy=c.normalDirection.y;\r\n        var ncz=c.normalDirection.z;\r\n        var dcx=c.halfDirection.x;\r\n        var dcy=c.halfDirection.y;\r\n        var dcz=c.halfDirection.z;\r\n        var nx=sep.x;\r\n        var ny=sep.y;\r\n        var nz=sep.z;\r\n        var dotw=nx*nwx+ny*nwy+nz*nwz;\r\n        var doth=nx*nhx+ny*nhy+nz*nhz;\r\n        var dotd=nx*ndx+ny*ndy+nz*ndz;\r\n        var dotc=nx*ncx+ny*ncy+nz*ncz;\r\n        var right1=dotw>0;\r\n        var right2=doth>0;\r\n        var right3=dotd>0;\r\n        var right4=dotc>0;\r\n        if(!right1)dotw=-dotw;\r\n        if(!right2)doth=-doth;\r\n        if(!right3)dotd=-dotd;\r\n        if(!right4)dotc=-dotc;\r\n        var state=0;\r\n        if(dotc>0.999){\r\n        if(dotw>0.999){\r\n        if(dotw>dotc)state=1;\r\n        else state=4;\r\n        }else if(doth>0.999){\r\n        if(doth>dotc)state=2;\r\n        else state=4;\r\n        }else if(dotd>0.999){\r\n        if(dotd>dotc)state=3;\r\n        else state=4;\r\n        }else state=4;\r\n        }else{\r\n        if(dotw>0.999)state=1;\r\n        else if(doth>0.999)state=2;\r\n        else if(dotd>0.999)state=3;\r\n        }\r\n        var cbx;\r\n        var cby;\r\n        var cbz;\r\n        var ccx;\r\n        var ccy;\r\n        var ccz;\r\n        var r00;\r\n        var r01;\r\n        var r02;\r\n        var r10;\r\n        var r11;\r\n        var r12;\r\n        var r20;\r\n        var r21;\r\n        var r22;\r\n        var px;\r\n        var py;\r\n        var pz;\r\n        var pd;\r\n        var dot;\r\n        var len;\r\n        var tx;\r\n        var ty;\r\n        var tz;\r\n        var td;\r\n        var dx;\r\n        var dy;\r\n        var dz;\r\n        var d1x;\r\n        var d1y;\r\n        var d1z;\r\n        var d2x;\r\n        var d2y;\r\n        var d2z;\r\n        var sx;\r\n        var sy;\r\n        var sz;\r\n        var sd;\r\n        var ex;\r\n        var ey;\r\n        var ez;\r\n        var ed;\r\n        var dot1;\r\n        var dot2;\r\n        var t1;\r\n        var dir1x;\r\n        var dir1y;\r\n        var dir1z;\r\n        var dir2x;\r\n        var dir2y;\r\n        var dir2z;\r\n        var dir1l;\r\n        var dir2l;\r\n        if(state==0){\r\n        //manifold.addPoint(pos.x,pos.y,pos.z,nx,ny,nz,dep.x,b,c,0,0,false);\r\n        manifold.addPoint(pos.x,pos.y,pos.z,nx,ny,nz,dep.x,this.flip);\r\n        }else if(state==4){\r\n        if(right4){\r\n        ccx=pcx-dcx;\r\n        ccy=pcy-dcy;\r\n        ccz=pcz-dcz;\r\n        nx=-ncx;\r\n        ny=-ncy;\r\n        nz=-ncz;\r\n        }else{\r\n        ccx=pcx+dcx;\r\n        ccy=pcy+dcy;\r\n        ccz=pcz+dcz;\r\n        nx=ncx;\r\n        ny=ncy;\r\n        nz=ncz;\r\n        }\r\n        var v1x;\r\n        var v1y;\r\n        var v1z;\r\n        var v2x;\r\n        var v2y;\r\n        var v2z;\r\n        var v3x;\r\n        var v3y;\r\n        var v3z;\r\n        var v4x;\r\n        var v4y;\r\n        var v4z;\r\n        \r\n        dot=1;\r\n        state=0;\r\n        dot1=nwx*nx+nwy*ny+nwz*nz;\r\n        if(dot1<dot){\r\n        dot=dot1;\r\n        state=0;\r\n        }\r\n        if(-dot1<dot){\r\n        dot=-dot1;\r\n        state=1;\r\n        }\r\n        dot1=nhx*nx+nhy*ny+nhz*nz;\r\n        if(dot1<dot){\r\n        dot=dot1;\r\n        state=2;\r\n        }\r\n        if(-dot1<dot){\r\n        dot=-dot1;\r\n        state=3;\r\n        }\r\n        dot1=ndx*nx+ndy*ny+ndz*nz;\r\n        if(dot1<dot){\r\n        dot=dot1;\r\n        state=4;\r\n        }\r\n        if(-dot1<dot){\r\n        dot=-dot1;\r\n        state=5;\r\n        }\r\n        var v = b.elements;\r\n        switch(state){\r\n        case 0:\r\n        //v=b.vertex1;\r\n        v1x=v[0];//v.x;\r\n        v1y=v[1];//v.y;\r\n        v1z=v[2];//v.z;\r\n        //v=b.vertex3;\r\n        v2x=v[6];//v.x;\r\n        v2y=v[7];//v.y;\r\n        v2z=v[8];//v.z;\r\n        //v=b.vertex4;\r\n        v3x=v[9];//v.x;\r\n        v3y=v[10];//v.y;\r\n        v3z=v[11];//v.z;\r\n        //v=b.vertex2;\r\n        v4x=v[3];//v.x;\r\n        v4y=v[4];//v.y;\r\n        v4z=v[5];//v.z;\r\n        break;\r\n        case 1:\r\n        //v=b.vertex6;\r\n        v1x=v[15];//v.x;\r\n        v1y=v[16];//v.y;\r\n        v1z=v[17];//v.z;\r\n        //v=b.vertex8;\r\n        v2x=v[21];//v.x;\r\n        v2y=v[22];//v.y;\r\n        v2z=v[23];//v.z;\r\n        //v=b.vertex7;\r\n        v3x=v[18];//v.x;\r\n        v3y=v[19];//v.y;\r\n        v3z=v[20];//v.z;\r\n        //v=b.vertex5;\r\n        v4x=v[12];//v.x;\r\n        v4y=v[13];//v.y;\r\n        v4z=v[14];//v.z;\r\n        break;\r\n        case 2:\r\n        //v=b.vertex5;\r\n        v1x=v[12];//v.x;\r\n        v1y=v[13];//v.y;\r\n        v1z=v[14];//v.z;\r\n        //v=b.vertex1;\r\n        v2x=v[0];//v.x;\r\n        v2y=v[1];//v.y;\r\n        v2z=v[2];//v.z;\r\n        //v=b.vertex2;\r\n        v3x=v[3];//v.x;\r\n        v3y=v[4];//v.y;\r\n        v3z=v[5];//v.z;\r\n        //v=b.vertex6;\r\n        v4x=v[15];//v.x;\r\n        v4y=v[16];//v.y;\r\n        v4z=v[17];//v.z;\r\n        break;\r\n        case 3:\r\n        //v=b.vertex8;\r\n        v1x=v[21];//v.x;\r\n        v1y=v[22];//v.y;\r\n        v1z=v[23];//v.z;\r\n        //v=b.vertex4;\r\n        v2x=v[9];//v.x;\r\n        v2y=v[10];//v.y;\r\n        v2z=v[11];//v.z;\r\n        //v=b.vertex3;\r\n        v3x=v[6];//v.x;\r\n        v3y=v[7];//v.y;\r\n        v3z=v[8];//v.z;\r\n        //v=b.vertex7;\r\n        v4x=v[18];//v.x;\r\n        v4y=v[19];//v.y;\r\n        v4z=v[20];//v.z;\r\n        break;\r\n        case 4:\r\n        //v=b.vertex5;\r\n        v1x=v[12];//v.x;\r\n        v1y=v[13];//v.y;\r\n        v1z=v[14];//v.z;\r\n        //v=b.vertex7;\r\n        v2x=v[18];//v.x;\r\n        v2y=v[19];//v.y;\r\n        v2z=v[20];//v.z;\r\n        //v=b.vertex3;\r\n        v3x=v[6];//v.x;\r\n        v3y=v[7];//v.y;\r\n        v3z=v[8];//v.z;\r\n        //v=b.vertex1;\r\n        v4x=v[0];//v.x;\r\n        v4y=v[1];//v.y;\r\n        v4z=v[2];//v.z;\r\n        break;\r\n        case 5:\r\n        //v=b.vertex2;\r\n        v1x=v[3];//v.x;\r\n        v1y=v[4];//v.y;\r\n        v1z=v[5];//v.z;\r\n        //v=b.vertex4;\r\n        v2x=v[9];//v.x;\r\n        v2y=v[10];//v.y;\r\n        v2z=v[11];//v.z;\r\n        //v=b.vertex8;\r\n        v3x=v[21];//v.x;\r\n        v3y=v[22];//v.y;\r\n        v3z=v[23];//v.z;\r\n        //v=b.vertex6;\r\n        v4x=v[15];//v.x;\r\n        v4y=v[16];//v.y;\r\n        v4z=v[17];//v.z;\r\n        break;\r\n        }\r\n        pd=nx*(v1x-ccx)+ny*(v1y-ccy)+nz*(v1z-ccz);\r\n        if(pd<=0)manifold.addPoint(v1x,v1y,v1z,-nx,-ny,-nz,pd,this.flip);\r\n        pd=nx*(v2x-ccx)+ny*(v2y-ccy)+nz*(v2z-ccz);\r\n        if(pd<=0)manifold.addPoint(v2x,v2y,v2z,-nx,-ny,-nz,pd,this.flip);\r\n        pd=nx*(v3x-ccx)+ny*(v3y-ccy)+nz*(v3z-ccz);\r\n        if(pd<=0)manifold.addPoint(v3x,v3y,v3z,-nx,-ny,-nz,pd,this.flip);\r\n        pd=nx*(v4x-ccx)+ny*(v4y-ccy)+nz*(v4z-ccz);\r\n        if(pd<=0)manifold.addPoint(v4x,v4y,v4z,-nx,-ny,-nz,pd,this.flip);\r\n        }else{\r\n        switch(state){\r\n        case 1:\r\n        if(right1){\r\n        cbx=pbx+dwx;\r\n        cby=pby+dwy;\r\n        cbz=pbz+dwz;\r\n        nx=nwx;\r\n        ny=nwy;\r\n        nz=nwz;\r\n        }else{\r\n        cbx=pbx-dwx;\r\n        cby=pby-dwy;\r\n        cbz=pbz-dwz;\r\n        nx=-nwx;\r\n        ny=-nwy;\r\n        nz=-nwz;\r\n        }\r\n        dir1x=nhx;\r\n        dir1y=nhy;\r\n        dir1z=nhz;\r\n        dir1l=bh;\r\n        dir2x=ndx;\r\n        dir2y=ndy;\r\n        dir2z=ndz;\r\n        dir2l=bd;\r\n        break;\r\n        case 2:\r\n        if(right2){\r\n        cbx=pbx+dhx;\r\n        cby=pby+dhy;\r\n        cbz=pbz+dhz;\r\n        nx=nhx;\r\n        ny=nhy;\r\n        nz=nhz;\r\n        }else{\r\n        cbx=pbx-dhx;\r\n        cby=pby-dhy;\r\n        cbz=pbz-dhz;\r\n        nx=-nhx;\r\n        ny=-nhy;\r\n        nz=-nhz;\r\n        }\r\n        dir1x=nwx;\r\n        dir1y=nwy;\r\n        dir1z=nwz;\r\n        dir1l=bw;\r\n        dir2x=ndx;\r\n        dir2y=ndy;\r\n        dir2z=ndz;\r\n        dir2l=bd;\r\n        break;\r\n        case 3:\r\n        if(right3){\r\n        cbx=pbx+ddx;\r\n        cby=pby+ddy;\r\n        cbz=pbz+ddz;\r\n        nx=ndx;\r\n        ny=ndy;\r\n        nz=ndz;\r\n        }else{\r\n        cbx=pbx-ddx;\r\n        cby=pby-ddy;\r\n        cbz=pbz-ddz;\r\n        nx=-ndx;\r\n        ny=-ndy;\r\n        nz=-ndz;\r\n        }\r\n        dir1x=nwx;\r\n        dir1y=nwy;\r\n        dir1z=nwz;\r\n        dir1l=bw;\r\n        dir2x=nhx;\r\n        dir2y=nhy;\r\n        dir2z=nhz;\r\n        dir2l=bh;\r\n        break;\r\n        }\r\n        dot=nx*ncx+ny*ncy+nz*ncz;\r\n        if(dot<0)len=ch;\r\n        else len=-ch;\r\n        ccx=pcx+len*ncx;\r\n        ccy=pcy+len*ncy;\r\n        ccz=pcz+len*ncz;\r\n        if(dotc>=0.999999){\r\n        tx=-ny;\r\n        ty=nz;\r\n        tz=nx;\r\n        }else{\r\n        tx=nx;\r\n        ty=ny;\r\n        tz=nz;\r\n        }\r\n        len=tx*ncx+ty*ncy+tz*ncz;\r\n        dx=len*ncx-tx;\r\n        dy=len*ncy-ty;\r\n        dz=len*ncz-tz;\r\n        len=_Math.sqrt(dx*dx+dy*dy+dz*dz);\r\n        if(len==0)return;\r\n        len=r/len;\r\n        dx*=len;\r\n        dy*=len;\r\n        dz*=len;\r\n        tx=ccx+dx;\r\n        ty=ccy+dy;\r\n        tz=ccz+dz;\r\n        if(dot<-0.96||dot>0.96){\r\n        r00=ncx*ncx*1.5-0.5;\r\n        r01=ncx*ncy*1.5-ncz*0.866025403;\r\n        r02=ncx*ncz*1.5+ncy*0.866025403;\r\n        r10=ncy*ncx*1.5+ncz*0.866025403;\r\n        r11=ncy*ncy*1.5-0.5;\r\n        r12=ncy*ncz*1.5-ncx*0.866025403;\r\n        r20=ncz*ncx*1.5-ncy*0.866025403;\r\n        r21=ncz*ncy*1.5+ncx*0.866025403;\r\n        r22=ncz*ncz*1.5-0.5;\r\n        px=tx;\r\n        py=ty;\r\n        pz=tz;\r\n        pd=nx*(px-cbx)+ny*(py-cby)+nz*(pz-cbz);\r\n        tx=px-pd*nx-cbx;\r\n        ty=py-pd*ny-cby;\r\n        tz=pz-pd*nz-cbz;\r\n        sd=dir1x*tx+dir1y*ty+dir1z*tz;\r\n        ed=dir2x*tx+dir2y*ty+dir2z*tz;\r\n        if(sd<-dir1l)sd=-dir1l;\r\n        else if(sd>dir1l)sd=dir1l;\r\n        if(ed<-dir2l)ed=-dir2l;\r\n        else if(ed>dir2l)ed=dir2l;\r\n        tx=sd*dir1x+ed*dir2x;\r\n        ty=sd*dir1y+ed*dir2y;\r\n        tz=sd*dir1z+ed*dir2z;\r\n        px=cbx+tx;\r\n        py=cby+ty;\r\n        pz=cbz+tz;\r\n        manifold.addPoint(px,py,pz,nx,ny,nz,pd,this.flip);\r\n        px=dx*r00+dy*r01+dz*r02;\r\n        py=dx*r10+dy*r11+dz*r12;\r\n        pz=dx*r20+dy*r21+dz*r22;\r\n        px=(dx=px)+ccx;\r\n        py=(dy=py)+ccy;\r\n        pz=(dz=pz)+ccz;\r\n        pd=nx*(px-cbx)+ny*(py-cby)+nz*(pz-cbz);\r\n        if(pd<=0){\r\n        tx=px-pd*nx-cbx;\r\n        ty=py-pd*ny-cby;\r\n        tz=pz-pd*nz-cbz;\r\n        sd=dir1x*tx+dir1y*ty+dir1z*tz;\r\n        ed=dir2x*tx+dir2y*ty+dir2z*tz;\r\n        if(sd<-dir1l)sd=-dir1l;\r\n        else if(sd>dir1l)sd=dir1l;\r\n        if(ed<-dir2l)ed=-dir2l;\r\n        else if(ed>dir2l)ed=dir2l;\r\n        tx=sd*dir1x+ed*dir2x;\r\n        ty=sd*dir1y+ed*dir2y;\r\n        tz=sd*dir1z+ed*dir2z;\r\n        px=cbx+tx;\r\n        py=cby+ty;\r\n        pz=cbz+tz;\r\n        //manifold.addPoint(px,py,pz,nx,ny,nz,pd,b,c,2,0,false);\r\n        manifold.addPoint(px,py,pz,nx,ny,nz,pd,this.flip);\r\n        }\r\n        px=dx*r00+dy*r01+dz*r02;\r\n        py=dx*r10+dy*r11+dz*r12;\r\n        pz=dx*r20+dy*r21+dz*r22;\r\n        px=(dx=px)+ccx;\r\n        py=(dy=py)+ccy;\r\n        pz=(dz=pz)+ccz;\r\n        pd=nx*(px-cbx)+ny*(py-cby)+nz*(pz-cbz);\r\n        if(pd<=0){\r\n        tx=px-pd*nx-cbx;\r\n        ty=py-pd*ny-cby;\r\n        tz=pz-pd*nz-cbz;\r\n        sd=dir1x*tx+dir1y*ty+dir1z*tz;\r\n        ed=dir2x*tx+dir2y*ty+dir2z*tz;\r\n        if(sd<-dir1l)sd=-dir1l;\r\n        else if(sd>dir1l)sd=dir1l;\r\n        if(ed<-dir2l)ed=-dir2l;\r\n        else if(ed>dir2l)ed=dir2l;\r\n        tx=sd*dir1x+ed*dir2x;\r\n        ty=sd*dir1y+ed*dir2y;\r\n        tz=sd*dir1z+ed*dir2z;\r\n        px=cbx+tx;\r\n        py=cby+ty;\r\n        pz=cbz+tz;\r\n        //manifold.addPoint(px,py,pz,nx,ny,nz,pd,b,c,3,0,false);\r\n        manifold.addPoint(px,py,pz,nx,ny,nz,pd,this.flip);\r\n        }\r\n        }else{\r\n        sx=tx;\r\n        sy=ty;\r\n        sz=tz;\r\n        sd=nx*(sx-cbx)+ny*(sy-cby)+nz*(sz-cbz);\r\n        sx-=sd*nx;\r\n        sy-=sd*ny;\r\n        sz-=sd*nz;\r\n        if(dot>0){\r\n        ex=tx+dcx*2;\r\n        ey=ty+dcy*2;\r\n        ez=tz+dcz*2;\r\n        }else{\r\n        ex=tx-dcx*2;\r\n        ey=ty-dcy*2;\r\n        ez=tz-dcz*2;\r\n        }\r\n        ed=nx*(ex-cbx)+ny*(ey-cby)+nz*(ez-cbz);\r\n        ex-=ed*nx;\r\n        ey-=ed*ny;\r\n        ez-=ed*nz;\r\n        d1x=sx-cbx;\r\n        d1y=sy-cby;\r\n        d1z=sz-cbz;\r\n        d2x=ex-cbx;\r\n        d2y=ey-cby;\r\n        d2z=ez-cbz;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        td=ed-sd;\r\n        dotw=d1x*dir1x+d1y*dir1y+d1z*dir1z;\r\n        doth=d2x*dir1x+d2y*dir1y+d2z*dir1z;\r\n        dot1=dotw-dir1l;\r\n        dot2=doth-dir1l;\r\n        if(dot1>0){\r\n        if(dot2>0)return;\r\n        t1=dot1/(dot1-dot2);\r\n        sx=sx+tx*t1;\r\n        sy=sy+ty*t1;\r\n        sz=sz+tz*t1;\r\n        sd=sd+td*t1;\r\n        d1x=sx-cbx;\r\n        d1y=sy-cby;\r\n        d1z=sz-cbz;\r\n        dotw=d1x*dir1x+d1y*dir1y+d1z*dir1z;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        td=ed-sd;\r\n        }else if(dot2>0){\r\n        t1=dot1/(dot1-dot2);\r\n        ex=sx+tx*t1;\r\n        ey=sy+ty*t1;\r\n        ez=sz+tz*t1;\r\n        ed=sd+td*t1;\r\n        d2x=ex-cbx;\r\n        d2y=ey-cby;\r\n        d2z=ez-cbz;\r\n        doth=d2x*dir1x+d2y*dir1y+d2z*dir1z;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        td=ed-sd;\r\n        }\r\n        dot1=dotw+dir1l;\r\n        dot2=doth+dir1l;\r\n        if(dot1<0){\r\n        if(dot2<0)return;\r\n        t1=dot1/(dot1-dot2);\r\n        sx=sx+tx*t1;\r\n        sy=sy+ty*t1;\r\n        sz=sz+tz*t1;\r\n        sd=sd+td*t1;\r\n        d1x=sx-cbx;\r\n        d1y=sy-cby;\r\n        d1z=sz-cbz;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        td=ed-sd;\r\n        }else if(dot2<0){\r\n        t1=dot1/(dot1-dot2);\r\n        ex=sx+tx*t1;\r\n        ey=sy+ty*t1;\r\n        ez=sz+tz*t1;\r\n        ed=sd+td*t1;\r\n        d2x=ex-cbx;\r\n        d2y=ey-cby;\r\n        d2z=ez-cbz;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        td=ed-sd;\r\n        }\r\n        dotw=d1x*dir2x+d1y*dir2y+d1z*dir2z;\r\n        doth=d2x*dir2x+d2y*dir2y+d2z*dir2z;\r\n        dot1=dotw-dir2l;\r\n        dot2=doth-dir2l;\r\n        if(dot1>0){\r\n        if(dot2>0)return;\r\n        t1=dot1/(dot1-dot2);\r\n        sx=sx+tx*t1;\r\n        sy=sy+ty*t1;\r\n        sz=sz+tz*t1;\r\n        sd=sd+td*t1;\r\n        d1x=sx-cbx;\r\n        d1y=sy-cby;\r\n        d1z=sz-cbz;\r\n        dotw=d1x*dir2x+d1y*dir2y+d1z*dir2z;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        td=ed-sd;\r\n        }else if(dot2>0){\r\n        t1=dot1/(dot1-dot2);\r\n        ex=sx+tx*t1;\r\n        ey=sy+ty*t1;\r\n        ez=sz+tz*t1;\r\n        ed=sd+td*t1;\r\n        d2x=ex-cbx;\r\n        d2y=ey-cby;\r\n        d2z=ez-cbz;\r\n        doth=d2x*dir2x+d2y*dir2y+d2z*dir2z;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        td=ed-sd;\r\n        }\r\n        dot1=dotw+dir2l;\r\n        dot2=doth+dir2l;\r\n        if(dot1<0){\r\n        if(dot2<0)return;\r\n        t1=dot1/(dot1-dot2);\r\n        sx=sx+tx*t1;\r\n        sy=sy+ty*t1;\r\n        sz=sz+tz*t1;\r\n        sd=sd+td*t1;\r\n        }else if(dot2<0){\r\n        t1=dot1/(dot1-dot2);\r\n        ex=sx+tx*t1;\r\n        ey=sy+ty*t1;\r\n        ez=sz+tz*t1;\r\n        ed=sd+td*t1;\r\n        }\r\n        if(sd<0){\r\n        //manifold.addPoint(sx,sy,sz,nx,ny,nz,sd,b,c,1,0,false);\r\n        manifold.addPoint(sx,sy,sz,nx,ny,nz,sd,this.flip);\r\n        }\r\n        if(ed<0){\r\n        //manifold.addPoint(ex,ey,ez,nx,ny,nz,ed,b,c,4,0,false);\r\n        manifold.addPoint(ex,ey,ez,nx,ny,nz,ed,this.flip);\r\n        }\r\n        }\r\n        }\r\n\r\n    }\r\n\r\n    });\n\nfunction CylinderCylinderCollisionDetector() {\r\n    \r\n    CollisionDetector.call( this );\r\n\r\n}\r\n\r\nCylinderCylinderCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\r\n\r\n    constructor: CylinderCylinderCollisionDetector,\r\n\r\n\r\n    getSep: function ( c1, c2, sep, pos, dep ) {\r\n\r\n        var t1x;\r\n        var t1y;\r\n        var t1z;\r\n        var t2x;\r\n        var t2y;\r\n        var t2z;\r\n        var sup=new Vec3();\r\n        var len;\r\n        var p1x;\r\n        var p1y;\r\n        var p1z;\r\n        var p2x;\r\n        var p2y;\r\n        var p2z;\r\n        var v01x=c1.position.x;\r\n        var v01y=c1.position.y;\r\n        var v01z=c1.position.z;\r\n        var v02x=c2.position.x;\r\n        var v02y=c2.position.y;\r\n        var v02z=c2.position.z;\r\n        var v0x=v02x-v01x;\r\n        var v0y=v02y-v01y;\r\n        var v0z=v02z-v01z;\r\n        if(v0x*v0x+v0y*v0y+v0z*v0z==0)v0y=0.001;\r\n        var nx=-v0x;\r\n        var ny=-v0y;\r\n        var nz=-v0z;\r\n        this.supportPoint(c1,-nx,-ny,-nz,sup);\r\n        var v11x=sup.x;\r\n        var v11y=sup.y;\r\n        var v11z=sup.z;\r\n        this.supportPoint(c2,nx,ny,nz,sup);\r\n        var v12x=sup.x;\r\n        var v12y=sup.y;\r\n        var v12z=sup.z;\r\n        var v1x=v12x-v11x;\r\n        var v1y=v12y-v11y;\r\n        var v1z=v12z-v11z;\r\n        if(v1x*nx+v1y*ny+v1z*nz<=0){\r\n        return false;\r\n        }\r\n        nx=v1y*v0z-v1z*v0y;\r\n        ny=v1z*v0x-v1x*v0z;\r\n        nz=v1x*v0y-v1y*v0x;\r\n        if(nx*nx+ny*ny+nz*nz==0){\r\n        sep.set( v1x-v0x, v1y-v0y, v1z-v0z ).normalize();\r\n        pos.set( (v11x+v12x)*0.5, (v11y+v12y)*0.5, (v11z+v12z)*0.5 );\r\n        return true;\r\n        }\r\n        this.supportPoint(c1,-nx,-ny,-nz,sup);\r\n        var v21x=sup.x;\r\n        var v21y=sup.y;\r\n        var v21z=sup.z;\r\n        this.supportPoint(c2,nx,ny,nz,sup);\r\n        var v22x=sup.x;\r\n        var v22y=sup.y;\r\n        var v22z=sup.z;\r\n        var v2x=v22x-v21x;\r\n        var v2y=v22y-v21y;\r\n        var v2z=v22z-v21z;\r\n        if(v2x*nx+v2y*ny+v2z*nz<=0){\r\n        return false;\r\n        }\r\n        t1x=v1x-v0x;\r\n        t1y=v1y-v0y;\r\n        t1z=v1z-v0z;\r\n        t2x=v2x-v0x;\r\n        t2y=v2y-v0y;\r\n        t2z=v2z-v0z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        if(nx*v0x+ny*v0y+nz*v0z>0){\r\n        t1x=v1x;\r\n        t1y=v1y;\r\n        t1z=v1z;\r\n        v1x=v2x;\r\n        v1y=v2y;\r\n        v1z=v2z;\r\n        v2x=t1x;\r\n        v2y=t1y;\r\n        v2z=t1z;\r\n        t1x=v11x;\r\n        t1y=v11y;\r\n        t1z=v11z;\r\n        v11x=v21x;\r\n        v11y=v21y;\r\n        v11z=v21z;\r\n        v21x=t1x;\r\n        v21y=t1y;\r\n        v21z=t1z;\r\n        t1x=v12x;\r\n        t1y=v12y;\r\n        t1z=v12z;\r\n        v12x=v22x;\r\n        v12y=v22y;\r\n        v12z=v22z;\r\n        v22x=t1x;\r\n        v22y=t1y;\r\n        v22z=t1z;\r\n        nx=-nx;\r\n        ny=-ny;\r\n        nz=-nz;\r\n        }\r\n        var iterations=0;\r\n        while(true){\r\n        if(++iterations>100){\r\n        return false;\r\n        }\r\n        this.supportPoint(c1,-nx,-ny,-nz,sup);\r\n        var v31x=sup.x;\r\n        var v31y=sup.y;\r\n        var v31z=sup.z;\r\n        this.supportPoint(c2,nx,ny,nz,sup);\r\n        var v32x=sup.x;\r\n        var v32y=sup.y;\r\n        var v32z=sup.z;\r\n        var v3x=v32x-v31x;\r\n        var v3y=v32y-v31y;\r\n        var v3z=v32z-v31z;\r\n        if(v3x*nx+v3y*ny+v3z*nz<=0){\r\n        return false;\r\n        }\r\n        if((v1y*v3z-v1z*v3y)*v0x+(v1z*v3x-v1x*v3z)*v0y+(v1x*v3y-v1y*v3x)*v0z<0){\r\n        v2x=v3x;\r\n        v2y=v3y;\r\n        v2z=v3z;\r\n        v21x=v31x;\r\n        v21y=v31y;\r\n        v21z=v31z;\r\n        v22x=v32x;\r\n        v22y=v32y;\r\n        v22z=v32z;\r\n        t1x=v1x-v0x;\r\n        t1y=v1y-v0y;\r\n        t1z=v1z-v0z;\r\n        t2x=v3x-v0x;\r\n        t2y=v3y-v0y;\r\n        t2z=v3z-v0z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        continue;\r\n        }\r\n        if((v3y*v2z-v3z*v2y)*v0x+(v3z*v2x-v3x*v2z)*v0y+(v3x*v2y-v3y*v2x)*v0z<0){\r\n        v1x=v3x;\r\n        v1y=v3y;\r\n        v1z=v3z;\r\n        v11x=v31x;\r\n        v11y=v31y;\r\n        v11z=v31z;\r\n        v12x=v32x;\r\n        v12y=v32y;\r\n        v12z=v32z;\r\n        t1x=v3x-v0x;\r\n        t1y=v3y-v0y;\r\n        t1z=v3z-v0z;\r\n        t2x=v2x-v0x;\r\n        t2y=v2y-v0y;\r\n        t2z=v2z-v0z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        continue;\r\n        }\r\n        var hit=false;\r\n        while(true){\r\n        t1x=v2x-v1x;\r\n        t1y=v2y-v1y;\r\n        t1z=v2z-v1z;\r\n        t2x=v3x-v1x;\r\n        t2y=v3y-v1y;\r\n        t2z=v3z-v1z;\r\n        nx=t1y*t2z-t1z*t2y;\r\n        ny=t1z*t2x-t1x*t2z;\r\n        nz=t1x*t2y-t1y*t2x;\r\n        len=1/_Math.sqrt(nx*nx+ny*ny+nz*nz);\r\n        nx*=len;\r\n        ny*=len;\r\n        nz*=len;\r\n        if(nx*v1x+ny*v1y+nz*v1z>=0&&!hit){\r\n        var b0=(v1y*v2z-v1z*v2y)*v3x+(v1z*v2x-v1x*v2z)*v3y+(v1x*v2y-v1y*v2x)*v3z;\r\n        var b1=(v3y*v2z-v3z*v2y)*v0x+(v3z*v2x-v3x*v2z)*v0y+(v3x*v2y-v3y*v2x)*v0z;\r\n        var b2=(v0y*v1z-v0z*v1y)*v3x+(v0z*v1x-v0x*v1z)*v3y+(v0x*v1y-v0y*v1x)*v3z;\r\n        var b3=(v2y*v1z-v2z*v1y)*v0x+(v2z*v1x-v2x*v1z)*v0y+(v2x*v1y-v2y*v1x)*v0z;\r\n        var sum=b0+b1+b2+b3;\r\n        if(sum<=0){\r\n        b0=0;\r\n        b1=(v2y*v3z-v2z*v3y)*nx+(v2z*v3x-v2x*v3z)*ny+(v2x*v3y-v2y*v3x)*nz;\r\n        b2=(v3y*v2z-v3z*v2y)*nx+(v3z*v2x-v3x*v2z)*ny+(v3x*v2y-v3y*v2x)*nz;\r\n        b3=(v1y*v2z-v1z*v2y)*nx+(v1z*v2x-v1x*v2z)*ny+(v1x*v2y-v1y*v2x)*nz;\r\n        sum=b1+b2+b3;\r\n        }\r\n        var inv=1/sum;\r\n        p1x=(v01x*b0+v11x*b1+v21x*b2+v31x*b3)*inv;\r\n        p1y=(v01y*b0+v11y*b1+v21y*b2+v31y*b3)*inv;\r\n        p1z=(v01z*b0+v11z*b1+v21z*b2+v31z*b3)*inv;\r\n        p2x=(v02x*b0+v12x*b1+v22x*b2+v32x*b3)*inv;\r\n        p2y=(v02y*b0+v12y*b1+v22y*b2+v32y*b3)*inv;\r\n        p2z=(v02z*b0+v12z*b1+v22z*b2+v32z*b3)*inv;\r\n        hit=true;\r\n        }\r\n        this.supportPoint(c1,-nx,-ny,-nz,sup);\r\n        var v41x=sup.x;\r\n        var v41y=sup.y;\r\n        var v41z=sup.z;\r\n        this.supportPoint(c2,nx,ny,nz,sup);\r\n        var v42x=sup.x;\r\n        var v42y=sup.y;\r\n        var v42z=sup.z;\r\n        var v4x=v42x-v41x;\r\n        var v4y=v42y-v41y;\r\n        var v4z=v42z-v41z;\r\n        var separation=-(v4x*nx+v4y*ny+v4z*nz);\r\n        if((v4x-v3x)*nx+(v4y-v3y)*ny+(v4z-v3z)*nz<=0.01||separation>=0){\r\n        if(hit){\r\n        sep.set( -nx, -ny, -nz );\r\n        pos.set( (p1x+p2x)*0.5, (p1y+p2y)*0.5, (p1z+p2z)*0.5 );\r\n        dep.x=separation;\r\n        return true;\r\n        }\r\n        return false;\r\n        }\r\n        if(\r\n        (v4y*v1z-v4z*v1y)*v0x+\r\n        (v4z*v1x-v4x*v1z)*v0y+\r\n        (v4x*v1y-v4y*v1x)*v0z<0\r\n        ){\r\n        if(\r\n        (v4y*v2z-v4z*v2y)*v0x+\r\n        (v4z*v2x-v4x*v2z)*v0y+\r\n        (v4x*v2y-v4y*v2x)*v0z<0\r\n        ){\r\n        v1x=v4x;\r\n        v1y=v4y;\r\n        v1z=v4z;\r\n        v11x=v41x;\r\n        v11y=v41y;\r\n        v11z=v41z;\r\n        v12x=v42x;\r\n        v12y=v42y;\r\n        v12z=v42z;\r\n        }else{\r\n        v3x=v4x;\r\n        v3y=v4y;\r\n        v3z=v4z;\r\n        v31x=v41x;\r\n        v31y=v41y;\r\n        v31z=v41z;\r\n        v32x=v42x;\r\n        v32y=v42y;\r\n        v32z=v42z;\r\n        }\r\n        }else{\r\n        if(\r\n        (v4y*v3z-v4z*v3y)*v0x+\r\n        (v4z*v3x-v4x*v3z)*v0y+\r\n        (v4x*v3y-v4y*v3x)*v0z<0\r\n        ){\r\n        v2x=v4x;\r\n        v2y=v4y;\r\n        v2z=v4z;\r\n        v21x=v41x;\r\n        v21y=v41y;\r\n        v21z=v41z;\r\n        v22x=v42x;\r\n        v22y=v42y;\r\n        v22z=v42z;\r\n        }else{\r\n        v1x=v4x;\r\n        v1y=v4y;\r\n        v1z=v4z;\r\n        v11x=v41x;\r\n        v11y=v41y;\r\n        v11z=v41z;\r\n        v12x=v42x;\r\n        v12y=v42y;\r\n        v12z=v42z;\r\n        }\r\n        }\r\n        }\r\n        }\r\n        //return false;\r\n    },\r\n\r\n    supportPoint: function ( c, dx, dy, dz, out ) {\r\n\r\n        var rot=c.rotation.elements;\r\n        var ldx=rot[0]*dx+rot[3]*dy+rot[6]*dz;\r\n        var ldy=rot[1]*dx+rot[4]*dy+rot[7]*dz;\r\n        var ldz=rot[2]*dx+rot[5]*dy+rot[8]*dz;\r\n        var radx=ldx;\r\n        var radz=ldz;\r\n        var len=radx*radx+radz*radz;\r\n        var rad=c.radius;\r\n        var hh=c.halfHeight;\r\n        var ox;\r\n        var oy;\r\n        var oz;\r\n        if(len==0){\r\n        if(ldy<0){\r\n        ox=rad;\r\n        oy=-hh;\r\n        oz=0;\r\n        }else{\r\n        ox=rad;\r\n        oy=hh;\r\n        oz=0;\r\n        }\r\n        }else{\r\n        len=c.radius/_Math.sqrt(len);\r\n        if(ldy<0){\r\n        ox=radx*len;\r\n        oy=-hh;\r\n        oz=radz*len;\r\n        }else{\r\n        ox=radx*len;\r\n        oy=hh;\r\n        oz=radz*len;\r\n        }\r\n        }\r\n        ldx=rot[0]*ox+rot[1]*oy+rot[2]*oz+c.position.x;\r\n        ldy=rot[3]*ox+rot[4]*oy+rot[5]*oz+c.position.y;\r\n        ldz=rot[6]*ox+rot[7]*oy+rot[8]*oz+c.position.z;\r\n        out.set( ldx, ldy, ldz );\r\n\r\n    },\r\n\r\n    detectCollision: function ( shape1, shape2, manifold ) {\r\n\r\n        var c1;\r\n        var c2;\r\n        if(shape1.id<shape2.id){\r\n            c1=shape1;\r\n            c2=shape2;\r\n        }else{\r\n            c1=shape2;\r\n            c2=shape1;\r\n        }\r\n        var p1=c1.position;\r\n        var p2=c2.position;\r\n        var p1x=p1.x;\r\n        var p1y=p1.y;\r\n        var p1z=p1.z;\r\n        var p2x=p2.x;\r\n        var p2y=p2.y;\r\n        var p2z=p2.z;\r\n        var h1=c1.halfHeight;\r\n        var h2=c2.halfHeight;\r\n        var n1=c1.normalDirection;\r\n        var n2=c2.normalDirection;\r\n        var d1=c1.halfDirection;\r\n        var d2=c2.halfDirection;\r\n        var r1=c1.radius;\r\n        var r2=c2.radius;\r\n        var n1x=n1.x;\r\n        var n1y=n1.y;\r\n        var n1z=n1.z;\r\n        var n2x=n2.x;\r\n        var n2y=n2.y;\r\n        var n2z=n2.z;\r\n        var d1x=d1.x;\r\n        var d1y=d1.y;\r\n        var d1z=d1.z;\r\n        var d2x=d2.x;\r\n        var d2y=d2.y;\r\n        var d2z=d2.z;\r\n        var dx=p1x-p2x;\r\n        var dy=p1y-p2y;\r\n        var dz=p1z-p2z;\r\n        var len;\r\n        var c1x;\r\n        var c1y;\r\n        var c1z;\r\n        var c2x;\r\n        var c2y;\r\n        var c2z;\r\n        var tx;\r\n        var ty;\r\n        var tz;\r\n        var sx;\r\n        var sy;\r\n        var sz;\r\n        var ex;\r\n        var ey;\r\n        var ez;\r\n        var depth1;\r\n        var depth2;\r\n        var dot;\r\n        var t1;\r\n        var t2;\r\n        var sep=new Vec3();\r\n        var pos=new Vec3();\r\n        var dep=new Vec3();\r\n        if(!this.getSep(c1,c2,sep,pos,dep))return;\r\n        var dot1=sep.x*n1x+sep.y*n1y+sep.z*n1z;\r\n        var dot2=sep.x*n2x+sep.y*n2y+sep.z*n2z;\r\n        var right1=dot1>0;\r\n        var right2=dot2>0;\r\n        if(!right1)dot1=-dot1;\r\n        if(!right2)dot2=-dot2;\r\n        var state=0;\r\n        if(dot1>0.999||dot2>0.999){\r\n        if(dot1>dot2)state=1;\r\n        else state=2;\r\n        }\r\n        var nx;\r\n        var ny;\r\n        var nz;\r\n        var depth=dep.x;\r\n        var r00;\r\n        var r01;\r\n        var r02;\r\n        var r10;\r\n        var r11;\r\n        var r12;\r\n        var r20;\r\n        var r21;\r\n        var r22;\r\n        var px;\r\n        var py;\r\n        var pz;\r\n        var pd;\r\n        var a;\r\n        var b;\r\n        var e;\r\n        var f;\r\n        nx=sep.x;\r\n        ny=sep.y;\r\n        nz=sep.z;\r\n        switch(state){\r\n        case 0:\r\n        manifold.addPoint(pos.x,pos.y,pos.z,nx,ny,nz,depth,false);\r\n        break;\r\n        case 1:\r\n        if(right1){\r\n        c1x=p1x+d1x;\r\n        c1y=p1y+d1y;\r\n        c1z=p1z+d1z;\r\n        nx=n1x;\r\n        ny=n1y;\r\n        nz=n1z;\r\n        }else{\r\n        c1x=p1x-d1x;\r\n        c1y=p1y-d1y;\r\n        c1z=p1z-d1z;\r\n        nx=-n1x;\r\n        ny=-n1y;\r\n        nz=-n1z;\r\n        }\r\n        dot=nx*n2x+ny*n2y+nz*n2z;\r\n        if(dot<0)len=h2;\r\n        else len=-h2;\r\n        c2x=p2x+len*n2x;\r\n        c2y=p2y+len*n2y;\r\n        c2z=p2z+len*n2z;\r\n        if(dot2>=0.999999){\r\n        tx=-ny;\r\n        ty=nz;\r\n        tz=nx;\r\n        }else{\r\n        tx=nx;\r\n        ty=ny;\r\n        tz=nz;\r\n        }\r\n        len=tx*n2x+ty*n2y+tz*n2z;\r\n        dx=len*n2x-tx;\r\n        dy=len*n2y-ty;\r\n        dz=len*n2z-tz;\r\n        len=_Math.sqrt(dx*dx+dy*dy+dz*dz);\r\n        if(len==0)break;\r\n        len=r2/len;\r\n        dx*=len;\r\n        dy*=len;\r\n        dz*=len;\r\n        tx=c2x+dx;\r\n        ty=c2y+dy;\r\n        tz=c2z+dz;\r\n        if(dot<-0.96||dot>0.96){\r\n        r00=n2x*n2x*1.5-0.5;\r\n        r01=n2x*n2y*1.5-n2z*0.866025403;\r\n        r02=n2x*n2z*1.5+n2y*0.866025403;\r\n        r10=n2y*n2x*1.5+n2z*0.866025403;\r\n        r11=n2y*n2y*1.5-0.5;\r\n        r12=n2y*n2z*1.5-n2x*0.866025403;\r\n        r20=n2z*n2x*1.5-n2y*0.866025403;\r\n        r21=n2z*n2y*1.5+n2x*0.866025403;\r\n        r22=n2z*n2z*1.5-0.5;\r\n        px=tx;\r\n        py=ty;\r\n        pz=tz;\r\n        pd=nx*(px-c1x)+ny*(py-c1y)+nz*(pz-c1z);\r\n        tx=px-pd*nx-c1x;\r\n        ty=py-pd*ny-c1y;\r\n        tz=pz-pd*nz-c1z;\r\n        len=tx*tx+ty*ty+tz*tz;\r\n        if(len>r1*r1){\r\n        len=r1/_Math.sqrt(len);\r\n        tx*=len;\r\n        ty*=len;\r\n        tz*=len;\r\n        }\r\n        px=c1x+tx;\r\n        py=c1y+ty;\r\n        pz=c1z+tz;\r\n        manifold.addPoint(px,py,pz,nx,ny,nz,pd,false);\r\n        px=dx*r00+dy*r01+dz*r02;\r\n        py=dx*r10+dy*r11+dz*r12;\r\n        pz=dx*r20+dy*r21+dz*r22;\r\n        px=(dx=px)+c2x;\r\n        py=(dy=py)+c2y;\r\n        pz=(dz=pz)+c2z;\r\n        pd=nx*(px-c1x)+ny*(py-c1y)+nz*(pz-c1z);\r\n        if(pd<=0){\r\n        tx=px-pd*nx-c1x;\r\n        ty=py-pd*ny-c1y;\r\n        tz=pz-pd*nz-c1z;\r\n        len=tx*tx+ty*ty+tz*tz;\r\n        if(len>r1*r1){\r\n        len=r1/_Math.sqrt(len);\r\n        tx*=len;\r\n        ty*=len;\r\n        tz*=len;\r\n        }\r\n        px=c1x+tx;\r\n        py=c1y+ty;\r\n        pz=c1z+tz;\r\n        manifold.addPoint(px,py,pz,nx,ny,nz,pd,false);\r\n        }\r\n        px=dx*r00+dy*r01+dz*r02;\r\n        py=dx*r10+dy*r11+dz*r12;\r\n        pz=dx*r20+dy*r21+dz*r22;\r\n        px=(dx=px)+c2x;\r\n        py=(dy=py)+c2y;\r\n        pz=(dz=pz)+c2z;\r\n        pd=nx*(px-c1x)+ny*(py-c1y)+nz*(pz-c1z);\r\n        if(pd<=0){\r\n        tx=px-pd*nx-c1x;\r\n        ty=py-pd*ny-c1y;\r\n        tz=pz-pd*nz-c1z;\r\n        len=tx*tx+ty*ty+tz*tz;\r\n        if(len>r1*r1){\r\n        len=r1/_Math.sqrt(len);\r\n        tx*=len;\r\n        ty*=len;\r\n        tz*=len;\r\n        }\r\n        px=c1x+tx;\r\n        py=c1y+ty;\r\n        pz=c1z+tz;\r\n        manifold.addPoint(px,py,pz,nx,ny,nz,pd,false);\r\n        }\r\n        }else{\r\n        sx=tx;\r\n        sy=ty;\r\n        sz=tz;\r\n        depth1=nx*(sx-c1x)+ny*(sy-c1y)+nz*(sz-c1z);\r\n        sx-=depth1*nx;\r\n        sy-=depth1*ny;\r\n        sz-=depth1*nz;\r\n        if(dot>0){\r\n        ex=tx+n2x*h2*2;\r\n        ey=ty+n2y*h2*2;\r\n        ez=tz+n2z*h2*2;\r\n        }else{\r\n        ex=tx-n2x*h2*2;\r\n        ey=ty-n2y*h2*2;\r\n        ez=tz-n2z*h2*2;\r\n        }\r\n        depth2=nx*(ex-c1x)+ny*(ey-c1y)+nz*(ez-c1z);\r\n        ex-=depth2*nx;\r\n        ey-=depth2*ny;\r\n        ez-=depth2*nz;\r\n        dx=c1x-sx;\r\n        dy=c1y-sy;\r\n        dz=c1z-sz;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        a=dx*dx+dy*dy+dz*dz;\r\n        b=dx*tx+dy*ty+dz*tz;\r\n        e=tx*tx+ty*ty+tz*tz;\r\n        f=b*b-e*(a-r1*r1);\r\n        if(f<0)break;\r\n        f=_Math.sqrt(f);\r\n        t1=(b+f)/e;\r\n        t2=(b-f)/e;\r\n        if(t2<t1){\r\n        len=t1;\r\n        t1=t2;\r\n        t2=len;\r\n        }\r\n        if(t2>1)t2=1;\r\n        if(t1<0)t1=0;\r\n        tx=sx+(ex-sx)*t1;\r\n        ty=sy+(ey-sy)*t1;\r\n        tz=sz+(ez-sz)*t1;\r\n        ex=sx+(ex-sx)*t2;\r\n        ey=sy+(ey-sy)*t2;\r\n        ez=sz+(ez-sz)*t2;\r\n        sx=tx;\r\n        sy=ty;\r\n        sz=tz;\r\n        len=depth1+(depth2-depth1)*t1;\r\n        depth2=depth1+(depth2-depth1)*t2;\r\n        depth1=len;\r\n        if(depth1<0) manifold.addPoint(sx,sy,sz,nx,ny,nz,pd,false);\r\n        if(depth2<0) manifold.addPoint(ex,ey,ez,nx,ny,nz,pd,false);\r\n        \r\n        }\r\n        break;\r\n        case 2:\r\n        if(right2){\r\n        c2x=p2x-d2x;\r\n        c2y=p2y-d2y;\r\n        c2z=p2z-d2z;\r\n        nx=-n2x;\r\n        ny=-n2y;\r\n        nz=-n2z;\r\n        }else{\r\n        c2x=p2x+d2x;\r\n        c2y=p2y+d2y;\r\n        c2z=p2z+d2z;\r\n        nx=n2x;\r\n        ny=n2y;\r\n        nz=n2z;\r\n        }\r\n        dot=nx*n1x+ny*n1y+nz*n1z;\r\n        if(dot<0)len=h1;\r\n        else len=-h1;\r\n        c1x=p1x+len*n1x;\r\n        c1y=p1y+len*n1y;\r\n        c1z=p1z+len*n1z;\r\n        if(dot1>=0.999999){\r\n        tx=-ny;\r\n        ty=nz;\r\n        tz=nx;\r\n        }else{\r\n        tx=nx;\r\n        ty=ny;\r\n        tz=nz;\r\n        }\r\n        len=tx*n1x+ty*n1y+tz*n1z;\r\n        dx=len*n1x-tx;\r\n        dy=len*n1y-ty;\r\n        dz=len*n1z-tz;\r\n        len=_Math.sqrt(dx*dx+dy*dy+dz*dz);\r\n        if(len==0)break;\r\n        len=r1/len;\r\n        dx*=len;\r\n        dy*=len;\r\n        dz*=len;\r\n        tx=c1x+dx;\r\n        ty=c1y+dy;\r\n        tz=c1z+dz;\r\n        if(dot<-0.96||dot>0.96){\r\n        r00=n1x*n1x*1.5-0.5;\r\n        r01=n1x*n1y*1.5-n1z*0.866025403;\r\n        r02=n1x*n1z*1.5+n1y*0.866025403;\r\n        r10=n1y*n1x*1.5+n1z*0.866025403;\r\n        r11=n1y*n1y*1.5-0.5;\r\n        r12=n1y*n1z*1.5-n1x*0.866025403;\r\n        r20=n1z*n1x*1.5-n1y*0.866025403;\r\n        r21=n1z*n1y*1.5+n1x*0.866025403;\r\n        r22=n1z*n1z*1.5-0.5;\r\n        px=tx;\r\n        py=ty;\r\n        pz=tz;\r\n        pd=nx*(px-c2x)+ny*(py-c2y)+nz*(pz-c2z);\r\n        tx=px-pd*nx-c2x;\r\n        ty=py-pd*ny-c2y;\r\n        tz=pz-pd*nz-c2z;\r\n        len=tx*tx+ty*ty+tz*tz;\r\n        if(len>r2*r2){\r\n        len=r2/_Math.sqrt(len);\r\n        tx*=len;\r\n        ty*=len;\r\n        tz*=len;\r\n        }\r\n        px=c2x+tx;\r\n        py=c2y+ty;\r\n        pz=c2z+tz;\r\n        manifold.addPoint(px,py,pz,-nx,-ny,-nz,pd,false);\r\n        px=dx*r00+dy*r01+dz*r02;\r\n        py=dx*r10+dy*r11+dz*r12;\r\n        pz=dx*r20+dy*r21+dz*r22;\r\n        px=(dx=px)+c1x;\r\n        py=(dy=py)+c1y;\r\n        pz=(dz=pz)+c1z;\r\n        pd=nx*(px-c2x)+ny*(py-c2y)+nz*(pz-c2z);\r\n        if(pd<=0){\r\n        tx=px-pd*nx-c2x;\r\n        ty=py-pd*ny-c2y;\r\n        tz=pz-pd*nz-c2z;\r\n        len=tx*tx+ty*ty+tz*tz;\r\n        if(len>r2*r2){\r\n        len=r2/_Math.sqrt(len);\r\n        tx*=len;\r\n        ty*=len;\r\n        tz*=len;\r\n        }\r\n        px=c2x+tx;\r\n        py=c2y+ty;\r\n        pz=c2z+tz;\r\n        manifold.addPoint(px,py,pz,-nx,-ny,-nz,pd,false);\r\n        }\r\n        px=dx*r00+dy*r01+dz*r02;\r\n        py=dx*r10+dy*r11+dz*r12;\r\n        pz=dx*r20+dy*r21+dz*r22;\r\n        px=(dx=px)+c1x;\r\n        py=(dy=py)+c1y;\r\n        pz=(dz=pz)+c1z;\r\n        pd=nx*(px-c2x)+ny*(py-c2y)+nz*(pz-c2z);\r\n        if(pd<=0){\r\n        tx=px-pd*nx-c2x;\r\n        ty=py-pd*ny-c2y;\r\n        tz=pz-pd*nz-c2z;\r\n        len=tx*tx+ty*ty+tz*tz;\r\n        if(len>r2*r2){\r\n        len=r2/_Math.sqrt(len);\r\n        tx*=len;\r\n        ty*=len;\r\n        tz*=len;\r\n        }\r\n        px=c2x+tx;\r\n        py=c2y+ty;\r\n        pz=c2z+tz;\r\n        manifold.addPoint(px,py,pz,-nx,-ny,-nz,pd,false);\r\n        }\r\n        }else{\r\n        sx=tx;\r\n        sy=ty;\r\n        sz=tz;\r\n        depth1=nx*(sx-c2x)+ny*(sy-c2y)+nz*(sz-c2z);\r\n        sx-=depth1*nx;\r\n        sy-=depth1*ny;\r\n        sz-=depth1*nz;\r\n        if(dot>0){\r\n        ex=tx+n1x*h1*2;\r\n        ey=ty+n1y*h1*2;\r\n        ez=tz+n1z*h1*2;\r\n        }else{\r\n        ex=tx-n1x*h1*2;\r\n        ey=ty-n1y*h1*2;\r\n        ez=tz-n1z*h1*2;\r\n        }\r\n        depth2=nx*(ex-c2x)+ny*(ey-c2y)+nz*(ez-c2z);\r\n        ex-=depth2*nx;\r\n        ey-=depth2*ny;\r\n        ez-=depth2*nz;\r\n        dx=c2x-sx;\r\n        dy=c2y-sy;\r\n        dz=c2z-sz;\r\n        tx=ex-sx;\r\n        ty=ey-sy;\r\n        tz=ez-sz;\r\n        a=dx*dx+dy*dy+dz*dz;\r\n        b=dx*tx+dy*ty+dz*tz;\r\n        e=tx*tx+ty*ty+tz*tz;\r\n        f=b*b-e*(a-r2*r2);\r\n        if(f<0)break;\r\n        f=_Math.sqrt(f);\r\n        t1=(b+f)/e;\r\n        t2=(b-f)/e;\r\n        if(t2<t1){\r\n        len=t1;\r\n        t1=t2;\r\n        t2=len;\r\n        }\r\n        if(t2>1)t2=1;\r\n        if(t1<0)t1=0;\r\n        tx=sx+(ex-sx)*t1;\r\n        ty=sy+(ey-sy)*t1;\r\n        tz=sz+(ez-sz)*t1;\r\n        ex=sx+(ex-sx)*t2;\r\n        ey=sy+(ey-sy)*t2;\r\n        ez=sz+(ez-sz)*t2;\r\n        sx=tx;\r\n        sy=ty;\r\n        sz=tz;\r\n        len=depth1+(depth2-depth1)*t1;\r\n        depth2=depth1+(depth2-depth1)*t2;\r\n        depth1=len;\r\n        if(depth1<0){\r\n        manifold.addPoint(sx,sy,sz,-nx,-ny,-nz,depth1,false);\r\n        }\r\n        if(depth2<0){\r\n        manifold.addPoint(ex,ey,ez,-nx,-ny,-nz,depth2,false);\r\n        }\r\n        }\r\n        break;\r\n        }\r\n\r\n    }\r\n\r\n});\n\n/**\n * A collision detector which detects collisions between sphere and box.\n * @author saharan\n */\nfunction SphereBoxCollisionDetector ( flip ) {\n    \n    CollisionDetector.call( this );\n    this.flip = flip;\n\n}\n\nSphereBoxCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\n\n    constructor: SphereBoxCollisionDetector,\n\n    detectCollision: function ( shape1, shape2, manifold ) {\n\n        var s;\n        var b;\n        if(this.flip){\n            s=(shape2);\n            b=(shape1);\n        }else{\n            s=(shape1);\n            b=(shape2);\n        }\n\n        var D = b.dimentions;\n\n        var ps=s.position;\n        var psx=ps.x;\n        var psy=ps.y;\n        var psz=ps.z;\n        var pb=b.position;\n        var pbx=pb.x;\n        var pby=pb.y;\n        var pbz=pb.z;\n        var rad=s.radius;\n\n        var hw=b.halfWidth;\n        var hh=b.halfHeight;\n        var hd=b.halfDepth;\n\n        var dx=psx-pbx;\n        var dy=psy-pby;\n        var dz=psz-pbz;\n        var sx=D[0]*dx+D[1]*dy+D[2]*dz;\n        var sy=D[3]*dx+D[4]*dy+D[5]*dz;\n        var sz=D[6]*dx+D[7]*dy+D[8]*dz;\n        var cx;\n        var cy;\n        var cz;\n        var len;\n        var invLen;\n        var overlap=0;\n        if(sx>hw){\n            sx=hw;\n        }else if(sx<-hw){\n            sx=-hw;\n        }else{\n            overlap=1;\n        }\n        if(sy>hh){\n            sy=hh;\n        }else if(sy<-hh){\n            sy=-hh;\n        }else{\n            overlap|=2;\n        }\n        if(sz>hd){\n            sz=hd;\n        }else if(sz<-hd){\n            sz=-hd;\n        }else{\n            overlap|=4;\n        }\n        if(overlap==7){\n            // center of sphere is in the box\n            if(sx<0){\n                dx=hw+sx;\n            }else{\n                dx=hw-sx;\n            }\n            if(sy<0){\n                dy=hh+sy;\n            }else{\n                dy=hh-sy;\n            }\n            if(sz<0){\n                dz=hd+sz;\n            }else{\n                dz=hd-sz;\n            }\n            if(dx<dy){\n                if(dx<dz){\n                    len=dx-hw;\n                if(sx<0){\n                    sx=-hw;\n                    dx=D[0];\n                    dy=D[1];\n                    dz=D[2];\n                }else{\n                    sx=hw;\n                    dx=-D[0];\n                    dy=-D[1];\n                    dz=-D[2];\n                }\n            }else{\n                len=dz-hd;\n                if(sz<0){\n                    sz=-hd;\n                    dx=D[6];\n                    dy=D[7];\n                    dz=D[8];\n                }else{\n                    sz=hd;\n                    dx=-D[6];\n                    dy=-D[7];\n                    dz=-D[8];\n                }\n            }\n            }else{\n                if(dy<dz){\n                    len=dy-hh;\n                    if(sy<0){\n                        sy=-hh;\n                        dx=D[3];\n                        dy=D[4];\n                        dz=D[5];\n                    }else{\n                        sy=hh;\n                        dx=-D[3];\n                        dy=-D[4];\n                        dz=-D[5];\n                    }\n                }else{\n                    len=dz-hd;\n                    if(sz<0){\n                        sz=-hd;\n                        dx=D[6];\n                        dy=D[7];\n                        dz=D[8];\n                    }else{\n                        sz=hd;\n                        dx=-D[6];\n                        dy=-D[7];\n                        dz=-D[8];\n                }\n            }\n        }\n        cx=pbx+sx*D[0]+sy*D[3]+sz*D[6];\n        cy=pby+sx*D[1]+sy*D[4]+sz*D[7];\n        cz=pbz+sx*D[2]+sy*D[5]+sz*D[8];\n        manifold.addPoint(psx+rad*dx,psy+rad*dy,psz+rad*dz,dx,dy,dz,len-rad,this.flip);\n        }else{\n            cx=pbx+sx*D[0]+sy*D[3]+sz*D[6];\n            cy=pby+sx*D[1]+sy*D[4]+sz*D[7];\n            cz=pbz+sx*D[2]+sy*D[5]+sz*D[8];\n            dx=cx-ps.x;\n            dy=cy-ps.y;\n            dz=cz-ps.z;\n            len=dx*dx+dy*dy+dz*dz;\n            if(len>0&&len<rad*rad){\n                len=_Math.sqrt(len);\n                invLen=1/len;\n                dx*=invLen;\n                dy*=invLen;\n                dz*=invLen;\n                manifold.addPoint(psx+rad*dx,psy+rad*dy,psz+rad*dz,dx,dy,dz,len-rad,this.flip);\n            }\n        }\n\n    }\n\n});\n\nfunction SphereCylinderCollisionDetector ( flip ){\n    \n    CollisionDetector.call( this );\n    this.flip = flip;\n\n}\n\nSphereCylinderCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\n\n    constructor: SphereCylinderCollisionDetector,\n\n    detectCollision: function ( shape1, shape2, manifold ) {\n        \n        var s;\n        var c;\n        if( this.flip ){\n            s = shape2;\n            c = shape1;\n        }else{\n            s = shape1;\n            c = shape2;\n        }\n        var ps = s.position;\n        var psx = ps.x;\n        var psy = ps.y;\n        var psz = ps.z;\n        var pc = c.position;\n        var pcx = pc.x;\n        var pcy = pc.y;\n        var pcz = pc.z;\n        var dirx = c.normalDirection.x;\n        var diry = c.normalDirection.y;\n        var dirz = c.normalDirection.z;\n        var rads = s.radius;\n        var radc = c.radius;\n        var rad2 = rads + radc;\n        var halfh = c.halfHeight;\n        var dx = psx - pcx;\n        var dy = psy - pcy;\n        var dz = psz - pcz;\n        var dot = dx * dirx + dy * diry + dz * dirz;\n        if ( dot < -halfh - rads || dot > halfh + rads ) return;\n        var cx = pcx + dot * dirx;\n        var cy = pcy + dot * diry;\n        var cz = pcz + dot * dirz;\n        var d2x = psx - cx;\n        var d2y = psy - cy;\n        var d2z = psz - cz;\n        var len = d2x * d2x + d2y * d2y + d2z * d2z;\n        if ( len > rad2 * rad2 ) return;\n        if ( len > radc * radc ) {\n            len = radc / _Math.sqrt( len );\n            d2x *= len;\n            d2y *= len;\n            d2z *= len;\n        }\n        if( dot < -halfh ) dot = -halfh;\n        else if( dot > halfh ) dot = halfh;\n        cx = pcx + dot * dirx + d2x;\n        cy = pcy + dot * diry + d2y;\n        cz = pcz + dot * dirz + d2z;\n        dx = cx - psx;\n        dy = cy - psy;\n        dz = cz - psz;\n        len = dx * dx + dy * dy + dz * dz;\n        var invLen;\n        if ( len > 0 && len < rads * rads ) {\n            len = _Math.sqrt(len);\n            invLen = 1 / len;\n            dx *= invLen;\n            dy *= invLen;\n            dz *= invLen;\n            ///result.addContactInfo(psx+dx*rads,psy+dy*rads,psz+dz*rads,dx,dy,dz,len-rads,s,c,0,0,false);\n            manifold.addPoint( psx + dx * rads, psy + dy * rads, psz + dz * rads, dx, dy, dz, len - rads, this.flip );\n        }\n\n    }\n\n\n});\n\n/**\n * A collision detector which detects collisions between two spheres.\n * @author saharan\n */\n \nfunction SphereSphereCollisionDetector (){\n\n    CollisionDetector.call( this );\n\n}\n\nSphereSphereCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\n\n    constructor: SphereSphereCollisionDetector,\n\n    detectCollision: function ( shape1, shape2, manifold ) {\n\n        var s1 = shape1;\n        var s2 = shape2;\n        var p1 = s1.position;\n        var p2 = s2.position;\n        var dx = p2.x - p1.x;\n        var dy = p2.y - p1.y;\n        var dz = p2.z - p1.z;\n        var len = dx * dx + dy * dy + dz * dz;\n        var r1 = s1.radius;\n        var r2 = s2.radius;\n        var rad = r1 + r2;\n        if ( len > 0 && len < rad * rad ){\n            len = _Math.sqrt( len );\n            var invLen = 1 / len;\n            dx *= invLen;\n            dy *= invLen;\n            dz *= invLen;\n            manifold.addPoint( p1.x + dx * r1, p1.y + dy * r1, p1.z + dz * r1, dx, dy, dz, len - rad, false );\n        }\n\n    }\n\n});\n\n/**\r\n * A collision detector which detects collisions between two spheres.\r\n * @author saharan \r\n * @author lo-th\r\n */\r\n \r\nfunction SpherePlaneCollisionDetector ( flip ){\r\n\r\n    CollisionDetector.call( this );\r\n\r\n    this.flip = flip;\r\n\r\n    this.n = new Vec3();\r\n    this.p = new Vec3();\r\n\r\n}\r\n\r\nSpherePlaneCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\r\n\r\n    constructor: SpherePlaneCollisionDetector,\r\n\r\n    detectCollision: function ( shape1, shape2, manifold ) {\r\n\r\n        var n = this.n;\r\n        var p = this.p;\r\n\r\n        var s = this.flip ? shape2 : shape1;\r\n        var pn = this.flip ? shape1 : shape2;\r\n        var rad = s.radius;\r\n        var len;\r\n\r\n        n.sub( s.position, pn.position );\r\n        //var h = _Math.dotVectors( pn.normal, n );\r\n\r\n        n.x *= pn.normal.x;//+ rad;\r\n        n.y *= pn.normal.y;\r\n        n.z *= pn.normal.z;//+ rad;\r\n\r\n        \r\n        var len = n.lengthSq();\r\n        \r\n        if( len > 0 && len < rad * rad){//&& h > rad*rad ){\r\n\r\n            \r\n            len = _Math.sqrt( len );\r\n            //len = _Math.sqrt( h );\r\n            n.copy(pn.normal).negate();\r\n            //n.scaleEqual( 1/len );\r\n\r\n            //(0, -1, 0)\r\n\r\n            //n.normalize();\r\n            p.copy( s.position ).addScaledVector( n, rad );\r\n            manifold.addPointVec( p, n, len - rad, this.flip );\r\n\r\n        }\r\n\r\n    }\r\n\r\n});\n\n/**\r\n * A collision detector which detects collisions between two spheres.\r\n * @author saharan \r\n * @author lo-th\r\n */\r\n \r\nfunction BoxPlaneCollisionDetector ( flip ){\r\n\r\n    CollisionDetector.call( this );\r\n\r\n    this.flip = flip;\r\n\r\n    this.n = new Vec3();\r\n    this.p = new Vec3();\r\n\r\n    this.dix = new Vec3();\r\n    this.diy = new Vec3();\r\n    this.diz = new Vec3();\r\n\r\n    this.cc = new Vec3();\r\n    this.cc2 = new Vec3();\r\n\r\n}\r\n\r\nBoxPlaneCollisionDetector.prototype = Object.assign( Object.create( CollisionDetector.prototype ), {\r\n\r\n    constructor: BoxPlaneCollisionDetector,\r\n\r\n    detectCollision: function ( shape1, shape2, manifold ) {\r\n\r\n        var n = this.n;\r\n        var p = this.p;\r\n        var cc = this.cc;\r\n\r\n        var b = this.flip ? shape2 : shape1;\r\n        var pn = this.flip ? shape1 : shape2;\r\n\r\n        var D = b.dimentions;\r\n        var hw = b.halfWidth;\r\n        var hh = b.halfHeight;\r\n        var hd = b.halfDepth;\r\n        var len;\r\n        var overlap = 0;\r\n\r\n        this.dix.set( D[0], D[1], D[2] );\r\n        this.diy.set( D[3], D[4], D[5] );\r\n        this.diz.set( D[6], D[7], D[8] );\r\n\r\n        n.sub( b.position, pn.position );\r\n\r\n        n.x *= pn.normal.x;//+ rad;\r\n        n.y *= pn.normal.y;\r\n        n.z *= pn.normal.z;//+ rad;\r\n\r\n        cc.set(\r\n            _Math.dotVectors( this.dix, n ),\r\n            _Math.dotVectors( this.diy, n ),\r\n            _Math.dotVectors( this.diz, n )\r\n        );\r\n\r\n\r\n        if( cc.x > hw ) cc.x = hw;\r\n        else if( cc.x < -hw ) cc.x = -hw;\r\n        else overlap = 1;\r\n        \r\n        if( cc.y > hh ) cc.y = hh;\r\n        else if( cc.y < -hh ) cc.y = -hh;\r\n        else overlap |= 2;\r\n        \r\n        if( cc.z > hd ) cc.z = hd;\r\n        else if( cc.z < -hd ) cc.z = -hd;\r\n        else overlap |= 4;\r\n\r\n        \r\n\r\n        if( overlap === 7 ){\r\n\r\n            // center of sphere is in the box\r\n            \r\n            n.set(\r\n                cc.x < 0 ? hw + cc.x : hw - cc.x,\r\n                cc.y < 0 ? hh + cc.y : hh - cc.y,\r\n                cc.z < 0 ? hd + cc.z : hd - cc.z\r\n            );\r\n            \r\n            if( n.x < n.y ){\r\n                if( n.x < n.z ){\r\n                    len = n.x - hw;\r\n                    if( cc.x < 0 ){\r\n                        cc.x = -hw;\r\n                        n.copy( this.dix );\r\n                    }else{\r\n                        cc.x = hw;\r\n                        n.subEqual( this.dix );\r\n                    }\r\n                }else{\r\n                    len = n.z - hd;\r\n                    if( cc.z < 0 ){\r\n                        cc.z = -hd;\r\n                        n.copy( this.diz );\r\n                    }else{\r\n                        cc.z = hd;\r\n                        n.subEqual( this.diz );\r\n                    }\r\n                }\r\n            }else{\r\n                if( n.y < n.z ){\r\n                    len = n.y - hh;\r\n                    if( cc.y < 0 ){\r\n                        cc.y = -hh;\r\n                        n.copy( this.diy );\r\n                    }else{\r\n                        cc.y = hh;\r\n                        n.subEqual( this.diy );\r\n                    }\r\n                }else{\r\n                    len = n.z - hd;\r\n                    if( cc.z < 0 ){\r\n                        cc.z = -hd;\r\n                        n.copy( this.diz );\r\n                    }else{\r\n                        cc.z = hd;\r\n                        n.subEqual( this.diz );\r\n                    }\r\n                }\r\n            }\r\n\r\n            p.copy( pn.position ).addScaledVector( n, 1 );\r\n            manifold.addPointVec( p, n, len, this.flip );\r\n\r\n        }\r\n\r\n    }\r\n\r\n});\n\n//import { TetraShape } from '../collision/shape/TetraShape';\r\n\r\n/**\r\n * The class of physical computing world.\r\n * You must be added to the world physical all computing objects\r\n *\r\n * @author saharan\r\n * @author lo-th\r\n */\r\n\r\n // timestep, broadphase, iterations, worldscale, random, stat\r\n\r\nfunction World ( o ) {\r\n\r\n    if( !(o instanceof Object) ) o = {};\r\n\r\n    // this world scale defaut is 0.1 to 10 meters max for dynamique body\r\n    this.scale = o.worldscale || 1;\r\n    this.invScale = 1/this.scale;\r\n\r\n    // The time between each step\r\n    this.timeStep = o.timestep || 0.01666; // 1/60;\r\n    this.timerate = this.timeStep * 1000;\r\n    this.timer = null;\r\n\r\n    this.preLoop = null;//function(){};\r\n    this.postLoop = null;//function(){};\r\n\r\n    // The number of iterations for constraint solvers.\r\n    this.numIterations = o.iterations || 8;\r\n\r\n     // It is a wide-area collision judgment that is used in order to reduce as much as possible a detailed collision judgment.\r\n    switch( o.broadphase || 2 ){\r\n        case 1: this.broadPhase = new BruteForceBroadPhase(); break;\r\n        case 2: default: this.broadPhase = new SAPBroadPhase(); break;\r\n        case 3: this.broadPhase = new DBVTBroadPhase(); break;\r\n    }\r\n\r\n    this.Btypes = ['None','BruteForce','Sweep & Prune', 'Bounding Volume Tree' ];\r\n    this.broadPhaseType = this.Btypes[ o.broadphase || 2 ];\r\n\r\n    // This is the detailed information of the performance.\r\n    this.performance = null;\r\n    this.isStat = o.info === undefined ? false : o.info;\r\n    if( this.isStat ) this.performance = new InfoDisplay( this );\r\n\r\n    /**\r\n     * Whether the constraints randomizer is enabled or not.\r\n     *\r\n     * @property enableRandomizer\r\n     * @type {Boolean}\r\n     */\r\n    this.enableRandomizer = o.random !== undefined ? o.random : true;\r\n\r\n    // The rigid body list\r\n    this.rigidBodies=null;\r\n    // number of rigid body\r\n    this.numRigidBodies=0;\r\n    // The contact list\r\n    this.contacts=null;\r\n    this.unusedContacts=null;\r\n    // The number of contact\r\n    this.numContacts=0;\r\n    // The number of contact points\r\n    this.numContactPoints=0;\r\n    //  The joint list\r\n    this.joints=null;\r\n    // The number of joints.\r\n    this.numJoints=0;\r\n    // The number of simulation islands.\r\n    this.numIslands=0;\r\n\r\n\r\n    // The gravity in the world.\r\n    this.gravity = new Vec3(0,-9.8,0);\r\n    if( o.gravity !== undefined ) this.gravity.fromArray( o.gravity );\r\n\r\n\r\n\r\n    var numShapeTypes = 5;//4;//3;\r\n    this.detectors=[];\r\n    this.detectors.length = numShapeTypes;\r\n    var i = numShapeTypes;\r\n    while(i--){\r\n        this.detectors[i]=[];\r\n        this.detectors[i].length = numShapeTypes;\r\n    }\r\n\r\n    this.detectors[SHAPE_SPHERE][SHAPE_SPHERE] = new SphereSphereCollisionDetector();\r\n    this.detectors[SHAPE_SPHERE][SHAPE_BOX] = new SphereBoxCollisionDetector(false);\r\n    this.detectors[SHAPE_BOX][SHAPE_SPHERE] = new SphereBoxCollisionDetector(true);\r\n    this.detectors[SHAPE_BOX][SHAPE_BOX] = new BoxBoxCollisionDetector();\r\n\r\n    // CYLINDER add\r\n    this.detectors[SHAPE_CYLINDER][SHAPE_CYLINDER] = new CylinderCylinderCollisionDetector();\r\n\r\n    this.detectors[SHAPE_CYLINDER][SHAPE_BOX] = new BoxCylinderCollisionDetector(true);\r\n    this.detectors[SHAPE_BOX][SHAPE_CYLINDER] = new BoxCylinderCollisionDetector(false);\r\n\r\n    this.detectors[SHAPE_CYLINDER][SHAPE_SPHERE] = new SphereCylinderCollisionDetector(true);\r\n    this.detectors[SHAPE_SPHERE][SHAPE_CYLINDER] = new SphereCylinderCollisionDetector(false);\r\n\r\n    // PLANE add\r\n\r\n    this.detectors[SHAPE_PLANE][SHAPE_SPHERE] = new SpherePlaneCollisionDetector(true);\r\n    this.detectors[SHAPE_SPHERE][SHAPE_PLANE] = new SpherePlaneCollisionDetector(false);\r\n\r\n    this.detectors[SHAPE_PLANE][SHAPE_BOX] = new BoxPlaneCollisionDetector(true);\r\n    this.detectors[SHAPE_BOX][SHAPE_PLANE] = new BoxPlaneCollisionDetector(false);\r\n\r\n    // TETRA add\r\n    //this.detectors[SHAPE_TETRA][SHAPE_TETRA] = new TetraTetraCollisionDetector();\r\n\r\n\r\n    this.randX = 65535;\r\n    this.randA = 98765;\r\n    this.randB = 123456789;\r\n\r\n    this.islandRigidBodies = [];\r\n    this.islandStack = [];\r\n    this.islandConstraints = [];\r\n\r\n}\r\n\r\nObject.assign( World.prototype, {\r\n\r\n    World: true,\r\n\r\n    play: function(){\r\n \r\n        if( this.timer !== null ) return;\r\n\r\n        var _this = this;\r\n        this.timer = setInterval( function(){ _this.step(); } , this.timerate );\r\n        //this.timer = setInterval( this.loop.bind(this) , this.timerate );\r\n\r\n    },\r\n\r\n    stop: function(){\r\n\r\n        if( this.timer === null ) return;\r\n\r\n        clearInterval( this.timer );\r\n        this.timer = null;\r\n\r\n    },\r\n\r\n    setGravity: function ( ar ) {\r\n\r\n        this.gravity.fromArray( ar );\r\n\r\n    },\r\n\r\n    getInfo: function () {\r\n\r\n        return this.isStat ? this.performance.show() : '';\r\n\r\n    },\r\n\r\n    // Reset the world and remove all rigid bodies, shapes, joints and any object from the world.\r\n    clear:function(){\r\n\r\n        this.stop();\r\n        this.preLoop = null;\r\n        this.postLoop = null;\r\n\r\n        this.randX = 65535;\r\n\r\n        while(this.joints!==null){\r\n            this.removeJoint( this.joints );\r\n        }\r\n        while(this.contacts!==null){\r\n            this.removeContact( this.contacts );\r\n        }\r\n        while(this.rigidBodies!==null){\r\n            this.removeRigidBody( this.rigidBodies );\r\n        }\r\n\r\n    },\r\n    /**\r\n    * I'll add a rigid body to the world.\r\n    * Rigid body that has been added will be the operands of each step.\r\n    * @param  rigidBody  Rigid body that you want to add\r\n    */\r\n    addRigidBody:function( rigidBody ){\r\n\r\n        if(rigidBody.parent){\r\n            printError(\"World\", \"It is not possible to be added to more than one world one of the rigid body\");\r\n        }\r\n\r\n        rigidBody.setParent( this );\r\n        //rigidBody.awake();\r\n\r\n        for(var shape = rigidBody.shapes; shape !== null; shape = shape.next){\r\n            this.addShape( shape );\r\n        }\r\n        if(this.rigidBodies!==null)(this.rigidBodies.prev=rigidBody).next=this.rigidBodies;\r\n        this.rigidBodies = rigidBody;\r\n        this.numRigidBodies++;\r\n\r\n    },\r\n    /**\r\n    * I will remove the rigid body from the world.\r\n    * Rigid body that has been deleted is excluded from the calculation on a step-by-step basis.\r\n    * @param  rigidBody  Rigid body to be removed\r\n    */\r\n    removeRigidBody:function( rigidBody ){\r\n\r\n        var remove=rigidBody;\r\n        if(remove.parent!==this)return;\r\n        remove.awake();\r\n        var js=remove.jointLink;\r\n        while(js!=null){\r\n\t        var joint=js.joint;\r\n\t        js=js.next;\r\n\t        this.removeJoint(joint);\r\n        }\r\n        for(var shape=rigidBody.shapes; shape!==null; shape=shape.next){\r\n            this.removeShape(shape);\r\n        }\r\n        var prev=remove.prev;\r\n        var next=remove.next;\r\n        if(prev!==null) prev.next=next;\r\n        if(next!==null) next.prev=prev;\r\n        if(this.rigidBodies==remove) this.rigidBodies=next;\r\n        remove.prev=null;\r\n        remove.next=null;\r\n        remove.parent=null;\r\n        this.numRigidBodies--;\r\n\r\n    },\r\n\r\n    getByName: function( name ){\r\n\r\n        var body = this.rigidBodies;\r\n        while( body !== null ){\r\n            if( body.name === name ) return body;\r\n            body=body.next;\r\n        }\r\n\r\n        var joint = this.joints;\r\n        while( joint !== null ){\r\n            if( joint.name === name ) return joint;\r\n            joint = joint.next;\r\n        }\r\n\r\n        return null;\r\n\r\n    },\r\n\r\n    /**\r\n    * I'll add a shape to the world..\r\n    * Add to the rigid world, and if you add a shape to a rigid body that has been added to the world,\r\n    * Shape will be added to the world automatically, please do not call from outside this method.\r\n    * @param  shape  Shape you want to add\r\n    */\r\n    addShape:function ( shape ){\r\n\r\n        if(!shape.parent || !shape.parent.parent){\r\n            printError(\"World\", \"It is not possible to be added alone to shape world\");\r\n        }\r\n\r\n        shape.proxy = this.broadPhase.createProxy(shape);\r\n        shape.updateProxy();\r\n        this.broadPhase.addProxy(shape.proxy);\r\n\r\n    },\r\n\r\n    /**\r\n    * I will remove the shape from the world.\r\n    * Add to the rigid world, and if you add a shape to a rigid body that has been added to the world,\r\n    * Shape will be added to the world automatically, please do not call from outside this method.\r\n    * @param  shape  Shape you want to delete\r\n    */\r\n    removeShape: function ( shape ){\r\n\r\n        this.broadPhase.removeProxy(shape.proxy);\r\n        shape.proxy = null;\r\n\r\n    },\r\n\r\n    /**\r\n    * I'll add a joint to the world.\r\n    * Joint that has been added will be the operands of each step.\r\n    * @param  shape Joint to be added\r\n    */\r\n    addJoint: function ( joint ) {\r\n\r\n        if(joint.parent){\r\n            printError(\"World\", \"It is not possible to be added to more than one world one of the joint\");\r\n        }\r\n        if(this.joints!=null)(this.joints.prev=joint).next=this.joints;\r\n        this.joints=joint;\r\n        joint.setParent( this );\r\n        this.numJoints++;\r\n        joint.awake();\r\n        joint.attach();\r\n\r\n    },\r\n\r\n    /**\r\n    * I will remove the joint from the world.\r\n    * Joint that has been added will be the operands of each step.\r\n    * @param  shape Joint to be deleted\r\n    */\r\n    removeJoint: function ( joint ) {\r\n\r\n        var remove=joint;\r\n        var prev=remove.prev;\r\n        var next=remove.next;\r\n        if(prev!==null)prev.next=next;\r\n        if(next!==null)next.prev=prev;\r\n        if(this.joints==remove)this.joints=next;\r\n        remove.prev=null;\r\n        remove.next=null;\r\n        this.numJoints--;\r\n        remove.awake();\r\n        remove.detach();\r\n        remove.parent=null;\r\n\r\n    },\r\n\r\n    addContact: function ( s1, s2 ) {\r\n\r\n        var newContact;\r\n        if(this.unusedContacts!==null){\r\n            newContact=this.unusedContacts;\r\n            this.unusedContacts=this.unusedContacts.next;\r\n        }else{\r\n            newContact = new Contact();\r\n        }\r\n        newContact.attach(s1,s2);\r\n        newContact.detector = this.detectors[s1.type][s2.type];\r\n        if(this.contacts)(this.contacts.prev = newContact).next = this.contacts;\r\n        this.contacts = newContact;\r\n        this.numContacts++;\r\n\r\n    },\r\n\r\n    removeContact: function ( contact ) {\r\n\r\n        var prev = contact.prev;\r\n        var next = contact.next;\r\n        if(next) next.prev = prev;\r\n        if(prev) prev.next = next;\r\n        if(this.contacts == contact) this.contacts = next;\r\n        contact.prev = null;\r\n        contact.next = null;\r\n        contact.detach();\r\n        contact.next = this.unusedContacts;\r\n        this.unusedContacts = contact;\r\n        this.numContacts--;\r\n\r\n    },\r\n\r\n    getContact: function ( b1, b2 ) {\r\n\r\n        b1 = b1.constructor === RigidBody ? b1.name : b1;\r\n        b2 = b2.constructor === RigidBody ? b2.name : b2;\r\n\r\n        var n1, n2;\r\n        var contact = this.contacts;\r\n        while(contact!==null){\r\n            n1 = contact.body1.name;\r\n            n2 = contact.body2.name;\r\n            if((n1===b1 && n2===b2) || (n2===b1 && n1===b2)){ if(contact.touching) return contact; else return null;}\r\n            else contact = contact.next;\r\n        }\r\n        return null;\r\n\r\n    },\r\n\r\n    checkContact: function ( name1, name2 ) {\r\n\r\n        var n1, n2;\r\n        var contact = this.contacts;\r\n        while(contact!==null){\r\n            n1 = contact.body1.name || ' ';\r\n            n2 = contact.body2.name || ' ';\r\n            if((n1==name1 && n2==name2) || (n2==name1 && n1==name2)){ if(contact.touching) return true; else return false;}\r\n            else contact = contact.next;\r\n        }\r\n        //return false;\r\n\r\n    },\r\n\r\n    callSleep: function( body ) {\r\n\r\n        if( !body.allowSleep ) return false;\r\n        if( body.linearVelocity.lengthSq() > 0.04 ) return false;\r\n        if( body.angularVelocity.lengthSq() > 0.25 ) return false;\r\n        return true;\r\n\r\n    },\r\n\r\n    /**\r\n    * I will proceed only time step seconds time of World.\r\n    */\r\n    step: function () {\r\n\r\n        var stat = this.isStat;\r\n\r\n        if( stat ) this.performance.setTime( 0 );\r\n\r\n        var body = this.rigidBodies;\r\n\r\n        while( body !== null ){\r\n\r\n            body.addedToIsland = false;\r\n\r\n            if( body.sleeping ) body.testWakeUp();\r\n\r\n            body = body.next;\r\n\r\n        }\r\n\r\n\r\n\r\n        //------------------------------------------------------\r\n        //   UPDATE BROADPHASE CONTACT\r\n        //------------------------------------------------------\r\n\r\n        if( stat ) this.performance.setTime( 1 );\r\n\r\n        this.broadPhase.detectPairs();\r\n\r\n        var pairs = this.broadPhase.pairs;\r\n\r\n        var i = this.broadPhase.numPairs;\r\n        //do{\r\n        while(i--){\r\n        //for(var i=0, l=numPairs; i<l; i++){\r\n            var pair = pairs[i];\r\n            var s1;\r\n            var s2;\r\n            if(pair.shape1.id<pair.shape2.id){\r\n                s1 = pair.shape1;\r\n                s2 = pair.shape2;\r\n            }else{\r\n                s1 = pair.shape2;\r\n                s2 = pair.shape1;\r\n            }\r\n\r\n            var link;\r\n            if( s1.numContacts < s2.numContacts ) link = s1.contactLink;\r\n            else link = s2.contactLink;\r\n\r\n            var exists = false;\r\n            while(link){\r\n                var contact = link.contact;\r\n                if( contact.shape1 == s1 && contact.shape2 == s2 ){\r\n                    contact.persisting = true;\r\n                    exists = true;// contact already exists\r\n                    break;\r\n                }\r\n                link = link.next;\r\n            }\r\n            if(!exists){\r\n                this.addContact( s1, s2 );\r\n            }\r\n        }// while(i-- >0);\r\n\r\n        if( stat ) this.performance.calcBroadPhase();\r\n\r\n        //------------------------------------------------------\r\n        //   UPDATE NARROWPHASE CONTACT\r\n        //------------------------------------------------------\r\n\r\n        // update & narrow phase\r\n        this.numContactPoints = 0;\r\n        contact = this.contacts;\r\n        while( contact!==null ){\r\n            if(!contact.persisting){\r\n                if ( contact.shape1.aabb.intersectTest( contact.shape2.aabb ) ) {\r\n                /*var aabb1=contact.shape1.aabb;\r\n                var aabb2=contact.shape2.aabb;\r\n                if(\r\n\t                aabb1.minX>aabb2.maxX || aabb1.maxX<aabb2.minX ||\r\n\t                aabb1.minY>aabb2.maxY || aabb1.maxY<aabb2.minY ||\r\n\t                aabb1.minZ>aabb2.maxZ || aabb1.maxZ<aabb2.minZ\r\n                ){*/\r\n                    var next = contact.next;\r\n                    this.removeContact(contact);\r\n                    contact = next;\r\n                    continue;\r\n                }\r\n            }\r\n            var b1 = contact.body1;\r\n            var b2 = contact.body2;\r\n\r\n            if( b1.isDynamic && !b1.sleeping || b2.isDynamic && !b2.sleeping ) contact.updateManifold();\r\n\r\n            this.numContactPoints += contact.manifold.numPoints;\r\n            contact.persisting = false;\r\n            contact.constraint.addedToIsland = false;\r\n            contact = contact.next;\r\n\r\n        }\r\n\r\n        if( stat ) this.performance.calcNarrowPhase();\r\n\r\n        //------------------------------------------------------\r\n        //   SOLVE ISLANDS\r\n        //------------------------------------------------------\r\n\r\n        var invTimeStep = 1 / this.timeStep;\r\n        var joint;\r\n        var constraint;\r\n\r\n        for( joint = this.joints; joint !== null; joint = joint.next ){\r\n            joint.addedToIsland = false;\r\n        }\r\n\r\n\r\n        // clear old island array\r\n        this.islandRigidBodies = [];\r\n        this.islandConstraints = [];\r\n        this.islandStack = [];\r\n\r\n        if( stat ) this.performance.setTime( 1 );\r\n\r\n        this.numIslands = 0;\r\n\r\n        // build and solve simulation islands\r\n\r\n        for( var base = this.rigidBodies; base !== null; base = base.next ){\r\n\r\n            if( base.addedToIsland || base.isStatic || base.sleeping ) continue;// ignore\r\n\r\n            if( base.isLonely() ){// update single body\r\n                if( base.isDynamic ){\r\n                    base.linearVelocity.addScaledVector( this.gravity, this.timeStep );\r\n                    /*base.linearVelocity.x+=this.gravity.x*this.timeStep;\r\n                    base.linearVelocity.y+=this.gravity.y*this.timeStep;\r\n                    base.linearVelocity.z+=this.gravity.z*this.timeStep;*/\r\n                }\r\n                if( this.callSleep( base ) ) {\r\n                    base.sleepTime += this.timeStep;\r\n                    if( base.sleepTime > 0.5 ) base.sleep();\r\n                    else base.updatePosition( this.timeStep );\r\n                }else{\r\n                    base.sleepTime = 0;\r\n                    base.updatePosition( this.timeStep );\r\n                }\r\n                this.numIslands++;\r\n                continue;\r\n            }\r\n\r\n            var islandNumRigidBodies = 0;\r\n            var islandNumConstraints = 0;\r\n            var stackCount = 1;\r\n            // add rigid body to stack\r\n            this.islandStack[0] = base;\r\n            base.addedToIsland = true;\r\n\r\n            // build an island\r\n            do{\r\n                // get rigid body from stack\r\n                body = this.islandStack[--stackCount];\r\n                this.islandStack[stackCount] = null;\r\n                body.sleeping = false;\r\n                // add rigid body to the island\r\n                this.islandRigidBodies[islandNumRigidBodies++] = body;\r\n                if(body.isStatic) continue;\r\n\r\n                // search connections\r\n                for( var cs = body.contactLink; cs !== null; cs = cs.next ) {\r\n                    var contact = cs.contact;\r\n                    constraint = contact.constraint;\r\n                    if( constraint.addedToIsland || !contact.touching ) continue;// ignore\r\n\r\n                    // add constraint to the island\r\n                    this.islandConstraints[islandNumConstraints++] = constraint;\r\n                    constraint.addedToIsland = true;\r\n                    var next = cs.body;\r\n\r\n                    if(next.addedToIsland) continue;\r\n\r\n                    // add rigid body to stack\r\n                    this.islandStack[stackCount++] = next;\r\n                    next.addedToIsland = true;\r\n                }\r\n                for( var js = body.jointLink; js !== null; js = js.next ) {\r\n                    constraint = js.joint;\r\n\r\n                    if(constraint.addedToIsland) continue;// ignore\r\n\r\n                    // add constraint to the island\r\n                    this.islandConstraints[islandNumConstraints++] = constraint;\r\n                    constraint.addedToIsland = true;\r\n                    next = js.body;\r\n                    if( next.addedToIsland || !next.isDynamic ) continue;\r\n\r\n                    // add rigid body to stack\r\n                    this.islandStack[stackCount++] = next;\r\n                    next.addedToIsland = true;\r\n                }\r\n            } while( stackCount != 0 );\r\n\r\n            // update velocities\r\n            var gVel = new Vec3().addScaledVector( this.gravity, this.timeStep );\r\n            /*var gx=this.gravity.x*this.timeStep;\r\n            var gy=this.gravity.y*this.timeStep;\r\n            var gz=this.gravity.z*this.timeStep;*/\r\n            var j = islandNumRigidBodies;\r\n            while (j--){\r\n            //or(var j=0, l=islandNumRigidBodies; j<l; j++){\r\n                body = this.islandRigidBodies[j];\r\n                if(body.isDynamic){\r\n                    body.linearVelocity.addEqual(gVel);\r\n                    /*body.linearVelocity.x+=gx;\r\n                    body.linearVelocity.y+=gy;\r\n                    body.linearVelocity.z+=gz;*/\r\n                }\r\n            }\r\n\r\n            // randomizing order\r\n            if(this.enableRandomizer){\r\n                //for(var j=1, l=islandNumConstraints; j<l; j++){\r\n                j = islandNumConstraints;\r\n                while(j--){ if(j!==0){\r\n                        var swap = (this.randX=(this.randX*this.randA+this.randB&0x7fffffff))/2147483648.0*j|0;\r\n                        constraint = this.islandConstraints[j];\r\n                        this.islandConstraints[j] = this.islandConstraints[swap];\r\n                        this.islandConstraints[swap] = constraint;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // solve contraints\r\n\r\n            j = islandNumConstraints;\r\n            while(j--){\r\n            //for(j=0, l=islandNumConstraints; j<l; j++){\r\n                this.islandConstraints[j].preSolve( this.timeStep, invTimeStep );// pre-solve\r\n            }\r\n            var k = this.numIterations;\r\n            while(k--){\r\n            //for(var k=0, l=this.numIterations; k<l; k++){\r\n                j = islandNumConstraints;\r\n                while(j--){\r\n                //for(j=0, m=islandNumConstraints; j<m; j++){\r\n                    this.islandConstraints[j].solve();// main-solve\r\n                }\r\n            }\r\n            j = islandNumConstraints;\r\n            while(j--){\r\n            //for(j=0, l=islandNumConstraints; j<l; j++){\r\n                this.islandConstraints[j].postSolve();// post-solve\r\n                this.islandConstraints[j] = null;// gc\r\n            }\r\n\r\n            // sleeping check\r\n\r\n            var sleepTime = 10;\r\n            j = islandNumRigidBodies;\r\n            while(j--){\r\n            //for(j=0, l=islandNumRigidBodies;j<l;j++){\r\n                body = this.islandRigidBodies[j];\r\n                if( this.callSleep( body ) ){\r\n                    body.sleepTime += this.timeStep;\r\n                    if( body.sleepTime < sleepTime ) sleepTime = body.sleepTime;\r\n                }else{\r\n                    body.sleepTime = 0;\r\n                    sleepTime = 0;\r\n                    continue;\r\n                }\r\n            }\r\n            if(sleepTime > 0.5){\r\n                // sleep the island\r\n                j = islandNumRigidBodies;\r\n                while(j--){\r\n                //for(j=0, l=islandNumRigidBodies;j<l;j++){\r\n                    this.islandRigidBodies[j].sleep();\r\n                    this.islandRigidBodies[j] = null;// gc\r\n                }\r\n            }else{\r\n                // update positions\r\n                j = islandNumRigidBodies;\r\n                while(j--){\r\n                //for(j=0, l=islandNumRigidBodies;j<l;j++){\r\n                    this.islandRigidBodies[j].updatePosition( this.timeStep );\r\n                    this.islandRigidBodies[j] = null;// gc\r\n                }\r\n            }\r\n            this.numIslands++;\r\n        }\r\n\r\n        //------------------------------------------------------\r\n        //   END SIMULATION\r\n        //------------------------------------------------------\r\n\r\n        if( stat ) this.performance.calcEnd();\r\n\r\n        if( this.postLoop !== null ) this.postLoop();\r\n\r\n    },\r\n\r\n    // remove someting to world\r\n\r\n    remove: function( obj ){\r\n\r\n    },\r\n\r\n    // add someting to world\r\n    \r\n    add: function( o ){\r\n\r\n        o = o || {};\r\n\r\n        var type = o.type || \"box\";\r\n        if( type.constructor === String ) type = [ type ];\r\n        var isJoint = type[0].substring( 0, 5 ) === 'joint' ? true : false;\r\n\r\n        if( isJoint ) return this.initJoint( type[0], o );\r\n        else return this.initBody( type, o );\r\n\r\n    },\r\n\r\n    initBody: function( type, o ){\r\n\r\n        var invScale = this.invScale;\r\n\r\n        // body dynamic or static\r\n        var move = o.move || false;\r\n        var kinematic = o.kinematic || false;\r\n\r\n        // POSITION\r\n\r\n        // body position\r\n        var p = o.pos || [0,0,0];\r\n        p = p.map( function(x) { return x * invScale; } );\r\n\r\n        // shape position\r\n        var p2 = o.posShape || [0,0,0];\r\n        p2 = p2.map( function(x) { return x * invScale; } );\r\n\r\n        // ROTATION\r\n\r\n        // body rotation in degree\r\n        var r = o.rot || [0,0,0];\r\n        r = r.map( function(x) { return x * _Math.degtorad; } );\r\n\r\n        // shape rotation in degree\r\n        var r2 = o.rotShape || [0,0,0];\r\n        r2 = r.map( function(x) { return x * _Math.degtorad; } );\r\n\r\n        // SIZE\r\n\r\n        // shape size\r\n        var s = o.size === undefined ? [1,1,1] : o.size;\r\n        if( s.length === 1 ){ s[1] = s[0]; }\r\n        if( s.length === 2 ){ s[2] = s[0]; }\r\n        s = s.map( function(x) { return x * invScale; } );\r\n\r\n        \r\n\r\n        // body physics settings\r\n        var sc = new ShapeConfig();\r\n        // The density of the shape.\r\n        if( o.density !== undefined ) sc.density = o.density;\r\n        // The coefficient of friction of the shape.\r\n        if( o.friction !== undefined ) sc.friction = o.friction;\r\n        // The coefficient of restitution of the shape.\r\n        if( o.restitution !== undefined ) sc.restitution = o.restitution;\r\n        // The bits of the collision groups to which the shape belongs.\r\n        if( o.belongsTo !== undefined ) sc.belongsTo = o.belongsTo;\r\n        // The bits of the collision groups with which the shape collides.\r\n        if( o.collidesWith !== undefined ) sc.collidesWith = o.collidesWith;\r\n\r\n        if(o.config !== undefined ){\r\n            if( o.config[0] !== undefined ) sc.density = o.config[0];\r\n            if( o.config[1] !== undefined ) sc.friction = o.config[1];\r\n            if( o.config[2] !== undefined ) sc.restitution = o.config[2];\r\n            if( o.config[3] !== undefined ) sc.belongsTo = o.config[3];\r\n            if( o.config[4] !== undefined ) sc.collidesWith = o.config[4];\r\n        }\r\n\r\n\r\n       /* if(o.massPos){\r\n            o.massPos = o.massPos.map(function(x) { return x * invScale; });\r\n            sc.relativePosition.set( o.massPos[0], o.massPos[1], o.massPos[2] );\r\n        }\r\n        if(o.massRot){\r\n            o.massRot = o.massRot.map(function(x) { return x * _Math.degtorad; });\r\n            var q = new Quat().setFromEuler( o.massRot[0], o.massRot[1], o.massRot[2] );\r\n            sc.relativeRotation = new Mat33().setQuat( q );//_Math.EulerToMatrix( o.massRot[0], o.massRot[1], o.massRot[2] );\r\n        }*/\r\n\r\n        var position = new Vec3( p[0], p[1], p[2] );\r\n        var rotation = new Quat().setFromEuler( r[0], r[1], r[2] );\r\n\r\n        // rigidbody\r\n        var body = new RigidBody( position, rotation );\r\n        //var body = new RigidBody( p[0], p[1], p[2], r[0], r[1], r[2], r[3], this.scale, this.invScale );\r\n\r\n        // SHAPES\r\n\r\n        var shape, n;\r\n\r\n        for( var i = 0; i < type.length; i++ ){\r\n\r\n            n = i * 3;\r\n\r\n            if( p2[n] !== undefined ) sc.relativePosition.set( p2[n], p2[n+1], p2[n+2] );\r\n            if( r2[n] !== undefined ) sc.relativeRotation.setQuat( new Quat().setFromEuler( r2[n], r2[n+1], r2[n+2] ) );\r\n            \r\n            switch( type[i] ){\r\n                case \"sphere\": shape = new Sphere( sc, s[n] ); break;\r\n                case \"cylinder\": shape = new Cylinder( sc, s[n], s[n+1] ); break;\r\n                case \"box\": shape = new Box( sc, s[n], s[n+1], s[n+2] ); break;\r\n                case \"plane\": shape = new Plane( sc ); break\r\n            }\r\n\r\n            body.addShape( shape );\r\n            \r\n        }\r\n\r\n        // body can sleep or not\r\n        if( o.neverSleep || kinematic) body.allowSleep = false;\r\n        else body.allowSleep = true;\r\n\r\n        body.isKinematic = kinematic;\r\n\r\n        // body static or dynamic\r\n        if( move ){\r\n\r\n            if(o.massPos || o.massRot) body.setupMass( BODY_DYNAMIC, false );\r\n            else body.setupMass( BODY_DYNAMIC, true );\r\n\r\n            // body can sleep or not\r\n            //if( o.neverSleep ) body.allowSleep = false;\r\n            //else body.allowSleep = true;\r\n\r\n        } else {\r\n\r\n            body.setupMass( BODY_STATIC );\r\n\r\n        }\r\n\r\n        if( o.name !== undefined ) body.name = o.name;\r\n        //else if( move ) body.name = this.numRigidBodies;\r\n\r\n        // finaly add to physics world\r\n        this.addRigidBody( body );\r\n\r\n        // force sleep on not\r\n        if( move ){\r\n            if( o.sleep ) body.sleep();\r\n            else body.awake();\r\n        }\r\n\r\n        return body;\r\n\r\n\r\n    },\r\n\r\n    initJoint: function( type, o ){\r\n\r\n        //var type = type;\r\n        var invScale = this.invScale;\r\n\r\n        var axe1 = o.axe1 || [1,0,0];\r\n        var axe2 = o.axe2 || [1,0,0];\r\n        var pos1 = o.pos1 || [0,0,0];\r\n        var pos2 = o.pos2 || [0,0,0];\r\n\r\n        pos1 = pos1.map(function(x){ return x * invScale; });\r\n        pos2 = pos2.map(function(x){ return x * invScale; });\r\n\r\n        var min, max;\r\n        if( type === \"jointDistance\" ){\r\n            min = o.min || 0;\r\n            max = o.max || 10;\r\n            min = min * invScale;\r\n            max = max * invScale;\r\n        }else{\r\n            min = o.min || 57.29578;\r\n            max = o.max || 0;\r\n            min = min * _Math.degtorad;\r\n            max = max * _Math.degtorad;\r\n        }\r\n\r\n        var limit = o.limit || null;\r\n        var spring = o.spring || null;\r\n        var motor = o.motor || null;\r\n\r\n        // joint setting\r\n        var jc = new JointConfig();\r\n        jc.scale = this.scale;\r\n        jc.invScale = this.invScale;\r\n        jc.allowCollision = o.collision || false;\r\n        jc.localAxis1.set( axe1[0], axe1[1], axe1[2] );\r\n        jc.localAxis2.set( axe2[0], axe2[1], axe2[2] );\r\n        jc.localAnchorPoint1.set( pos1[0], pos1[1], pos1[2] );\r\n        jc.localAnchorPoint2.set( pos2[0], pos2[1], pos2[2] );\r\n\r\n        var b1 = null;\r\n        var b2 = null;\r\n\r\n        if( o.body1 === undefined || o.body2 === undefined ) return printError('World', \"Can't add joint if attach rigidbodys not define !\" );\r\n\r\n        if ( o.body1.constructor === String ) { b1 = this.getByName( o.body1 ); }\r\n        else if ( o.body1.constructor === Number ) { b1 = this.getByName( o.body1 ); }\r\n        else if ( o.body1.constructor === RigidBody ) { b1 = o.body1; }\r\n\r\n        if ( o.body2.constructor === String ) { b2 = this.getByName( o.body2 ); }\r\n        else if ( o.body2.constructor === Number ) { b2 = this.getByName( o.body2 ); }\r\n        else if ( o.body2.constructor === RigidBody ) { b2 = o.body2; }\r\n\r\n        if( b1 === null || b2 === null ) return printError('World', \"Can't add joint attach rigidbodys not find !\" );\r\n\r\n        jc.body1 = b1;\r\n        jc.body2 = b2;\r\n\r\n        var joint;\r\n        switch( type ){\r\n            case \"jointDistance\": joint = new DistanceJoint(jc, min, max);\r\n                if(spring !== null) joint.limitMotor.setSpring( spring[0], spring[1] );\r\n                if(motor !== null) joint.limitMotor.setMotor( motor[0], motor[1] );\r\n            break;\r\n            case \"jointHinge\": case \"joint\": joint = new HingeJoint(jc, min, max);\r\n                if(spring !== null) joint.limitMotor.setSpring( spring[0], spring[1] );// soften the joint ex: 100, 0.2\r\n                if(motor !== null) joint.limitMotor.setMotor( motor[0], motor[1] );\r\n            break;\r\n            case \"jointPrisme\": joint = new PrismaticJoint(jc, min, max); break;\r\n            case \"jointSlide\": joint = new SliderJoint(jc, min, max); break;\r\n            case \"jointBall\": joint = new BallAndSocketJoint(jc); break;\r\n            case \"jointWheel\": joint = new WheelJoint(jc);\r\n                if(limit !== null) joint.rotationalLimitMotor1.setLimit( limit[0], limit[1] );\r\n                if(spring !== null) joint.rotationalLimitMotor1.setSpring( spring[0], spring[1] );\r\n                if(motor !== null) joint.rotationalLimitMotor1.setMotor( motor[0], motor[1] );\r\n            break;\r\n        }\r\n\r\n        joint.name = o.name || '';\r\n        // finaly add to physics world\r\n        this.addJoint( joint );\r\n\r\n        return joint;\r\n\r\n    },\r\n\r\n\r\n} );\n\n// test version\r\n\r\n//export { RigidBody } from './core/RigidBody_X.js';\r\n//export { World } from './core/World_X.js';\n\nexport { _Math as Math, Vec3, Quat, Mat33, Shape, Box, Sphere, Cylinder, Plane, Particle, ShapeConfig, LimitMotor, HingeJoint, BallAndSocketJoint, DistanceJoint, PrismaticJoint, SliderJoint, WheelJoint, JointConfig, RigidBody, World, REVISION, BR_NULL, BR_BRUTE_FORCE, BR_SWEEP_AND_PRUNE, BR_BOUNDING_VOLUME_TREE, BODY_NULL, BODY_DYNAMIC, BODY_STATIC, BODY_KINEMATIC, BODY_GHOST, SHAPE_NULL, SHAPE_SPHERE, SHAPE_BOX, SHAPE_CYLINDER, SHAPE_PLANE, SHAPE_PARTICLE, SHAPE_TETRA, JOINT_NULL, JOINT_DISTANCE, JOINT_BALL_AND_SOCKET, JOINT_HINGE, JOINT_WHEEL, JOINT_SLIDER, JOINT_PRISMATIC, AABB_PROX, printError, InfoDisplay };\n","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _config=require('../../../config');var _config2=_interopRequireDefault(_config);var _log=require('../../Utilities/log');var _log2=_interopRequireDefault(_log);var _three=require('three');var _Space=require('../Space');var _Space2=_interopRequireDefault(_Space);var _Graphics=require('./Graphics/Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Existence=require('./Existence/Existence');var _Existence2=_interopRequireDefault(_Existence);var _oimo=require('oimo');var OIMO=_interopRequireWildcard(_oimo);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var name='Meta';var scope=void 0;var world=new OIMO.World;var bodies=[];var Meta=function(){function Meta(props){_classCallCheck(this,Meta);scope=this;this.name='Meta';this.lifes=[];this.events=[];this._entered=null;this._touched=false;this.rotation={x:0,y:0,z:0};this.position={x:0,y:0,z:0};this.existence=props!==undefined&&props.existence!==undefined?props.existence:new _Existence2.default;this.graphics=props!==undefined&&props.graphics!==undefined?props.graphics:new _Graphics2.default;this.physics=props!==undefined&&props.physics!==undefined?props.physics:true;this.setExistence();this.setPresence();return this}_createClass(Meta,[{key:'setExistence',value:function setExistence(){if(this.existence.start===null&&this.existence.end===null)_Space2.default.get().start(scope)}},{key:'setPresence',value:function setPresence(){_Space2.default.get().add(this)}},{key:'o',value:function o(eventName,callback){return this.on(eventName,callback)}},{key:'on',value:function on(eventName,callback){if(typeof eventName=='function'){callback=eventName;eventName='p'}if(eventName=='t')eventName='touch';if(eventName=='r')eventName='release';if(eventName=='p')eventName='point';if(this.events[eventName]){this.events[eventName].push(callback)}else{this.events[eventName]=[callback]}return this}},{key:'go',value:function go(eventName){var _this=this;for(var _len=arguments.length,rest=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){rest[_key-1]=arguments[_key]}if(this.events[eventName]){this.events[eventName].forEach(function(cb){cb.apply(undefined,rest.concat([_this]))})}return this}},{key:'m',value:function m(direction,amount){return this.move(direction,amount)}},{key:'move',value:function move(direction,amount){switch(direction){default:case 0:case'f':case'forward':case'forwards':this.setPosition({x:this.position.x,y:this.position.y,z:this.position.z+amount});break;case 1:case'b':case'backward':case'backwards':this.setPosition({x:this.position.x,y:this.position.y,z:this.position.z-amount});break;case 2:case'l':case'left':this.setPosition({x:this.position.x-amount,y:this.position.y,z:this.position.z});break;case 3:case'r':case'right':this.setPosition({x:this.position.x+amount,y:this.position.y,z:this.position.z});break;case 4:case'd':case'down':this.setPosition({x:this.position.x,y:this.position.y-amount,z:this.position.z});break;case 5:case'u':case'up':this.setPosition({x:this.position.x,y:this.position.y+amount,z:this.position.z});break;}return this}},{key:'s',value:function s(props){return this.set(props)}},{key:'set',value:function set(position){this.setPosition(position);return this}},{key:'setPosition',value:function setPosition(position){this.graphics.setPosition(position);this.position={x:this.graphics.mesh.position.x,y:this.graphics.mesh.position.y,z:this.graphics.mesh.position.z};(0,_log2.default)('[this.position]'+this.position);return this}},{key:'r',value:function r(direction,amount){return this.rotate(direction,amount)}},{key:'rotate',value:function rotate(direction,amount){switch(direction){default:case 0:case'f':case'forward':case'forwards':this.setRotation({x:this.rotation.x+amount,y:0,z:0});break;case 1:case'b':case'backward':case'backwards':this.setRotation({x:this.rotation.x-amount,y:0,z:0});break;case 2:case'l':case'left':this.setRotation({x:0,y:this.rotation.y-amount,z:0});break;case 3:case'r':case'right':this.setRotation({x:0,y:this.rotation.y+amount,z:0});break;case 4:case'd':case'down':this.setRotation({x:0,y:0,z:this.rotation.z+amount});break;case 5:case'u':case'up':this.setRotation({x:0,y:0,z:this.rotation.z-amount});break;}return this}},{key:'setRotation',value:function setRotation(rotation){this.graphics.setRotation(rotation);this.rotation={x:this.graphics.mesh.rotation.x,y:this.graphics.mesh.rotation.y,z:this.graphics.mesh.rotation.z};(0,_log2.default)(JSON.stringify(this.rotation),name);return this}},{key:'setSize',value:function setSize(){var box3=new _three.Box3().setFromObject(this.graphics.mesh);var x=box3.max.x-box3.min.x;var y=box3.max.y-box3.min.y;var z=box3.max.z-box3.min.z;switch(this.graphics.type){case'box':this.size=[x,y,z];break;case'sphere':this.size=[x/2];break;case'cylinder':this.size=[x/2,y,z/2];break;}}},{key:'p',value:function p(m){return this.setPhysics(m)}},{key:'setPhysics',value:function setPhysics(physics){this.setSize();if(this.body!==undefined&&physics===this.physics)return;physics=physics!==undefined?physics:this.physics;if(physics===null){this.physics=null;return this}var mode=physics;if(this.body!==undefined){this.body.remove()}var body={type:this.graphics.type,size:this.size,pos:[this.position.x,this.position.y,this.position.z],rot:[this.rotation.x,this.rotation.y,this.rotation.z],move:mode,density:mode!==undefined&&mode.density!==undefined?mode.density:1,friction:mode!==undefined&&mode.friction!==undefined?mode.friction:.5,restitution:mode!==undefined&&mode.restitution!==undefined?mode.restitution:.5,belongsTo:mode!==undefined&&mode.belongsTo!==undefined?mode.belongsTo:1,collidesWith:mode!==undefined&&mode.collidesWith!==undefined?mode.collidesWith:4294967295};this.body=world.add(body);this.physics=physics;return this}},{key:'l',value:function l(){var mode=arguments.length>0&&arguments[0]!==undefined?arguments[0]:'on';var life=arguments[1];return this.live(mode='on',life)}},{key:'live',value:function live(){var mode=arguments.length>0&&arguments[0]!==undefined?arguments[0]:'on';var life=arguments[1];switch(mode){case'on':case'o':case 1:this.lifes.push(life);break;case'again':case'a':case 0:this.lifes=[];this.lifes.push(life);break;}return this}},{key:'appear',value:function appear(){return this.end()}},{key:'start',value:function start(){_Space2.default.get().start(this);this.existence.started=true}},{key:'die',value:function die(){return this.end()}},{key:'disappear',value:function disappear(){return this.end()}},{key:'end',value:function end(){_Space2.default.get().end(this);this.existence.ended=true}},{key:'life',value:function life(){if(this.existence.start!==null)if(new Date(this.existence.start)<new Date){if(!this.existence.started)this.start()}if(this.existence.end!==null)if(new Date>new Date(this.existence.start)){if(new Date>new Date(this.existence.end)){if(!this.existence.ended)this.end()}}}},{key:'c',value:function c(color){return this.color(color)}},{key:'color',value:function color(){var _color=arguments.length>0&&arguments[0]!==undefined?arguments[0]:Math.random()*16777215;switch(_color){case 0:case'g':case'gold':_color=16766720;break;case 1:case'r':case'red':_color=16711680;break;case 2:case'g':case'green':_color=65280;break;case 3:case'b':case'blue':_color=255;break;case 4:case'y':case'yellow':_color=16776960;break;case 5:case'w':case'white':_color=16777215;break;}this.graphics.color(_color);this._color=_color;return this}},{key:'add',value:function add(instance){this.graphics=instance}},{key:'i',value:function i(ms,f){return this.in(ms,f)}},{key:'in',value:function _in(ms,f){setTimeout(function(){f()},ms)}},{key:'e',value:function e(ms,f){return this.every(ms,f)}},{key:'ev',value:function ev(ms,f){return this.every(ms,f)}},{key:'every',value:function every(ms,f){f();setInterval(function(){f()},ms)}}],[{key:'getWorld',value:function getWorld(){return world}},{key:'getBodies',value:function getBodies(){return bodies}},{key:'clear',value:function clear(){bodies=[];world=new OIMO.World}}]);return Meta}();exports.default=Meta;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _three=require('three');var THREE=_interopRequireWildcard(_three);require('./three/examples/js/loaders/GLTFLoader');var _Meta=require('../Meta');var _Meta2=_interopRequireDefault(_Meta);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={TYPE:'box'};var scope=void 0;var Graphics=function(){function Graphics(props){var _this=this;var stop=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;_classCallCheck(this,Graphics);scope=this;this.geometry=props!==undefined&&props.geometry!==undefined&&props.geometry!==true?props.geometry:new _three.CubeGeometry;this.material=props!==undefined&&props.material!==undefined&&props.material!==true?props.material:new _three.MeshPhongMaterial({color:Math.random()*16777215,side:_three.DoubleSide});this.type=props!==undefined&&props.type!==undefined&&props.type!==true?props.type:_DEFAULT.TYPE;this.mesh=props!==undefined&&props.mesh!==undefined&&props.mesh!==true?props.mesh:new _three.Mesh(this.geometry,this.material);this.model=props.model!==undefined?props.model:undefined;this.loader=undefined;if(this.model!==undefined){var _loadModel=function _loadModel(loader){loader.load(scope.model,function(gltf){scope.mesh.add(gltf.scene)})};this.model='models/'+this.model;this.mesh=new THREE.Object3D;var extentions=['gltf'];var loaders=['new THREE.GLTFLoader()'];if(this.model.includes('.')){var fileExtention=void 0;var pattern=/\\.([0-9a-z]+)(?:[\\?#]|$)/i;var result=this.model.match(pattern);fileExtention=result[1];scope.loader=eval(loaders[extentions.indexOf(fileExtention)]);_loadModel(scope.loader);return}extentions.forEach(function(extention){if(scope.loader!==undefined)return;fetch(_this.model+extention).then(function(response){if(response.status===200){scope.loader=eval(loaders[extentions.indexOf(extention)]);scope.model=scope.model+'.'+extention;_loadModel(scope.loader)}}).catch(function(error){return console.error(error)})})}this.physics=true;if(props.p!==undefined)this.physics=props.p;if(props.physics!==undefined)this.physics=props.physics;if(stop)return this;return new _Meta2.default({graphics:this,physics:this.physics})}_createClass(Graphics,[{key:'setPosition',value:function setPosition(position){this.mesh.position.copy(position);return this}},{key:'setRotation',value:function setRotation(rotation){this.mesh.rotation.x=rotation.x;this.mesh.rotation.y=rotation.y;this.mesh.rotation.z=rotation.z;return this}},{key:'color',value:function color(_color){return this}},{key:'add',value:function add(instance){this.geometry=instance}}]);return Graphics}();exports.default=Graphics;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _three=require('three');var _Graphics=require('../Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Space=require('../../../Space');var _Space2=_interopRequireDefault(_Space);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={WIDTH:1,HEIGHT:1,LENGTH:1,SCALE:.5};var Cube=function Cube(){var props=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var stop=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;_classCallCheck(this,Cube);var scale=_DEFAULT.SCALE;if(typeof props==='boolean')stop=props;var _width=props.w||props.width||_DEFAULT.WIDTH;var _height=props.h||props.height||_DEFAULT.HEIGHT;var _length=props.l||props.length||_DEFAULT.LENGTH;if(typeof props==='number')_width=_height=_length=props;_width=_width*scale;_height=_height*scale;_length=_length*scale;this.geometry=new _three.CubeGeometry(_width,_height,_length);this.type='box';return stop?this.geometry:new _Graphics2.default(this)};exports.default=Cube;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _config=require('../../../../config');var _config2=_interopRequireDefault(_config);var _log=require('../../../Utilities/log');var _log2=_interopRequireDefault(_log);var _three=require('three');var _ViveController=require('./Controls/ViveController');var _OBJLoader=require('./Loaders/OBJLoader');var _OBJLoader2=_interopRequireDefault(_OBJLoader);var _Cube=require('../../Meta/Graphics/Geometries/Cube');var _Cube2=_interopRequireDefault(_Cube);var _Space=require('../../../Space/Space');var _Space2=_interopRequireDefault(_Space);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var hints=void 0;var scope=void 0;var touch1=false;var touch2=false;var _touch0=false;var _touch1=false;var _release0=false;var _touch={0:false,1:false};var keys={esc:false,enter:false,space:false};var _DEFAULT={FOG:{FAR:6.25},LOG:false};var touchedMeta1=false;var touchedMetaData1=false;var touchedMeta2=false;var touchedMetaData2=false;var intersected=[];var HeadMountedDisplay=function(){function HeadMountedDisplay(space){_classCallCheck(this,HeadMountedDisplay);scope=this;this.name='HeadMountedDisplay';this.space=space;navigator.getVRDisplays().then(function(displays){if(displays.length>0){var display=displays[0];space.renderer.vr.setDevice(display);space.renderer.vr.enabled=true;space.scene.fog.far=_DEFAULT.FOG.FAR;space.device=scope;(0,_log2.default)('['+scope.name+'] - Press (Space) + (Enter) to enter VR',scope.name,true);document.addEventListener('dblclick',function(event){event.stopPropagation();event.preventDefault();display.isPresenting?display.exitPresent():display.requestPresent([{source:space.renderer.domElement}])});addEventListener('dblclick',function(event){event.stopPropagation();event.preventDefault();display.isPresenting?display.exitPresent():display.requestPresent([{source:space.renderer.domElement}])});document.addEventListener('keydown',function(event){switch(event.keyCode){case 13:keys.enter=true;break;case 27:keys.esc=true;break;case 32:keys.space=true;break;}if(keys.enter&&keys.space){(0,_log2.default)('['+scope.name+'] - '+(!display.isPresenting?'Entered':'Exited')+' VR',scope.name,true);display.isPresenting?display.exitPresent():display.requestPresent([{source:space.renderer.domElement}])}},false);document.addEventListener('keyup',function(event){switch(event.keyCode){case 13:keys.enter=false;break;case 27:keys.esc=false;break;case 32:keys.space=false;break;}},false)}else{}});function onThumbpadDown0(){console.log(this.name+' - onThumbpadDown0')}function onThumbpadUp0(){console.log('onThumbpadUp0')}function onMenuDown0(){console.log('onMenuDown0')}function onMenuUp0(){console.log('onMenuUp0')}function onGripsDown0(){console.log('onGripsDown0')}function onGripsUp0(){console.log('onGripsUp0')}this.controller1=new _ViveController.ViveController(0);this.controller1.standingMatrix=scope.space.renderer.vr.getStandingMatrix();this.controller1.addEventListener('triggerdown',scope.onTriggerDown1);this.controller1.addEventListener('triggerup',scope.onTriggerUp1);this.controller1.addEventListener('thumbpaddown',onThumbpadDown0);this.controller1.addEventListener('thumbpadup',onThumbpadUp0);this.controller1.addEventListener('menudown',onMenuDown0);this.controller1.addEventListener('menuup',function(){_Space2.default.clear({events:false})});this.controller1.addEventListener('gripsdown',onGripsDown0);this.controller1.addEventListener('gripsup',onGripsUp0);scope.space.scene.add(scope.controller1);this.controller2=new _ViveController.ViveController(1);this.controller2.standingMatrix=scope.space.renderer.vr.getStandingMatrix();this.controller2.addEventListener('triggerdown',scope.onTriggerDown2);this.controller2.addEventListener('triggerup',scope.onTriggerUp2);this.controller2.addEventListener('thumbpaddown',onThumbpadDown0);this.controller2.addEventListener('thumbpadup',onThumbpadUp0);this.controller2.addEventListener('menudown',onMenuDown0);this.controller2.addEventListener('menuup',function(){_Space2.default.clear({events:false})});this.controller2.addEventListener('gripsdown',onGripsDown0);this.controller2.addEventListener('gripsup',onGripsUp0);scope.space.scene.add(scope.controller2);if(_config2.default.device.headMountedDisplay.controllerModels){var loader=new _OBJLoader2.default;loader.setPath('/static/models/vive-controller/');loader.load('vr_controller_vive_1_5.obj',function(object){var loader=new _three.TextureLoader;loader.setPath('/static/models/vive-controller/');var controller=object.children[0];controller.material.map=loader.load('onepointfive_texture.png');controller.material.specularMap=loader.load('onepointfive_spec.png');controller.castShadow=true;controller.receiveShadow=true;var pivot=new _three.Mesh(new _three.IcosahedronGeometry(0.01,2));pivot.name='pivot';pivot.position.y=-0.016;pivot.position.z=-0.043;pivot.rotation.x=Math.PI/5.5;controller.add(pivot);pivot.material=pivot.material.clone();scope.controller1.add(controller.clone());scope.controller2.add(controller.clone())})}else{var pivot=new _three.Mesh(new _three.SphereGeometry(.025,2,2),new _three.MeshBasicMaterial({color:255}));pivot.name='pivot';scope.controller1.add(pivot);scope.controller2.add(pivot.clone())}}_createClass(HeadMountedDisplay,[{key:'onTriggerDown2',value:function onTriggerDown2(controller){var data=[{position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)});if(touchedMeta2){touchedMeta2.go('touch',data,touchedMeta2)}else{scope.space.go('touch',data[0],scope.space)}}},{key:'onTriggerUp2',value:function onTriggerUp2(controller){var data=[{position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)});if(touchedMeta2){touchedMeta2.go('release',data,touchedMeta2)}else{scope.space.go('release',data[0],scope.space)}}},{key:'onTriggerDown1',value:function onTriggerDown1(){var position=new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);var data=[{position:position}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)});if(touchedMeta1){touchedMeta1.go('touch',data,touchedMeta1)}else{scope.space.go('touch',data[0],scope.space)}}},{key:'onTriggerUp1',value:function onTriggerUp1(){var mode=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;var data=[{position:new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)}];if(scope.controller2)data.push({position:new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)});if(touchedMeta1){touchedMeta1.go('release',data,touchedMeta1)}else{scope.space.go('release',data[0],scope.space)}}},{key:'intersect1',value:function intersect1(){scope.space.Meta.forEach(function(Meta){var point=new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);var box=new _three.Box3().setFromObject(Meta.graphics.mesh);var distance=box.distanceToPoint(point);var data=[{hand:0,distance:distance,position:point}];if(scope.controller2){var _point=new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld);var _box=new _three.Box3().setFromObject(Meta.graphics.mesh);var _distance=_box.distanceToPoint(_point);data.push({hand:1,distance:_distance,position:_point})}if(distance<=0){touchedMeta1=Meta;touchedMetaData1=data;if(!Meta._entered1){Meta.go('touch',data,Meta);Meta.go('enter',data,Meta);Meta._entered1=true}}else{if(Meta._entered1){touchedMeta1=false;touchedMetaData1=data;Meta.go('leave',data,Meta);Meta._entered1=false}}})}},{key:'intersect2',value:function intersect2(){scope.space.Meta.forEach(function(Meta){var point=new _three.Vector3().setFromMatrixPosition(scope.controller2.matrixWorld);var box=new _three.Box3().setFromObject(Meta.graphics.mesh);var distance=box.distanceToPoint(point);var data=[{distance:distance,position:point}];if(scope.controller2){var _point2=new _three.Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);var _box2=new _three.Box3().setFromObject(Meta.graphics.mesh);var _distance2=_box2.distanceToPoint(_point2);data.push({distance:_distance2,position:_point2})}if(distance<=0){touchedMeta2=Meta;touchedMetaData2=data;if(!Meta._entered2){Meta.go('enter',data,Meta);Meta._entered2=true}}else{if(Meta._entered2){touchedMeta2=false;touchedMetaData2=data;Meta.go('leave',data,Meta);Meta._entered2=false};};})}},{key:'render',value:function render(){scope.controller1.update();scope.controller2.update();if(scope.controller1)scope.intersect1();if(scope.controller2)scope.intersect2()}}]);return HeadMountedDisplay}();exports.default=HeadMountedDisplay;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _log=require('../../Utilities/log');var _log2=_interopRequireDefault(_log);var _isMobile=require('../../Utilities/isMobile');var _isMobile2=_interopRequireDefault(_isMobile);var _DesktopDeviceController=require('./Desktop/DesktopDeviceController');var _DesktopDeviceController2=_interopRequireDefault(_DesktopDeviceController);var _MobileDeviceController=require('./Mobile/MobileDeviceController');var _MobileDeviceController2=_interopRequireDefault(_MobileDeviceController);var _HeadMountedDisplay=require('./HeadMountedDisplay/HeadMountedDisplay');var _HeadMountedDisplay2=_interopRequireDefault(_HeadMountedDisplay);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var instance=null;var Device=function(){function Device(space){var _this=this;_classCallCheck(this,Device);this.name='DeviceManager';if(navigator.getVRDisplays!==undefined){navigator.getVRDisplays().then(function(displays){if(displays.length>0){(0,_log2.default)('Detected: Desktop, VR: true',_this.name,true);instance=new _HeadMountedDisplay2.default(space);return instance}else{if(_isMobile2.default.any()){(0,_log2.default)('Detected: Mobile, VR: false',_this.name,true);return new _MobileDeviceController2.default(space)}else{(0,_log2.default)('Detected: Desktop, VR: false',_this.name,true);instance=new _DesktopDeviceController2.default(space);return instance}}})}else{if(_isMobile2.default.any()){(0,_log2.default)('Detected: Mobile, VR: false',this.name,true);return new _MobileDeviceController2.default(space)}else{(0,_log2.default)('Detected: Desktop, VR: false',this.name,true);instance=new _DesktopDeviceController2.default(space);return instance}}}_createClass(Device,null,[{key:'get',value:function get(){return instance}}]);return Device}();exports.default=Device;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.timer=exports.on=undefined;var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if('value'in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _config=require('../../config');var _config2=_interopRequireDefault(_config);var _three=require('three');var _Device=require('./Device/Device');var _Device2=_interopRequireDefault(_Device);var _Meta2=require('./Meta/Meta');var _Meta3=_interopRequireDefault(_Meta2);var _Graphics=require('./Meta/Graphics/Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Cube=require('./Meta/Graphics/Geometries/Cube');var _Cube2=_interopRequireDefault(_Cube);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var scope=void 0;var renderer=void 0,scene=void 0,camera=void 0,controls=void 0,container=void 0;var animate=void 0;var stop=false;var instance=false;var clock=void 0;var _default=void 0;var Space=function(){function Space(props){var _this=this;_classCallCheck(this,Space);_default={color:_config2.default.space.color};var _Meta=props&&props.Meta!==undefined?props.Meta:false;var _color=props&&props.color!==undefined?props.color:_default.color;clock=new _three.Clock;if(instance){Space.clear();Space.get().renderer.setClearColor(_color);Space.get().scene.fog=new _three.Fog(_color,0,5);return Space.get()}scope=this;instance=this;this.events=[];this.Meta=[];this.intervals=[];document.body.style.margin='0';this.renderer=new _three.WebGLRenderer({antialias:true});this.renderer.setSize(innerWidth,innerHeight);this.renderer.setViewport(0,0,innerWidth,innerHeight);this.renderer.setPixelRatio(window.devicePixelRatio);this.renderer.setClearColor(_color);this.renderer.gammaInput=true;this.renderer.gammaOutput=true;this.renderer.autoClear=true;this.renderer.domElement.id='renderer';this.renderer.domElement.style.position='fixed';this.renderer.domElement.style.zIndex='0';this.renderer.domElement.style.left='0';this.renderer.domElement.style.top='0';this.renderer.animate(scope.render);document.body.appendChild(this.renderer.domElement);this.scene=new _three.Scene;this.scene.fog=new _three.Fog(_color,0,6.25);this.camera=new _three.PerspectiveCamera(55,innerWidth/innerHeight,.01,1000);this.scene.add(this.camera);var light=new _three.AmbientLight(16777215,.5);light.position.set(25,50,25);this.scene.add(light);light=new _three.DirectionalLight(16777215,1);light.position.set(25,25,25);this.scene.add(light);light=new _three.DirectionalLight(16777215,1);light.position.set(-25,25,-25);this.scene.add(light);addEventListener('resize',function(event){_this.camera.aspect=window.innerWidth/window.innerHeight;_this.camera.updateProjectionMatrix();_this.renderer.setSize(window.innerWidth,window.innerHeight)});this.container=new _three.Object3D;this.scene.add(this.container);this.device=new _Device2.default(this);if(_Meta)this.add(_Meta);this.render();window.__SPACE__=this;return this}_createClass(Space,[{key:'on',value:function on(eventName,callback){if(typeof eventName=='function'){callback=eventName;eventName='p'}if(eventName=='t')eventName='touch';if(eventName=='r')eventName='release';if(eventName=='p')eventName='point';if(this.events[eventName]){this.events[eventName].push(callback)}else{this.events[eventName]=[callback]}return this}},{key:'go',value:function go(eventName){var _this2=this;for(var _len=arguments.length,rest=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){rest[_key-1]=arguments[_key]}if(this.events[eventName]){this.events[eventName].forEach(function(cb){cb.apply(undefined,rest.concat([_this2]))})}return this}},{key:'add',value:function add(Meta){this.Meta.push(Meta)}},{key:'start',value:function start(Meta){this.container.add(Meta.graphics.mesh)}},{key:'remove',value:function remove(Meta){}},{key:'end',value:function end(Meta){this.container.remove(Meta.graphics.mesh)}},{key:'life',value:function life(){var time=clock.getElapsedTime();this.Meta.forEach(function(Meta){if(Meta._physics!==null&&Meta.body!==undefined){Meta.graphics.mesh.position.copy(Meta.body.getPosition());Meta.graphics.mesh.quaternion.copy(Meta.body.getQuaternion())}else{Meta.lifes.map(function(life){life(Meta,time)})}Meta.life()})}},{key:'render',value:function render(){if(stop)return;scope.life();if(scope!==undefined&&scope.device!==undefined&&scope.device.render!==undefined)scope.device.render();_Meta3.default.getWorld().step();scope.renderer.render(scope.scene,scope.camera)}},{key:'timer',value:function timer(fun,interval){fun();var _interval=setInterval(fun,interval);this.intervals.push(_interval)}}],[{key:'get',value:function get(){if(!instance)new Space;return instance}},{key:'clear',value:function clear(options){if(!instance)return;var _Meta=options!==undefined&&options.Meta!==undefined?options.Meta:true;var _events=options!==undefined&&options.events!==undefined?options.events:true;var _intervals=options!==undefined&&options.intervals!==undefined?options.intervals:true;if(scope&&scope.container&&scope.container.children){for(var i=scope.container.children.length-1;i>=0;i--){scope.container.remove(scope.container.children[i])}}_Meta3.default.clear();if(_Meta)scope.Meta=[];if(_events)scope.events=[];if(_intervals)scope.intervals.forEach(function(interval){clearInterval(interval)});scope.intervals=[]}}]);return Space}();exports.default=Space;var on=function on(eventName,callback){return Space.get().on(eventName,callback)};var timer=function timer(fun,interval){return Space.get().timer(fun,interval)};exports.on=on;exports.timer=timer;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _three=require('three');var _Graphics=require('../Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Space=require('../../../Space');var _Space2=_interopRequireDefault(_Space);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={RADIUS:.5,SEGMENTS:32,SCALE:1};var Sphere=function Sphere(){var props=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var stop=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;_classCallCheck(this,Sphere);if(typeof props==='boolean')stop=props;var scale=_DEFAULT.SCALE;var _radius=props.r||props.radius||_DEFAULT.RADIUS;_radius*=scale;if(typeof props==='number')_radius=props;this.geometry=new _three.SphereGeometry(_radius,_DEFAULT.SEGMENTS,_DEFAULT.SEGMENTS);this.geometry.rotateX(-Math.PI/2);this.type='sphere';return stop?this.geometry:new _Graphics2.default(this)};exports.default=Sphere;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _three=require('three');var _Graphics=require('../Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Space=require('../../../Space');var _Space2=_interopRequireDefault(_Space);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={TOP:0,BOTTOM:0.25,HEIGHT:1,SEGMENTS:32,SCALE:1};var Cylinder=function Cylinder(){var props=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var stop=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;_classCallCheck(this,Cylinder);if(typeof props==='boolean')stop=props;var scale=_DEFAULT.SCALE;var _top=props.t||props.top||_DEFAULT.TOP;var _bottom=props.b||props.bottom||_DEFAULT.BOTTOM;var _height=props.h||props.height||_DEFAULT.HEIGHT;if(typeof props==='number')_top=_bottom=props/2;if(typeof props==='number')_height=props;_top*=scale;_bottom*=scale;_height*=scale;this.geometry=new _three.CylinderGeometry(_top,_bottom,_height,_DEFAULT.SEGMENTS);this.type='cylinder';return stop?this.geometry:new _Graphics2.default(this)};exports.default=Cylinder;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _three=require('three');var _Graphics=require('../Graphics');var _Graphics2=_interopRequireDefault(_Graphics);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={WIDTH:1,LENGTH:1};var Plane=function Plane(){var props=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var stop=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;_classCallCheck(this,Plane);if(typeof props==='boolean')stop=props;var _width=props.width||props.w||_DEFAULT.WIDTH;var _length=props.length||props.l||_DEFAULT.LENGTH;this.physics=true;if(props.p!==undefined)this.physics=props.p;if(props.physics!==undefined)this.physics=props.physics;this.geometry=new _three.PlaneGeometry(_width,_length);this.geometry.rotateX(-Math.PI/2);this.type='box';if(stop)return this.geometry;return new _Graphics2.default(this)};exports.default=Plane;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _Meta=require('../Meta');var _Meta2=_interopRequireDefault(_Meta);var _Graphics=require('../Graphics/Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Cube=require('../Graphics/Geometries/Cube');var _Cube2=_interopRequireDefault(_Cube);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={COLOR:9013641};var Ground=function Ground(props){_classCallCheck(this,Ground);var _color=props!==undefined&&props.color!==undefined?props.color:_DEFAULT.COLOR;return new _Meta2.default({physics:false,graphics:new _Graphics2.default({geometry:new _Cube2.default({width:100,height:0.001,length:100},true)},true)}).c(_color)};exports.default=Ground;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _three=require('three');var _Meta=require('../Meta');var _Meta2=_interopRequireDefault(_Meta);var _Graphics=require('../Graphics/Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Plane=require('../Graphics/Geometries/Plane');var _Plane2=_interopRequireDefault(_Plane);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={COLOR:15765137};var Grid=function Grid(props){_classCallCheck(this,Grid);var _color=props!==undefined&&props.color!==undefined?props.color:_DEFAULT.COLOR;return new _Meta2.default({physics:null,graphics:new _Graphics2.default({mesh:new _three.GridHelper(1000,1000,_color,_color).translateY(.001)},true)})};exports.default=Grid;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _Meta=require('../Meta');var _Meta2=_interopRequireDefault(_Meta);var _Graphics=require('../Graphics/Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Cube=require('../Graphics/Geometries/Cube');var _Cube2=_interopRequireDefault(_Cube);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={COLOR:12759680};var Brick=function Brick(){_classCallCheck(this,Brick);return new _Meta2.default({graphics:new _Graphics2.default({geometry:new _Cube2.default({width:1,height:1,length:1},true)},true)}).m('u',5).p()};exports.default=Brick;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _=require('../../../..');function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var Model=function Model(file){_classCallCheck(this,Model);return new _.Meta({graphics:new _.Graphics({model:file},true)})};exports.default=Model;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.Brick=exports.Grid=exports.Ground=exports.M=exports.P=exports.Y=exports.S=exports.C=exports.ti=exports.timer=exports.on=exports.Space=exports.Graphics=exports.Existence=exports.Model=exports.Plane=exports.Cylinder=exports.Sphere=exports.Cube=exports.Meta=exports.random=exports.r=undefined;var _config=require('../config');var _config2=_interopRequireDefault(_config);var _Space=require('./Space/Space');var _Space2=_interopRequireDefault(_Space);var _Meta=require('./Space/Meta/Meta');var _Meta2=_interopRequireDefault(_Meta);var _Graphics=require('./Space/Meta/Graphics/Graphics');var _Graphics2=_interopRequireDefault(_Graphics);var _Existence=require('./Space/Meta/Existence/Existence');var _Existence2=_interopRequireDefault(_Existence);var _Cube=require('./Space/Meta/Graphics/Geometries/Cube');var _Cube2=_interopRequireDefault(_Cube);var _Sphere=require('./Space/Meta/Graphics/Geometries/Sphere');var _Sphere2=_interopRequireDefault(_Sphere);var _Cylinder=require('./Space/Meta/Graphics/Geometries/Cylinder');var _Cylinder2=_interopRequireDefault(_Cylinder);var _Plane=require('./Space/Meta/Graphics/Geometries/Plane');var _Plane2=_interopRequireDefault(_Plane);var _Ground=require('./Space/Meta/Custom/Ground');var _Ground2=_interopRequireDefault(_Ground);var _Grid=require('./Space/Meta/Custom/Grid');var _Grid2=_interopRequireDefault(_Grid);var _Brick=require('./Space/Meta/Custom/Brick');var _Brick2=_interopRequireDefault(_Brick);var _Model=require('./Space/Meta/Graphics/Model/Model');var _Model2=_interopRequireDefault(_Model);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError('Cannot call a class as a function')}}var _DEFAULT={COLOR:{PRIMARY:'#548adf',SECONDARY:'#9aa9fe',TEXT:'#ffffff'}};console.log('%c \\u25EF META.Client.'+_config2.default.version,'background: linear-gradient('+_DEFAULT.COLOR.PRIMARY+', '+_DEFAULT.COLOR.SECONDARY+');color: '+_DEFAULT.COLOR.TEXT+';');var Void=function Void(){_classCallCheck(this,Void);this.space=new _Space2.default};exports.default=Void;var r=function r(min,max){var _min=min!==undefined?min:10;var _max=max!==undefined?max:0;return Math.random()*(_max-_min)+_min};exports.r=r;exports.random=r;exports.Meta=_Meta2.default;exports.Cube=_Cube2.default;exports.Sphere=_Sphere2.default;exports.Cylinder=_Cylinder2.default;exports.Plane=_Plane2.default;exports.Model=_Model2.default;exports.Existence=_Existence2.default;exports.Graphics=_Graphics2.default;exports.Space=_Space2.default;exports.on=_Space.on;exports.timer=_Space.timer;exports.ti=_Space.timer;exports.C=_Cube2.default;exports.S=_Sphere2.default;exports.Y=_Cylinder2.default;exports.P=_Plane2.default;exports.M=_Model2.default;exports.Ground=_Ground2.default;exports.Grid=_Grid2.default;exports.Brick=_Brick2.default;","import {Model, M, Meta, Graphics} from 'meta-client';\r\n\r\n/*\r\nnew Meta({\r\n    graphics: new Graphics({\r\n        model: 'Helmet.gltf'\r\n    }, true)\r\n}).live(\"on\", meta => {\r\n    meta.rotate(\"left\", .01)\r\n})\r\n*/\r\n\r\n\r\n/*\r\nnew Graphics({\r\n    model: 'Helmet.gltf'\r\n}, true)\r\n.live(\"on\", meta => {\r\n    meta.rotate(\"left\", .01)\r\n})\r\n*/\r\n\r\n/*\r\nnew Model('helmet')\r\n.live(\"on\", meta => {\r\n    meta.rotate(\"right\", .01)\r\n})\r\n*/\r\n\r\n\r\nnew M('helmet')\r\n.l(\"o\", m => \r\nm.r(\"r\", .01))\r\n\r\n"]}