{"version":3,"sources":["node_modules\\three\\build\\three.module.js","config.js","src\\Utilities\\log.js","src\\Utilities\\isMobile.js","src\\Space\\Device\\Desktop\\Controls\\PointerLockControls.js","src\\Space\\Device\\Desktop\\DesktopDeviceController.js","src\\Space\\Device\\Mobile\\MobileDeviceController.js","src\\Space\\Device\\HeadMountedDisplay\\Controls\\ViveController.js","src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","src\\Space\\Meta\\Graphics\\three\\examples\\js\\loaders\\GLTFLoader.js","src\\Space\\Meta\\Existence\\Existence.js","node_modules\\oimo\\build\\oimo.module.js","src\\Space\\Meta\\Meta.js","src\\Space\\Meta\\Graphics\\Graphics.js","src\\Space\\Meta\\Graphics\\Geometries\\Cube.js","src\\Space\\Device\\HeadMountedDisplay\\HeadMountedDisplay.js","src\\Space\\Device\\Device.js","src\\Space\\Space.js","src\\Space\\Meta\\Graphics\\Geometries\\Sphere.js","src\\Space\\Meta\\Graphics\\Geometries\\Cylinder.js","src\\Space\\Meta\\Graphics\\Geometries\\Plane.js","src\\Space\\Meta\\Custom\\Ground.js","src\\Space\\Meta\\Custom\\Grid.js","src\\Space\\Meta\\Custom\\Brick.js","src\\Space\\Meta\\Graphics\\Model\\Model.js","src\\index.js","index.js"],"names":["Number","EPSILON","undefined","Math","pow","isInteger","value","isFinite","floor","sign","x","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","y","t","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","log","LN2","floorPowerOfTwo","Vector2","defineProperties","set","isVector2","setScalar","scalar","setX","setY","setComponent","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","z","extractRotation","Vector3","scaleX","scaleY","scaleZ","makeRotationFromEuler","euler","isEuler","d","f","order","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","zero","one","q","compose","lookAt","eye","up","crossVectors","multiplyMatrices","premultiply","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","applyToBufferAttribute","count","getZ","applyMatrix4","setXYZ","determinant","transpose","tmp","setPosition","getInverse","throwOnDegenerate","t11","t12","t13","t14","det","msg","detInv","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","theta","makeRotationY","makeRotationZ","makeRotationAxis","axis","tx","ty","makeScale","makeShear","position","quaternion","_x","_y","_z","_w","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","sx","sy","sz","decompose","vector","matrix","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","left","right","top","bottom","near","far","makeOrthographic","h","p","Quaternion","slerp","qa","qb","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","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","camera","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","version","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","color","components","parseInt","charAt","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","copySRGBToLinear","SRGBToLinear","copyLinearToSRGB","LinearToSRGB","convertSRGBToLinear","convertLinearToSRGB","getHex","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","hsl","addColors","color1","color2","UniformsLib","diffuse","opacity","map","uvTransform","alphaMap","specularmap","specularMap","envmap","envMap","flipEnvMap","reflectivity","refractionRatio","maxMipLevel","aomap","aoMap","aoMapIntensity","lightmap","lightMap","lightMapIntensity","emissivemap","emissiveMap","bumpmap","bumpMap","bumpScale","normalmap","normalMap","normalScale","displacementmap","displacementMap","displacementScale","displacementBias","roughnessmap","roughnessMap","metalnessmap","metalnessMap","gradientmap","gradientMap","fog","fogDensity","fogNear","fogFar","fogColor","lights","ambientLightColor","directionalLights","properties","shadow","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotShadowMap","spotShadowMatrix","pointLights","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ShaderLib","basic","vertexShader","fragmentShader","lambert","emissive","phong","specular","shininess","standard","roughness","metalness","envMapIntensity","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","wireframe","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","container","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","device","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","space","headMountedDisplay","controllerModels","desktop","globe","transparency","acceleration","mobile","_DEFAULT","COLOR","PRIMARY","SECONDARY","TEXT","config","isMobile","Android","userAgent","BlackBerry","iOS","Opera","Windows","any","onMouseMove","PointerLockControls","pitchObject","yawObject","movementX","mozMovementX","webkitMovementX","movementY","mozMovementY","webkitMovementY","getDirection","raycasterGlobe","mouse","onMouseDown","onMouseUp","onKeyDown","onKeyUp","selected","hovered","selectedGlobe","selectedGlobePoint","intersectsGlobePlane","MetaPosition","globePlane","moveForward","moveBackward","moveLeft","moveRight","moveUp","moveDown","velocity","metaEntered","metaEnteredData","enter","esc","prepare","stopPropagation","DesktopDeviceController","controls","getObject","havePointerLock","body","pointerlockchange","pointerLockElement","mozPointerLockElement","webkitPointerLockElement","pointerlockerror","keyCode","charCode","go","requestPointerLock","mozRequestPointerLock","webkitRequestPointerLock","clientX","innerWidth","clientY","innerHeight","Meta","graphics","_intersectsGlobe","_entered","find","ACCELERATION","FOG","FAR","CONTAINER","SCALE","POSITION","Y","Z","GLOBE","RADIUS","MobileDeviceController","touches","pageX","pageY","ViveController","thumbpadIsPressed","triggerIsPressed","gripsArePressed","menuIsPressed","getGamepad","getButtonState","button","defaultOnError","err","OBJLoader","regexp","vertex_pattern","normal_pattern","uv_pattern","face_vertex","face_vertex_uv","face_vertex_uv_normal","face_vertex_normal","object_pattern","smoothing_pattern","material_library_pattern","material_use_pattern","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","smooth","startMaterial","libraries","previous","inherited","mtllib","groupEnd","cloned","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","parseNormalIndex","parseUVIndex","addVertexLine","addNormal","addUVLine","ua","ub","uc","ud","na","nb","nc","nd","vLen","ia","ib","ic","uvLen","nLen","addLineGeometry","vi","uvi","debug","_createParserState","lineFirstChar","lineSecondChar","lineLength","trimLeft","lineParts","lineVertices","lineUVs","li","llen","createdMaterials","miLen","sourceMaterial","materialLine","multiMaterial","timeEnd","GLTFLoader","dracoLoader","setDRACOLoader","content","magic","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","KHR_BINARY_GLTF","GLTFBinaryExtension","asset","extensionsUsed","extensionName","extensionsRequired","KHR_LIGHTS","GLTFLightsExtension","KHR_MATERIALS_UNLIT","GLTFMaterialsUnlitExtension","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","GLTFMaterialsPbrSpecularGlossinessExtension","KHR_DRACO_MESH_COMPRESSION","GLTFDracoMeshCompressionExtension","MSFT_TEXTURE_DDS","GLTFTextureDDSExtension","GLTFParser","scenes","glTF","addUnknownExtensionsToUserData","GLTFRegistry","removeAll","DDSLoader","ddsLoader","lightId","lightNode","innerConeAngle","outerConeAngle","getMaterialType","extendParams","materialParams","metallicRoughness","pbrMetallicRoughness","baseColorFactor","baseColorTexture","assignTexture","Promise","all","BINARY_EXTENSION_BUFFER_NAME","BINARY_EXTENSION_HEADER_LENGTH","BINARY_EXTENSION_CHUNK_TYPES","BIN","headerView","getUint32","chunkView","chunkIndex","byteLength","chunkLength","chunkType","contentArray","byteOffset","decodePrimitive","primitive","bufferViewIndex","bufferView","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","attributeName","ATTRIBUTES","accessorDef","accessors","componentType","WEBGL_COMPONENT_TYPES","getDependency","resolve","decodeDracoFile","specularGlossinessParams","pbrSpecularGlossiness","specularMapParsFragmentChunk","glossinessMapParsFragmentChunk","specularMapFragmentChunk","glossinessMapFragmentChunk","lightPhysicalFragmentChunk","glossiness","glossinessMap","diffuseFactor","diffuseTexture","glossinessFactor","specularFactor","specularGlossinessTexture","specGlossIndex","isGLTFSpecularGlossinessMaterial","cloneMaterial","refreshUniforms","USE_GLOSSINESSMAP","USE_ROUGHNESSMAP","GLTFCubicSplineInterpolant","stride2","stride3","td","m0","WEBGL_CONSTANTS","FLOAT_MAT3","FLOAT_MAT4","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","SAMPLER_2D","WEBGL_TYPE","WEBGL_FILTERS","WEBGL_WRAPPINGS","WEBGL_TEXTURE_FORMATS","WEBGL_TEXTURE_DATATYPES","WEBGL_SIDES","WEBGL_DEPTH_FUNCS","WEBGL_BLEND_EQUATIONS","WEBGL_BLEND_FUNCS","WEBGL_TYPE_SIZES","NORMAL","TEXCOORD_0","TEXCOORD0","TEXCOORD","TEXCOORD_1","COLOR_0","COLOR0","WEIGHTS_0","WEIGHT","JOINTS_0","JOINT","PATH_PROPERTIES","translation","weights","INTERPOLATION","CUBICSPLINE","STEP","STATES_ENABLES","ALPHA_MODES","OPAQUE","MASK","createDefaultMaterial","knownExtensions","objectDef","gltfExtensions","addMorphTargets","hasMorphPosition","hasMorphNormal","morphPositions","cloneBufferAttribute","normalAttribute","meshDef","extras","targetNames","isPrimitiveEqual","isObjectEqual","isArrayEqual","getCachedGeometry","newPrimitive","promise","getCachedCombinedGeometry","baseGeometries","getCachedMultiPassGeometry","primitives","baseGeometry","isMultiPassGeometry","primitive0","targets0","primitiveCache","multiplePrimitivesCache","multiPassGeometryCache","fileLoader","markDefs","getMultiDependencies","dependencies","nodeDefs","nodes","skinDefs","skins","meshDefs","meshes","meshReferences","meshUses","skinIndex","skinLength","joints","nodeIndex","nodeLength","nodeDef","skin","cacheKey","dependency","loadScene","loadNode","loadMesh","loadAccessor","loadBufferView","loadBuffer","loadMaterial","loadSkin","loadAnimation","loadCamera","getDependencies","defs","def","types","pendings","bufferIndex","bufferDef","uri","reject","bufferViewDef","bufferViews","accessorIndex","sparse","pendingBufferViews","TypedArray","elementBytes","itemBytes","byteStride","bufferAttribute","ibCacheKey","itemSizeIndices","SCALAR","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","textureIndex","URL","webkitURL","textureDef","textureExtensions","sourceURI","isObjectURL","createObjectURL","revokeObjectURL","samplers","sampler","textureName","materialDef","materialType","materialExtensions","sgExtension","kmuExtension","metallicFactor","roughnessFactor","metallicRoughnessTexture","alphaMode","alphaCutoff","normalTexture","occlusionTexture","strength","emissiveFactor","emissiveTexture","addPrimitiveAttributes","primitiveDef","gltfAttributeName","threeAttributeName","loadGeometries","isMultiPass","originalPrimitives","geometryPromise","accessor","BufferGeometryUtils","mergeBufferGeometries","meshIndex","originalMaterials","useVertexColors","useFlatShading","useMorphTargets","useMorphNormals","pointsMaterial","lineMaterial","cameraIndex","cameraDef","yfov","aspectRatio","znear","zfar","xmag","ymag","skinDef","skinEntry","inverseBindMatrices","animationIndex","animationDef","channels","input","inputAccessor","outputAccessor","TypedKeyframeTrack","targetName","InterpolantFactoryMethodGLTFCubicSpline","isInterpolantFactoryMethodGLTFCubicSpline","buildNodeHierachy","nodeId","parentObject","allNodes","jointId","jointNode","sceneIndex","sceneDef","nodeIds","plus","_unit","setHours","getHours","setMinutes","getMinutes","setSeconds","getSeconds","setMilliseconds","getMilliseconds","minus","Existence","props","started","ended","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","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","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","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","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","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","OIMO","bodies","lifes","events","_touched","existence","Graphics","physics","setExistence","setPresence","Space","eventName","on","rest","box3","setPhysics","life","live","_color","ms","in","every","TYPE","model","loadModel","gltf","extentions","loaders","includes","fileExtention","eval","extention","WIDTH","HEIGHT","LENGTH","Cube","_length","hints","touch1","touch2","_touch0","_touch1","_release0","_touch","LOG","touchedMeta1","touchedMetaData1","touchedMeta2","touchedMetaData2","intersected","HeadMountedDisplay","getVRDisplays","displays","display","exitPresent","requestPresent","onThumbpadDown0","onThumbpadUp0","onMenuDown0","onMenuUp0","onGripsDown0","onGripsUp0","controller1","onTriggerDown1","onTriggerUp1","controller2","onTriggerDown2","onTriggerUp2","hand","_entered1","_entered2","intersect1","intersect2","Device","clock","_default","_Meta","intervals","devicePixelRatio","zIndex","appendChild","__SPACE__","_physics","getWorld","fun","interval","_interval","_events","_intervals","SEGMENTS","_radius","TOP","BOTTOM","_top","_bottom","Ground","Grid","Brick","Model","Void","_min","_max","ti","C","S","M"],"mappings":"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","file":"meta.2edfe45f.map","sourceRoot":"..","sourcesContent":["// 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","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}","import config from '../../config';\r\n\r\nconst _DEFAULT = {\r\n  COLOR: {\r\n    PRIMARY: '#ff0000',\r\n    SECONDARY: '#0000ff',\r\n    TEXT: '#ffffff'\r\n  }\r\n}\r\n\r\nexport default function log (msg, name = 'Meta' , mode = config.log, style = `background: linear-gradient(${_DEFAULT.COLOR.PRIMARY}, ${_DEFAULT.COLOR.SECONDARY});color: ${_DEFAULT.COLOR.TEXT};`){\r\n  if(mode) console.log(` %c [Meta][${name}] - ${msg}`, style);\r\n}\r\n","const isMobile = {\r\n    Android: function() {\r\n        return navigator.userAgent.match(/Android/i);\r\n    },\r\n    BlackBerry: function() {\r\n        return navigator.userAgent.match(/BlackBerry/i);\r\n    },\r\n    iOS: function() {\r\n        return navigator.userAgent.match(/iPhone|iPad|iPod/i);\r\n    },\r\n    Opera: function() {\r\n        return navigator.userAgent.match(/Opera Mini/i);\r\n    },\r\n    Windows: function() {\r\n        return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/WPDesktop/i);\r\n    },\r\n    any: function() {\r\n        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());\r\n    }\r\n  };\r\n\r\n  export default isMobile;","import {Object3D, Vector3, Euler} from 'three';\r\n\r\nlet onMouseMove = null;\r\n\r\nlet scope;\r\n\r\nexport default class PointerLockControls {\r\n\r\n  constructor( camera ) {\r\n\r\n  \tscope = this;\r\n\r\n    this.camera = camera;\r\n\r\n  \tthis.pitchObject = new Object3D();\r\n  \tthis.pitchObject.add( camera );\r\n\r\n  \tthis.yawObject = new Object3D();\r\n  \tthis.yawObject.add( this.pitchObject );\r\n\r\n  \tonMouseMove = ( event ) => {\r\n\r\n  \t\tif ( scope.enabled === false ) return;\r\n\r\n  \t\tconst movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;\r\n  \t\tconst movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;\r\n\r\n  \t\tscope.yawObject.rotation.y -= movementX * 0.002;\r\n  \t\tscope.pitchObject.rotation.x -= movementY * 0.002;\r\n  \t\tscope.pitchObject.rotation.x = Math.max( - Math.PI / 2, Math.min( Math.PI / 2, scope.pitchObject.rotation.x ) );\r\n\r\n  \t};\r\n\r\n    document.addEventListener( 'mousemove', onMouseMove, false );\r\n\r\n    this.getDirection();\r\n\r\n  \tthis.enabled = false;\r\n\r\n  }\r\n\r\n\tdisable () {\r\n\r\n    this.enabled = false;\r\n\r\n    // (yaw and pitch) rotation\r\n    // -> to camera rotation\r\n    scope.camera.rotation.set(0,scope.yawObject.rotation.y,0);\r\n\r\n    this.pitchObject.rotation.set(0,0,0);\r\n    this.yawObject.rotation.set(0,0,0);\r\n\r\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\r\n\r\n\t};\r\n\r\n\tenable () {\r\n\r\n    this.enabled = true;\r\n\r\n    // (camera) rotation\r\n    // -> (yaw and pitch) rotation\r\n\r\n    this.pitchObject.rotation.x = scope.camera.rotation.x;\r\n    this.pitchObject.rotation.z = 0;\r\n    this.yawObject.rotation.y   = scope.camera.rotation.y;\r\n\r\n    scope.camera.rotation.set(0,0,0);\r\n\r\n\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\r\n\r\n\t};\r\n\r\n\r\n\tgetObject () {\r\n\r\n\t\treturn this.yawObject;\r\n\r\n\t};\r\n\r\n\tgetDirection () {\r\n\r\n\t\t// assumes the camera itself is not rotated\r\n\r\n\t\tvar direction = new Vector3( 0, 0, - 1 );\r\n\t\tvar rotation  = new Euler( 0, 0, 0, \"YXZ\" );\r\n\r\n\t\treturn ( v ) => {\r\n\r\n\t\t\trotation.set( this.pitchObject.rotation.x, this.yawObject.rotation.y, 0 );\r\n\r\n\t\t\tv.copy( direction ).applyEuler( rotation );\r\n\r\n\t\t\treturn v;\r\n\r\n\t\t};\r\n\r\n\t}\r\n\r\n};\r\n","import config from '../../../../config';\r\nimport log from '../../../Utilities/log';\r\n\r\nimport {DoubleSide, CubeGeometry, PlaneGeometry, Vector2, Vector3, Object3D, Raycaster, Plane, Mesh, MeshBasicMaterial, SphereGeometry} from 'three';\r\n\r\nimport PointerLockControls from './Controls/PointerLockControls';\r\n\r\nconst name = 'DesktopDeviceController'\r\n\r\nlet scope;\r\n\r\nconst raycaster = new Raycaster();\r\nconst raycasterGlobe = new Raycaster();\r\n\r\nconst mouse     = new Vector2();\r\n      mouse.x   = null;\r\n      mouse.y   = null;\r\n\r\nconst offset       = new Vector3();\r\nconst intersection = new Vector3();\r\n\r\nlet onMouseMove, onMouseDown, onMouseUp, onKeyDown, onKeyUp;\r\n\r\nlet selected = null, hovered = null;\r\nlet selectedGlobe = null;\r\nlet selectedGlobePoint = null;\r\nlet intersectsGlobePlane = null;\r\n\r\nlet MetaPosition = null;\r\n\r\nlet globePlane = null;\r\n\r\nlet moveForward = false;\r\nlet moveBackward = false;\r\nlet moveLeft = false;\r\nlet moveRight = false;\r\nlet moveUp = false;\r\nlet moveDown = false;\r\n\r\nlet prevTime = performance.now();\r\nlet velocity = new Vector3();\r\n\r\nlet metaEntered = false;\r\nlet metaEnteredData = null;\r\n\r\nlet keys = {\r\n  enter: false,\r\n  space: false,\r\n  esc: false\r\n}\r\n\r\nlet globe;\r\nlet plane;\r\n\r\nlet data;\r\n\r\nfunction prepare(event){\r\n\r\n  event.preventDefault();\r\n  event.stopPropagation();\r\n\r\n}\r\n\r\n/** This class represents a desktop device controller.\r\n* @constructor\r\n* @param {Object} space\r\n*/\r\nexport default class DesktopDeviceController {\r\n\r\n  constructor(space){\r\n\r\n    scope = this;\r\n\r\n    this.space = space;\r\n\r\n    //Add a globe as an 'interaction radius'\r\n    globe = new Mesh(new SphereGeometry(Math.abs(config.device.desktop.camera.position.z),32,32), new MeshBasicMaterial({color: config.device.desktop.globe.color, wireframe: config.device.desktop.globe.wireframe, transparent: config.device.desktop.globe.transparency, opacity: config.device.desktop.globe.opacity, side: DoubleSide}));\r\n    space.camera.add(globe);\r\n\r\n\t\t//Adjust space (device specifically).\r\n    space.container.position\r\n    .copy(config.device.desktop.container.position);\r\n\r\n    space.camera.position\r\n    .copy(config.device.desktop.camera.position);\r\n\r\n    space.scene.fog.far = Math.abs(config.device.desktop.camera.position.z*5);\r\n\r\n    //Set up controls.\r\n    this.controls = new PointerLockControls(space.camera);\r\n    space.scene.add( scope.controls.getObject() );\r\n    this.controls.enabled = false;\r\n\r\n    space.device = this;\r\n\r\n    //Handle Pointerlock.\r\n    const havePointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document;\r\n\r\n    if ( havePointerLock ) {\r\n\r\n      var element = document.body;\r\n\r\n      var pointerlockchange = function ( event ) {\r\n\r\n        if ( document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element ) {\r\n\r\n          scope.controls.enabled = true;\r\n\r\n        } else {\r\n\r\n          scope.controls.enabled = false;\r\n\r\n        }\r\n\r\n      };\r\n\r\n      var pointerlockerror = ( event ) => {\r\n        log('[DesktopDevice] - Controls - Pointerlock error.', name);\r\n      };\r\n\r\n      // Hook pointer lock state change events\r\n      document.addEventListener( 'pointerlockchange', pointerlockchange, false );\r\n      document.addEventListener( 'mozpointerlockchange', pointerlockchange, false );\r\n      document.addEventListener( 'webkitpointerlockchange', pointerlockchange, false );\r\n\r\n      document.addEventListener( 'pointerlockerror', pointerlockerror, false );\r\n      document.addEventListener( 'mozpointerlockerror', pointerlockerror, false );\r\n      document.addEventListener( 'webkitpointerlockerror', pointerlockerror, false );\r\n\r\n    }\r\n\r\n\r\n    onKeyDown = ( event ) => {\r\n\r\n\t\t\tswitch ( event.keyCode ) {\r\n\r\n        case 13: //enter\r\n          keys.enter = true;\r\n        break;\r\n\r\n        case 27: //escape\r\n          keys.esc = true;\r\n        break;\r\n\r\n        case 32: //space\r\n          keys.space = true;\r\n        break;\r\n\r\n\t\t\t\tcase 38: // up\r\n\t\t\t\tcase 87: // w\r\n\t\t\t\t\tmoveForward = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 37: // left\r\n\t\t\t\tcase 65: // a\r\n\t\t\t\t\tmoveLeft = true; break;\r\n\r\n\t\t\t\tcase 40: // down\r\n\t\t\t\tcase 83: // s\r\n\t\t\t\t\tmoveBackward = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 39: // right\r\n\t\t\t\tcase 68: // d\r\n\t\t\t\t\tmoveRight = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 86: // v\r\n          moveUp = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 16: // shift\r\n          moveDown = true;\r\n\t\t\t\t\tbreak;\r\n\r\n      }\r\n      \r\n      switch ( event.charCode ) {\r\n\r\n        case 32: // space\r\n          moveUp = true;\r\n        break;\r\n\r\n      }  \r\n\r\n      if(keys.enter&&keys.space){\r\n        //@todo fire a 'release' event in space, since this is not possible anymore from now on\r\n        scope.space.go('release');\r\n\r\n        element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;\r\n        element.requestPointerLock();\r\n\r\n      }\r\n\r\n\t\t};\r\n\r\n\t\tonKeyUp = ( event ) => {\r\n\r\n\t\t\tswitch( event.keyCode ) {\r\n\r\n        case 13: //enter\r\n          keys.enter = false;\r\n        break;\r\n\r\n        case 27: //escape\r\n          keys.esc = false;\r\n        break;\r\n\r\n        case 32: //space\r\n          keys.space = false;\r\n        break;\r\n\r\n\t\t\t\tcase 38: // up\r\n\t\t\t\tcase 87: // w\r\n\t\t\t\t\tmoveForward = false;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 37: // left\r\n\t\t\t\tcase 65: // a\r\n\t\t\t\t\tmoveLeft = false;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 40: // down\r\n\t\t\t\tcase 83: // s\r\n\t\t\t\t\tmoveBackward = false;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 39: // right\r\n\t\t\t\tcase 68: // d\r\n\t\t\t\t\tmoveRight = false;\r\n\t\t\t\t\tbreak;\r\n\r\n        case 86: // v\r\n          moveUp = false;\r\n\t\t\t\t\tbreak;\r\n\r\n        case 16: // shift\r\n          moveDown = false;\r\n\t\t\t\t\tbreak;\r\n\r\n      }\r\n      \r\n      switch ( event.charCode ) {\r\n\r\n        case 32: // space\r\n          moveUp = false;\r\n        break;\r\n\r\n      }  \r\n\r\n\t\t};\r\n\r\n    onMouseDown = (event) => {\r\n\r\n      prepare(event);\r\n\r\n      if(scope.controls.enabled === true) return;\r\n\r\n      mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;\r\n      mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\r\n\r\n      raycaster.setFromCamera(mouse, space.camera);\r\n\r\n      /*\r\n        Meta\r\n      */\r\n\r\n      //Check for reached any Meta.\r\n      const intersects = raycaster.intersectObjects(scope.space.container.children);\r\n\r\n      //Any intersections?\r\n      if(intersects.length>0){\r\n\r\n        selected = intersects[0].object;\r\n\r\n        scope.space.Meta.forEach(Meta => {\r\n\r\n          if(Meta.graphics.mesh.id === selected.id){\r\n\r\n            MetaPosition = intersects[0].point;\r\n\r\n            MetaPosition.z  = MetaPosition.z+Math.abs(config.device.desktop.container.position.z);\r\n            MetaPosition.y  = MetaPosition.y+Math.abs(config.device.desktop.container.position.y);\r\n\r\n            const data = {\r\n              position: MetaPosition\r\n            };\r\n\r\n            Meta.go('touch', data);\r\n\r\n            //Set up plane\r\n            plane = new Mesh(new PlaneGeometry(100,100,10,10), new MeshBasicMaterial({wireframe:true, transparent:true, opacity: false}));\r\n            plane.position.copy(MetaPosition);\r\n            scope.space.container.add(plane);\r\n\r\n          }\r\n\r\n        });\r\n\r\n      }else{\r\n\r\n        log('Looking for space reaches', name)\r\n\r\n        /*\r\n          Space\r\n        */\r\n\r\n        //And always, we're also 'reaching into space'.\r\n        //So, set up a raycaster for the globe.\r\n\r\n        //Check for intersections on globe.\r\n        const _intersectsGlobe = raycaster.intersectObject(globe);\r\n\r\n        //Any hits?\r\n        if(_intersectsGlobe.length>0){\r\n\r\n          selectedGlobe         = _intersectsGlobe[0].object;\r\n          selectedGlobePoint    = _intersectsGlobe[0].point;\r\n\r\n          //Substract container's position\r\n          selectedGlobePoint.z  = selectedGlobePoint.z+Math.abs(config.device.desktop.container.position.z);\r\n          selectedGlobePoint.y  = selectedGlobePoint.y+Math.abs(config.device.desktop.container.position.y);\r\n    \r\n          //Set up helper plane\r\n          globePlane = new Mesh(new PlaneGeometry(100,100,10,10), new MeshBasicMaterial({wireframe:config.device.desktop.globe.wireframe, transparent: true, opacity:config.device.desktop.globe.opacity}));\r\n          globePlane.position.copy(selectedGlobePoint);\r\n          scope.space.scene.add(globePlane);\r\n\r\n          const data = {\r\n            position : selectedGlobePoint\r\n          };\r\n\r\n          log('about to trigger space touch')\r\n\r\n          scope.space.go('touch', data);\r\n\r\n        };\r\n\r\n      }\r\n\r\n    };\r\n\r\n    onMouseMove = (event) => {\r\n\r\n      prepare(event);\r\n\r\n      if(scope.controls.enabled === true) return;\r\n\r\n    \tmouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;\r\n    \tmouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\r\n\r\n      raycaster.setFromCamera(mouse, space.camera);\r\n\r\n      /*\r\n        Space\r\n      */\r\n\r\n      //Take the intersection on the globe.\r\n      //Draw a plane from there.\r\n      //Send rays.\r\n\r\n      if(globePlane){\r\n\r\n        log('Intersected globe', name)\r\n\r\n        intersectsGlobePlane = raycaster.intersectObject(globePlane);\r\n\r\n        if(intersectsGlobePlane.length>0){\r\n\r\n          let position = intersectsGlobePlane[0].point;\r\n\r\n          position.z  = position.z+Math.abs(config.device.desktop.container.position.z);\r\n          position.y  = position.y+Math.abs(config.device.desktop.container.position.y);\r\n\r\n          const data =  {\r\n            position: position\r\n          };\r\n\r\n          scope.space.go('touch', data);\r\n        }\r\n\r\n      }else{\r\n\r\n        log('Intersected space', name);\r\n        //The rest is just reaching around in space...\r\n\r\n        let _intersectsGlobe = raycaster.intersectObject(globe);\r\n\r\n        //Any objects hit?\r\n        if(_intersectsGlobe.length>0){\r\n\r\n          const position = _intersectsGlobe[0].point;\r\n\r\n          position.z  = position.z+Math.abs(config.device.desktop.container.position.z);\r\n          position.y  = position.y+Math.abs(config.device.desktop.container.position.y);\r\n\r\n          const data = {\r\n            position : position\r\n          };\r\n\r\n          scope.space.go('point', data);\r\n\r\n        }\r\n\r\n      }\r\n\r\n      /*\r\n        Meta\r\n      */\r\n\r\n      /*\r\n        Meta was selected before and its being moved on the plane now\r\n      */\r\n\r\n     if(selected){\r\n\r\n       const intersects = raycaster.intersectObject(plane);\r\n\r\n       if(intersects.length>0){\r\n\r\n          const object = intersects[0].object;\r\n\r\n          MetaPosition = intersects[0].point;\r\n\r\n          MetaPosition.z  = MetaPosition.z+Math.abs(config.device.desktop.container.position.z);\r\n          MetaPosition.y  = MetaPosition.y+Math.abs(config.device.desktop.container.position.y);\r\n\r\n          scope.space.Meta.forEach(Meta => {\r\n\r\n            if(Meta.graphics.mesh.id === selected.id){\r\n\r\n              const data = {\r\n                position: MetaPosition\r\n              };\r\n\r\n              Meta.go('touch', data);\r\n\r\n            }\r\n\r\n          });\r\n\r\n       }\r\n\r\n     }\r\n\r\n      /*\r\n        Check for any in intersections with Meta\r\n      */\r\n      const intersects = raycaster.intersectObjects(scope.space.container.children);\r\n\r\n      //There ARE intersections with Meta\r\n      if(intersects.length>0){\r\n\r\n        log('Intersected Meta', name);\r\n\r\n        let position = intersects[0].point;\r\n\r\n        //Substract the container's position\r\n        position.z  = position.z+Math.abs(config.device.desktop.container.position.z);\r\n        position.y  = position.y+Math.abs(config.device.desktop.container.position.y);\r\n  \r\n        const data = {\r\n          position: position\r\n        };\r\n\r\n        scope.space.Meta.forEach(Meta => {\r\n\r\n          if(Meta.graphics.mesh.id === intersects[0].object.id){\r\n\r\n            //console.log(Meta.graphics.mesh.id+'-'+intersects[0].object.id)\r\n\r\n            Meta.go('point', data);  \r\n\r\n            if(!Meta._entered){\r\n              Meta.go('enter', data);      \r\n              Meta._entered = true;\r\n            }else{\r\n              Meta.go('leave', data);      \r\n              Meta._entered = false;\r\n            }\r\n\r\n          }\r\n\r\n        });\r\n\r\n      //NO intersections with Meta\r\n      }else{\r\n\r\n         //That means existing ones have to be cleared as well\r\n        scope.space.Meta.forEach(Meta => {\r\n\r\n            if(Meta._entered){\r\n              Meta.go('leave', data);      \r\n              Meta._entered = false;\r\n             }\r\n\r\n        });\r\n\r\n      }\r\n\r\n    };\r\n\r\n    onMouseUp   = (event) => {\r\n\r\n      prepare(event);\r\n\r\n      if(scope.controls.enabled === true) return;\r\n\r\n      /*\r\n        Space\r\n      */\r\n      if(globePlane){\r\n        scope.space.container.remove(globePlane);\r\n        globePlane = false;\r\n      }\r\n\r\n      //First of all,\r\n      //we're always 'reaching into space'.\r\n      //So, set up a raycaste for the globe.\r\n      raycaster.setFromCamera(mouse, space.camera);\r\n\r\n      //Check for intersections on globe\r\n      const _intersectsGlobe = raycaster.intersectObjects(scope.space.camera.children);\r\n\r\n      //Any objects hit?\r\n      if(_intersectsGlobe.length>0){\r\n\r\n        log('Intersected globe (onMouseDown)', name)\r\n\r\n         selectedGlobe  = _intersectsGlobe[0].object;\r\n         let point      = _intersectsGlobe[0].point;\r\n\r\n         point.z  = point.z+Math.abs(config.device.desktop.container.position.z);\r\n         point.y  = point.y+Math.abs(config.device.desktop.container.position.y);\r\n\r\n        //if(selectedGlobe.name==='globe'){\r\n          const data = {\r\n            position : point\r\n          };\r\n          scope.space.go('release', data);\r\n        //}\r\n\r\n      }\r\n\r\n      /*\r\n        Meta\r\n      */\r\n\r\n      if (selected) {\r\n\r\n        scope.space.container.remove(plane);\r\n        plane = null;\r\n\r\n        space.Meta.find(Meta => {\r\n          if(Meta.graphics.mesh.id === selected.id){\r\n          const data = {\r\n            position: MetaPosition\r\n          };\r\n            Meta.go('release', data);\r\n          }\r\n        });\r\n\r\n        selected = null;\r\n\r\n      }else{\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this.init();\r\n\r\n    return this;\r\n  }\r\n\r\n  init(){\r\n\r\n    document.addEventListener( 'keydown', onKeyDown, false );\r\n    document.addEventListener( 'keyup', onKeyUp, false );\r\n\r\n    addEventListener( 'mousemove', onMouseMove, false );\r\n    addEventListener( 'mousedown', onMouseDown, false );\r\n    addEventListener( 'mouseup', onMouseUp, false );\r\n\r\n  }\r\n\r\n  deactivate(){\r\n\r\n    document.removeEventListener( 'keydown', onKeyDown, false );\r\n    document.removeEventListener( 'keyup', onKeyUp, false );\r\n\r\n    removeEventListener( 'mousemove', onMouseMove, false );\r\n    removeEventListener( 'mousedown', onMouseDown, false );\r\n    removeEventListener( 'mouseup', onMouseUp, false );\r\n\r\n  }\r\n\r\n  render(space){\r\n\r\n    if(!this.controls.enabled) return;\r\n\r\n    const time = performance.now();\r\n    const delta = ( time - prevTime ) / 1000;\r\n    const acceleration = config.device.desktop.acceleration;    \r\n\r\n\t\tvelocity.x -= velocity.x * 10.0 * delta;\r\n\t\tvelocity.z -= velocity.z * 10.0 * delta;\r\n\t\tvelocity.y -= velocity.y * 10.0 * delta;\r\n\r\n\t\tif ( moveForward ) velocity.z -= acceleration * delta;\r\n\t\tif ( moveBackward ) velocity.z += acceleration * delta;\r\n\r\n\t\tif ( moveLeft ) velocity.x -= acceleration * delta;\r\n\t\tif ( moveRight ) velocity.x += acceleration * delta;\r\n\r\n    if ( moveDown ) velocity.y -= acceleration * delta;\r\n\t\tif ( moveUp ) velocity.y += acceleration * delta;\r\n\r\n\t\tscope.controls.getObject().translateX( velocity.x * delta );\r\n\t\tscope.controls.getObject().translateY( velocity.y * delta );\r\n\t\tscope.controls.getObject().translateZ( velocity.z * delta );\r\n\r\n\t\tprevTime = time;\r\n\r\n  }\r\n\r\n}\r\n","import config from '../../../../config';\r\n\r\nimport {DoubleSide, CubeGeometry, PlaneGeometry, Vector2, Vector3, Object3D, Raycaster, Plane, Mesh, MeshBasicMaterial, SphereGeometry} from 'three';\r\n\r\nimport log from '../../../Utilities/log';\r\n\r\nfunction prepare(event){\r\n\r\n    event.preventDefault();\r\n\r\n}\r\n\r\nconst name = 'DesktopDeviceController'\r\n\r\nlet scope;\r\n\r\nconst raycaster = new Raycaster();\r\nconst raycasterGlobe = new Raycaster();\r\n\r\nconst mouse     = new Vector2();\r\n      mouse.x   = null;\r\n      mouse.y   = null;\r\n\r\nconst offset       = new Vector3();\r\nconst intersection = new Vector3();\r\n\r\nlet onMouseMove, onMouseDown, onMouseUp, onKeyDown, onKeyUp;\r\n\r\nlet selected = null, hovered = null;\r\nlet selectedGlobe = null;\r\nlet selectedGlobePoint = null;\r\nlet intersectsGlobePlane = null;\r\n\r\nlet MetaPosition = null;\r\n\r\nlet globePlane = null;\r\n\r\nlet moveForward = false;\r\nlet moveBackward = false;\r\nlet moveLeft = false;\r\nlet moveRight = false;\r\nlet moveUp = false;\r\nlet moveDown = false;\r\n\r\nlet prevTime = performance.now();\r\nlet velocity = new Vector3();\r\n\r\nlet metaEntered = false;\r\nlet metaEnteredData = null;\r\n\r\nlet keys = {\r\n  enter: false,\r\n  space: false,\r\n  esc: false\r\n}\r\n\r\nlet globe;\r\nlet plane;\r\n\r\nlet data;\r\n\r\nconst _DEFAULT = {\r\n    ACCELERATION: 250,\r\n    FOG: {\r\n      FAR: 25\r\n    },\r\n    CONTAINER: {\r\n      SCALE: 1,\r\n      POSITION: {\r\n        Y: -2,\r\n        Z: -10\r\n      }\r\n    },\r\n    GLOBE:{\r\n      RADIUS: 10.5\r\n    }\r\n  };\r\n\r\n/** This class represents a mobile device controller.\r\n* @constructor\r\n* @param {Object} space\r\n*/\r\nexport default class MobileDeviceController {\r\n\r\n  constructor(space){\r\n\r\n    scope = this;\r\n\r\n    this.space = space;\r\n\r\n    /*\r\n      Adjust\r\n    */\r\n\r\n    //Add a globe on the camera as an 'interaction radius'.\r\n    globe = new Mesh(new SphereGeometry(Math.abs(config.device.mobile.camera.position.z),32,32), new MeshBasicMaterial({color: config.device.mobile.globe.color, wireframe: config.device.mobile.globe.wireframe, transparent: config.device.mobile.globe.transparency, opacity: config.device.mobile.globe.opacity, side: DoubleSide}));\r\n    space.camera.add(globe);\r\n\r\n    //Adjust space (device specifically).\r\n    space.container.position\r\n    .copy(config.device.mobile.container.position);\r\n\r\n    space.camera.position\r\n    .copy(config.device.mobile.camera.position);\r\n\r\n    space.scene.fog.far = Math.abs(config.device.mobile.camera.position.z*2);\r\n\r\n\r\n    onKeyDown = (event) => {\r\n\r\n      switch ( event.keyCode ) {\r\n\r\n        case 13: //enter\r\n        keys.enter = true;\r\n        break;\r\n\r\n        case 27: //escape\r\n        keys.esc = true;\r\n        break;\r\n\r\n        case 32: //space\r\n        keys.space = true;\r\n        break;\r\n\r\n        case 38: // up\r\n        case 87: // w\r\n            moveForward = true;\r\n            break;\r\n\r\n        case 37: // left\r\n        case 65: // a\r\n            moveLeft = true; break;\r\n\r\n        case 40: // down\r\n        case 83: // s\r\n            moveBackward = true;\r\n            break;\r\n\r\n        case 39: // right\r\n        case 68: // d\r\n            moveRight = true;\r\n            break;\r\n\r\n        case 32: // space\r\n        moveUp = true;\r\n        break;\r\n\r\n        case 16: // shift\r\n        moveDown = true;\r\n        break;\r\n\r\n      }\r\n\r\n      if(keys.enter&&keys.space){\r\n          //@todo fire a 'release' event in space, since this is not possible anymore from now on\r\n          scope.space.go('release');\r\n\r\n          element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;\r\n          element.requestPointerLock();\r\n\r\n      }\r\n\r\n    };\r\n\r\n    onKeyUp = (event) => {\r\n\r\n        switch( event.keyCode ) {\r\n\r\n            case 13: //enter\r\n            keys.enter = false;\r\n            break;\r\n\r\n            case 27: //escape\r\n            keys.esc = false;\r\n            break;\r\n\r\n            case 32: //space\r\n            keys.space = false;\r\n            break;\r\n\r\n            case 38: // up\r\n            case 87: // w\r\n                moveForward = false;\r\n                break;\r\n\r\n            case 37: // left\r\n            case 65: // a\r\n                moveLeft = false;\r\n                break;\r\n\r\n            case 40: // down\r\n            case 83: // s\r\n                moveBackward = false;\r\n                break;\r\n\r\n            case 39: // right\r\n            case 68: // d\r\n                moveRight = false;\r\n                break;\r\n\r\n            case 32: // space\r\n            moveUp = false;\r\n                        break;\r\n\r\n            case 16: // shift\r\n            moveDown = false;\r\n            break;\r\n\r\n        }\r\n\r\n    };\r\n\r\n\r\n    onMouseDown = (event) => {\r\n\r\n      prepare(event);\r\n\r\n      mouse.x = +(event.touches[0].pageX / window.innerWidth) * 2 - 1;\r\n      mouse.y = -(event.touches[0].pageY / window.innerHeight) * 2 + 1;\r\n\r\n      raycaster.setFromCamera(mouse, space.camera);\r\n\r\n      /*\r\n        Meta\r\n      */\r\n\r\n      //Check for reached any Meta.\r\n      const intersects = raycaster.intersectObjects(scope.space.container.children);\r\n\r\n      //Any intersections?\r\n      if(intersects.length>0){\r\n\r\n        selected = intersects[0].object;\r\n\r\n        scope.space.Meta.forEach(Meta => {\r\n\r\n          if(Meta.graphics.mesh.id === selected.id){\r\n\r\n            MetaPosition = intersects[0].point;\r\n\r\n            MetaPosition.z  = MetaPosition.z+Math.abs(config.device.mobile.container.position.z);\r\n            MetaPosition.y  = MetaPosition.y+Math.abs(config.device.mobile.container.position.y);\r\n\r\n            const data = {\r\n              position: MetaPosition\r\n            };\r\n\r\n            Meta.go('touch', data);\r\n\r\n            //Set up plane\r\n            plane = new Mesh(new PlaneGeometry(100,100,10,10), new MeshBasicMaterial({wireframe:true, transparent:true, opacity: false}));\r\n            plane.position.copy(MetaPosition);\r\n            scope.space.container.add(plane);\r\n\r\n          }\r\n\r\n        });\r\n\r\n      }else{\r\n\r\n        log('Looking for space reaches', name)\r\n\r\n        /*\r\n          Space\r\n        */\r\n\r\n        //And always, we're also 'reaching into space'.\r\n        //So, set up a raycaster for the globe.\r\n\r\n        //Check for intersections on globe.\r\n        const _intersectsGlobe = raycaster.intersectObject(globe);\r\n\r\n        //Any hits?\r\n        if(_intersectsGlobe.length>0){\r\n\r\n          selectedGlobe         = _intersectsGlobe[0].object;\r\n          selectedGlobePoint    = _intersectsGlobe[0].point;\r\n\r\n          //Substract container's position\r\n          selectedGlobePoint.z  = selectedGlobePoint.z+Math.abs(config.device.mobile.container.position.z);\r\n          selectedGlobePoint.y  = selectedGlobePoint.y+Math.abs(config.device.mobile.container.position.y);\r\n    \r\n\r\n          //Set up helper plane\r\n          globePlane = new Mesh(new PlaneGeometry(100,100,10,10), new MeshBasicMaterial({wireframe:config.device.desktop.globe.wireframe, transparent: true, opacity:config.device.desktop.globe.opacity}));\r\n          globePlane.position.copy(selectedGlobePoint);\r\n          scope.space.scene.add(globePlane);\r\n\r\n          const data = {\r\n            position : selectedGlobePoint\r\n          };\r\n\r\n          log('about to trigger space touch')\r\n\r\n          scope.space.go('touch', data);\r\n\r\n        };\r\n\r\n      }\r\n\r\n    };\r\n\r\n    onMouseMove = (event) => {\r\n\r\n      prepare(event);\r\n\r\n      mouse.x = +(event.touches[0].pageX / window.innerWidth) * 2 - 1;\r\n      mouse.y = -(event.touches[0].pageY / window.innerHeight) * 2 + 1;\r\n\r\n      raycaster.setFromCamera(mouse, space.camera);\r\n\r\n      /*\r\n        Space\r\n      */\r\n\r\n      //Take the intersection on the globe.\r\n      //Draw a plane from there.\r\n      //Send rays.\r\n\r\n      if(globePlane){\r\n\r\n        log('Intersected globe', name)\r\n\r\n        intersectsGlobePlane = raycaster.intersectObject(globePlane);\r\n\r\n        if(intersectsGlobePlane.length>0){\r\n\r\n          let position = intersectsGlobePlane[0].point;\r\n\r\n          position.z  = position.z+Math.abs(config.device.mobile.container.position.z);\r\n          position.y  = position.y+Math.abs(config.device.mobile.container.position.y);\r\n\r\n          const data =  {\r\n            position: position\r\n          };\r\n\r\n          scope.space.go('touch', data);\r\n        }\r\n\r\n      }else{\r\n\r\n        log('Intersected space', name);\r\n        //The rest is just reaching around in space...\r\n\r\n        let _intersectsGlobe = raycaster.intersectObject(globe);\r\n\r\n        //Any objects hit?\r\n        if(_intersectsGlobe.length>0){\r\n\r\n          const position = _intersectsGlobe[0].point;\r\n\r\n          position.z  = position.z+Math.abs(config.device.mobile.container.position.z);\r\n          position.y  = position.y+Math.abs(config.device.mobile.container.position.y);\r\n\r\n          const data = {\r\n            position : position\r\n          };\r\n\r\n          scope.space.go('point', data);\r\n\r\n        }\r\n\r\n      }\r\n\r\n      /*\r\n        Meta\r\n      */\r\n\r\n      /*\r\n        Meta was selected before and its being moved on the plane now\r\n      */\r\n\r\n     if(selected){\r\n\r\n       const intersects = raycaster.intersectObject(plane);\r\n\r\n       if(intersects.length>0){\r\n\r\n          const object = intersects[0].object;\r\n\r\n          MetaPosition = intersects[0].point;\r\n\r\n          MetaPosition.z  = MetaPosition.z+Math.abs(config.device.mobile.container.position.z);\r\n          MetaPosition.y  = MetaPosition.y+Math.abs(config.device.mobile.container.position.y);\r\n\r\n          scope.space.Meta.forEach(Meta => {\r\n\r\n            if(Meta.graphics.mesh.id === selected.id){\r\n\r\n              const data = {\r\n                position: MetaPosition\r\n              };\r\n\r\n              Meta.go('touch', data);\r\n\r\n            }\r\n\r\n          });\r\n\r\n       }\r\n\r\n     }\r\n\r\n      /*\r\n        Check for any in intersections with Meta\r\n      */\r\n      const intersects = raycaster.intersectObjects(scope.space.container.children);\r\n\r\n      //There ARE intersections with Meta\r\n      if(intersects.length>0){\r\n\r\n        log('Intersected Meta', name);\r\n\r\n        let position = intersects[0].point;\r\n\r\n        //Substract the container's position\r\n        position.z  = position.z+Math.abs(config.device.mobile.container.position.z);\r\n        position.y  = position.y+Math.abs(config.device.mobile.container.position.y);\r\n  \r\n        const data = {\r\n          position: position\r\n        };\r\n\r\n        scope.space.Meta.forEach(Meta => {\r\n\r\n          if(Meta.graphics.mesh.id === intersects[0].object.id){\r\n\r\n            //console.log(Meta.graphics.mesh.id+'-'+intersects[0].object.id)\r\n\r\n            Meta.go('point', data);  \r\n\r\n            if(!Meta._entered){\r\n              Meta.go('enter', data);      \r\n              Meta._entered = true;\r\n            }else{\r\n              Meta.go('leave', data);      \r\n              Meta._entered = false;\r\n            }\r\n\r\n          }\r\n\r\n        });\r\n\r\n      //NO intersections with Meta\r\n      }else{\r\n\r\n         //That means existing ones have to be cleared as well\r\n        scope.space.Meta.forEach(Meta => {\r\n\r\n            if(Meta._entered){\r\n              Meta.go('leave', data);      \r\n              Meta._entered = false;\r\n             }\r\n\r\n        });\r\n\r\n      }\r\n\r\n    };\r\n\r\n    onMouseUp   = (event) => {\r\n\r\n      prepare(event);\r\n\r\n      /*\r\n        Space\r\n      */\r\n      if(globePlane){\r\n        scope.space.container.remove(globePlane);\r\n        globePlane = false;\r\n      }\r\n\r\n      //First of all,\r\n      //we're always 'reaching into space'.\r\n      //So, set up a raycaste for the globe.\r\n      raycaster.setFromCamera(mouse, space.camera);\r\n\r\n      //Check for intersections on globe\r\n      const _intersectsGlobe = raycaster.intersectObjects(scope.space.camera.children);\r\n\r\n      //Any objects hit?\r\n      if(_intersectsGlobe.length>0){\r\n\r\n        log('Intersected globe (onMouseDown)', name)\r\n\r\n         selectedGlobe  = _intersectsGlobe[0].object;\r\n         let point      = _intersectsGlobe[0].point;\r\n\r\n        point.z  = point.z+Math.abs(config.device.mobile.container.position.z);\r\n        point.y  = point.y+Math.abs(config.device.mobile.container.position.y);\r\n\r\n        //if(selectedGlobe.name==='globe'){\r\n          const data = {\r\n            position : point\r\n          };\r\n          scope.space.go('release', data);\r\n        //}\r\n\r\n      }\r\n\r\n      /*\r\n        Meta\r\n      */\r\n\r\n      if (selected) {\r\n\r\n        scope.space.container.remove(plane);\r\n        plane = null;\r\n\r\n        space.Meta.find(Meta => {\r\n          if(Meta.graphics.mesh.id === selected.id){\r\n          const data = {\r\n            position: MetaPosition\r\n          };\r\n            Meta.go('release', data);\r\n          }\r\n        });\r\n\r\n        selected = null;\r\n\r\n      }else{\r\n\r\n      }\r\n\r\n    };\r\n\r\n    this.init();\r\n\r\n    return this;\r\n  }\r\n\r\n  init(){\r\n\r\n    document.addEventListener( 'keydown', onKeyDown, false );\r\n    document.addEventListener( 'keyup', onKeyUp, false );\r\n\r\n    addEventListener( 'touchmove', onMouseMove, false );\r\n    addEventListener( 'touchstart', onMouseDown, false );\r\n    addEventListener( 'touchend', onMouseUp, false );\r\n\r\n  }\r\n\r\n  deactivate(){\r\n\r\n    document.removeEventListener( 'keydown', onKeyDown, false );\r\n    document.removeEventListener( 'keyup', onKeyUp, false );\r\n\r\n    removeEventListener( 'ontouchmove', onMouseMove, false );\r\n    removeEventListener( 'ontouchstart', onMouseDown, false );\r\n    removeEventListener( 'ontouchend', onMouseUp, false );\r\n\r\n  }\r\n\r\n  render(space){\r\n\r\n  }\r\n\r\n}\r\n","import {Object3D, Matrix4} from 'three';\r\n\r\n//TODO: Import this directly from THREE!!!\r\nexport function ViveController ( id ) {\r\n\r\n\tObject3D.call( this );\r\n\r\n\tvar scope = this;\r\n\tvar gamepad;\r\n\r\n\tvar axes = [ 0, 0 ];\r\n\tvar thumbpadIsPressed = false;\r\n\tvar triggerIsPressed = false;\r\n\tvar gripsArePressed = false;\r\n\tvar menuIsPressed = false;\r\n\r\n\tfunction findGamepad( id ) {\r\n\r\n\t\t// Iterate across gamepads as Vive Controllers may not be\r\n\t\t// in position 0 and 1.\r\n\r\n\t\tvar gamepads = navigator.getGamepads && navigator.getGamepads();\r\n\r\n\t\tfor ( var i = 0, j = 0; i < gamepads.length; i ++ ) {\r\n\r\n\t\t\tvar gamepad = gamepads[ i ];\r\n\r\n\t\t\tif ( gamepad && ( gamepad.id === 'OpenVR Gamepad' || gamepad.id.startsWith( 'Oculus Touch' ) || gamepad.id.startsWith( 'Spatial Controller' ) ) ) {\r\n\r\n\t\t\t\tif ( j === id ) return gamepad;\r\n\r\n\t\t\t\tj ++;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tthis.matrixAutoUpdate = false;\r\n\tthis.standingMatrix = new Matrix4();\r\n\r\n\tthis.getGamepad = function () {\r\n\r\n\t\treturn gamepad;\r\n\r\n\t};\r\n\r\n\tthis.getButtonState = function ( button ) {\r\n\r\n\t\tif ( button === 'thumbpad' ) return thumbpadIsPressed;\r\n\t\tif ( button === 'trigger' ) return triggerIsPressed;\r\n\t\tif ( button === 'grips' ) return gripsArePressed;\r\n\t\tif ( button === 'menu' ) return menuIsPressed;\r\n\r\n\t};\r\n\r\n\tthis.update = function () {\r\n\r\n\t\tgamepad = findGamepad( id );\r\n\r\n\t\tif ( gamepad !== undefined && gamepad.pose !== undefined ) {\r\n\r\n\t\t\tif ( gamepad.pose === null ) return; // No user action yet\r\n\r\n\t\t\t//  Position and orientation.\r\n\r\n\t\t\tvar pose = gamepad.pose;\r\n\r\n\t\t\tif ( pose.position !== null ) scope.position.fromArray( pose.position );\r\n\t\t\tif ( pose.orientation !== null ) scope.quaternion.fromArray( pose.orientation );\r\n\t\t\tscope.matrix.compose( scope.position, scope.quaternion, scope.scale );\r\n\t\t\tscope.matrix.premultiply( scope.standingMatrix );\t\r\n\t\t\tscope.matrixWorldNeedsUpdate = true;\r\n\t\t\tscope.visible = true;\r\n\r\n\t\t\t//  Thumbpad and Buttons.\r\n\r\n\t\t\tif ( axes[ 0 ] !== gamepad.axes[ 0 ] || axes[ 1 ] !== gamepad.axes[ 1 ] ) {\r\n\r\n\t\t\t\taxes[ 0 ] = gamepad.axes[ 0 ]; //  X axis: -1 = Left, +1 = Right.\r\n\t\t\t\taxes[ 1 ] = gamepad.axes[ 1 ]; //  Y axis: -1 = Bottom, +1 = Top.\r\n\t\t\t\tscope.dispatchEvent( { type: 'axischanged', axes: axes } );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( thumbpadIsPressed !== gamepad.buttons[ 0 ].pressed ) {\r\n\r\n\t\t\t\tthumbpadIsPressed = gamepad.buttons[ 0 ].pressed;\r\n\t\t\t\tscope.dispatchEvent( { type: thumbpadIsPressed ? 'thumbpaddown' : 'thumbpadup', axes: axes } );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( triggerIsPressed !== gamepad.buttons[ 1 ].pressed ) {\r\n\r\n\t\t\t\ttriggerIsPressed = gamepad.buttons[ 1 ].pressed;\r\n\t\t\t\tscope.dispatchEvent( { type: triggerIsPressed ? 'triggerdown' : 'triggerup' } );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( gripsArePressed !== gamepad.buttons[ 2 ].pressed ) {\r\n\r\n\t\t\t\tgripsArePressed = gamepad.buttons[ 2 ].pressed;\r\n\t\t\t\tscope.dispatchEvent( { type: gripsArePressed ? 'gripsdown' : 'gripsup' } );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( menuIsPressed !== gamepad.buttons[ 3 ].pressed ) {\r\n\r\n\t\t\t\tmenuIsPressed = gamepad.buttons[ 3 ].pressed;\r\n\t\t\t\tscope.dispatchEvent( { type: menuIsPressed ? 'menudown' : 'menuup' } );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tscope.visible = false;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n};\r\n\r\nViveController.prototype = Object.create( Object3D.prototype );\r\nViveController.prototype.constructor = ViveController;","import {DefaultLoadingManager,\r\n        FileLoader,\r\n        Group,\r\n        BufferGeometry,\r\n        BufferAttribute,\r\n        LineBasicMaterial,\r\n        LineSegments,\r\n        MeshPhongMaterial,\r\n        SmoothShading,\r\n        FlatShading,\r\n        MultiMaterial,\r\n        Mesh\r\n        } from 'three';\r\n\r\nlet scope;\r\n\r\nfunction defaultOnError(err) {\r\n    throw new Error(err);\r\n}\r\n\r\nexport default class OBJLoader {\r\n\r\n    constructor(manager){\r\n\r\n        scope = this;\r\n\r\n        this.manager = (manager !== undefined) ? manager : DefaultLoadingManager;\r\n        \r\n        this.materials = null;\r\n    \r\n        this.regexp = {\r\n            // v float float float\r\n            vertex_pattern: /^v\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\r\n            // vn float float float\r\n            normal_pattern: /^vn\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\r\n            // vt float float\r\n            uv_pattern: /^vt\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\r\n            // f vertex vertex vertex\r\n            face_vertex: /^f\\s+(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)(?:\\s+(-?\\d+))?/,\r\n            // f vertex/uv vertex/uv vertex/uv\r\n            face_vertex_uv: /^f\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+))?/,\r\n            // f vertex/uv/normal vertex/uv/normal vertex/uv/normal\r\n            face_vertex_uv_normal: /^f\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+))?/,\r\n            // f vertex//normal vertex//normal vertex//normal\r\n            face_vertex_normal: /^f\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)(?:\\s+(-?\\d+)\\/\\/(-?\\d+))?/,\r\n            // o object_name | g group_name\r\n            object_pattern: /^[og]\\s*(.+)?/,\r\n            // s boolean\r\n            smoothing_pattern: /^s\\s+(\\d+|on|off)/,\r\n            // mtllib file_reference\r\n            material_library_pattern: /^mtllib /,\r\n            // usemtl material_name\r\n            material_use_pattern: /^usemtl /\r\n        };\r\n    }\r\n\r\n\r\n    load(url, onLoad, onProgress, onError) {\r\n\r\n        this.onError = onError || defaultOnError;\r\n\r\n        var loader = new FileLoader(scope.manager);\r\n        loader.setPath(this.path);\r\n        loader.load(url, function (text) {\r\n\r\n        onLoad(scope.parse(text));\r\n\r\n        }, onProgress, onError);\r\n\r\n    }\r\n    \r\n    setPath(value) {\r\n\r\n        this.path = value;\r\n\r\n    }\r\n    \r\n    setMaterials(materials) {\r\n\r\n        this.materials = materials;\r\n\r\n    }\r\n    \r\n    _createParserState() {\r\n\r\n        var state = {\r\n        objects: [],\r\n        object: {},\r\n\r\n        vertices: [],\r\n        normals: [],\r\n        uvs: [],\r\n\r\n        materialLibraries: [],\r\n\r\n        startObject: function (name, fromDeclaration) {\r\n\r\n            // If the current object (initial from reset) is not from a g/o declaration in the parsed\r\n            // file. We need to use it for the first parsed g/o to keep things in sync.\r\n            if (this.object && this.object.fromDeclaration === false) {\r\n\r\n            this.object.name = name;\r\n            this.object.fromDeclaration = (fromDeclaration !== false);\r\n            return;\r\n\r\n            }\r\n\r\n            var previousMaterial = (this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined);\r\n\r\n            if (this.object && typeof this.object._finalize === 'function') {\r\n\r\n            this.object._finalize(true);\r\n\r\n            }\r\n\r\n            this.object = {\r\n            name: name || '',\r\n            fromDeclaration: (fromDeclaration !== false),\r\n\r\n            geometry: {\r\n                vertices: [],\r\n                normals: [],\r\n                uvs: []\r\n            },\r\n            materials: [],\r\n            smooth: true,\r\n\r\n            startMaterial: function (name, libraries) {\r\n\r\n                var previous = this._finalize(false);\r\n\r\n                // New usemtl declaration overwrites an inherited material, except if faces were declared\r\n                // after the material, then it must be preserved for proper MultiMaterial continuation.\r\n                if (previous && (previous.inherited || previous.groupCount <= 0)) {\r\n\r\n                this.materials.splice(previous.index, 1);\r\n\r\n                }\r\n\r\n                var material = {\r\n                index: this.materials.length,\r\n                name: name || '',\r\n                mtllib: (Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : ''),\r\n                smooth: (previous !== undefined ? previous.smooth : this.smooth),\r\n                groupStart: (previous !== undefined ? previous.groupEnd : 0),\r\n                groupEnd: -1,\r\n                groupCount: -1,\r\n                inherited: false,\r\n\r\n                clone: function (index) {\r\n                    var cloned = {\r\n                    index: (typeof index === 'number' ? index : this.index),\r\n                    name: this.name,\r\n                    mtllib: this.mtllib,\r\n                    smooth: this.smooth,\r\n                    groupStart: 0,\r\n                    groupEnd: -1,\r\n                    groupCount: -1,\r\n                    inherited: false\r\n                    };\r\n                    cloned.clone = this.clone.bind(cloned);\r\n                    return cloned;\r\n                }\r\n                };\r\n\r\n                this.materials.push(material);\r\n\r\n                return material;\r\n\r\n            },\r\n\r\n            currentMaterial: function () {\r\n\r\n                if (this.materials.length > 0) {\r\n                return this.materials[this.materials.length - 1];\r\n                }\r\n\r\n                return undefined;\r\n\r\n            },\r\n\r\n            _finalize: function (end) {\r\n\r\n                var lastMultiMaterial = this.currentMaterial();\r\n                if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\r\n\r\n                lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\r\n                lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\r\n                lastMultiMaterial.inherited = false;\r\n\r\n                }\r\n\r\n                // Ignore objects tail materials if no face declarations followed them before a new o/g started.\r\n                if (end && this.materials.length > 1) {\r\n\r\n                for (var mi = this.materials.length - 1; mi >= 0; mi--) {\r\n                    if (this.materials[mi].groupCount <= 0) {\r\n                    this.materials.splice(mi, 1);\r\n                    }\r\n                }\r\n\r\n                }\r\n\r\n                // Guarantee at least one empty material, this makes the creation later more straight forward.\r\n                if (end && this.materials.length === 0) {\r\n\r\n                this.materials.push({\r\n                    name: '',\r\n                    smooth: this.smooth\r\n                });\r\n\r\n                }\r\n\r\n                return lastMultiMaterial;\r\n\r\n            }\r\n            };\r\n\r\n            // Inherit previous objects material.\r\n            // Spec tells us that a declared material must be set to all objects until a new material is declared.\r\n            // If a usemtl declaration is encountered while this new object is being parsed, it will\r\n            // overwrite the inherited material. Exception being that there was already face declarations\r\n            // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\r\n\r\n            if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === \"function\") {\r\n\r\n            var declared = previousMaterial.clone(0);\r\n            declared.inherited = true;\r\n            this.object.materials.push(declared);\r\n\r\n            }\r\n\r\n            this.objects.push(this.object);\r\n\r\n        },\r\n\r\n        finalize: function () {\r\n\r\n            if (this.object && typeof this.object._finalize === 'function') {\r\n\r\n            this.object._finalize(true);\r\n\r\n            }\r\n\r\n        },\r\n\r\n        parseVertexIndex: function (value, len) {\r\n\r\n            var index = parseInt(value, 10);\r\n            return (index >= 0 ? index - 1 : index + len / 3) * 3;\r\n\r\n        },\r\n\r\n        parseNormalIndex: function (value, len) {\r\n\r\n            var index = parseInt(value, 10);\r\n            return (index >= 0 ? index - 1 : index + len / 3) * 3;\r\n\r\n        },\r\n\r\n        parseUVIndex: function (value, len) {\r\n\r\n            var index = parseInt(value, 10);\r\n            return (index >= 0 ? index - 1 : index + len / 2) * 2;\r\n\r\n        },\r\n\r\n        addVertex: function (a, b, c) {\r\n\r\n            var src = this.vertices;\r\n            var dst = this.object.geometry.vertices;\r\n\r\n            dst.push(src[a + 0]);\r\n            dst.push(src[a + 1]);\r\n            dst.push(src[a + 2]);\r\n            dst.push(src[b + 0]);\r\n            dst.push(src[b + 1]);\r\n            dst.push(src[b + 2]);\r\n            dst.push(src[c + 0]);\r\n            dst.push(src[c + 1]);\r\n            dst.push(src[c + 2]);\r\n\r\n        },\r\n\r\n        addVertexLine: function (a) {\r\n\r\n            var src = this.vertices;\r\n            var dst = this.object.geometry.vertices;\r\n\r\n            dst.push(src[a + 0]);\r\n            dst.push(src[a + 1]);\r\n            dst.push(src[a + 2]);\r\n\r\n        },\r\n\r\n        addNormal: function (a, b, c) {\r\n\r\n            var src = this.normals;\r\n            var dst = this.object.geometry.normals;\r\n\r\n            dst.push(src[a + 0]);\r\n            dst.push(src[a + 1]);\r\n            dst.push(src[a + 2]);\r\n            dst.push(src[b + 0]);\r\n            dst.push(src[b + 1]);\r\n            dst.push(src[b + 2]);\r\n            dst.push(src[c + 0]);\r\n            dst.push(src[c + 1]);\r\n            dst.push(src[c + 2]);\r\n\r\n        },\r\n\r\n        addUV: function (a, b, c) {\r\n\r\n            var src = this.uvs;\r\n            var dst = this.object.geometry.uvs;\r\n\r\n            dst.push(src[a + 0]);\r\n            dst.push(src[a + 1]);\r\n            dst.push(src[b + 0]);\r\n            dst.push(src[b + 1]);\r\n            dst.push(src[c + 0]);\r\n            dst.push(src[c + 1]);\r\n\r\n        },\r\n\r\n        addUVLine: function (a) {\r\n\r\n            var src = this.uvs;\r\n            var dst = this.object.geometry.uvs;\r\n\r\n            dst.push(src[a + 0]);\r\n            dst.push(src[a + 1]);\r\n\r\n        },\r\n\r\n        addFace: function (a, b, c, d, ua, ub, uc, ud, na, nb, nc, nd) {\r\n\r\n            var vLen = this.vertices.length;\r\n\r\n            var ia = this.parseVertexIndex(a, vLen);\r\n            var ib = this.parseVertexIndex(b, vLen);\r\n            var ic = this.parseVertexIndex(c, vLen);\r\n            var id;\r\n\r\n            if (d === undefined) {\r\n\r\n            this.addVertex(ia, ib, ic);\r\n\r\n            } else {\r\n\r\n            id = this.parseVertexIndex(d, vLen);\r\n\r\n            this.addVertex(ia, ib, id);\r\n            this.addVertex(ib, ic, id);\r\n\r\n            }\r\n\r\n            if (ua !== undefined) {\r\n\r\n            var uvLen = this.uvs.length;\r\n\r\n            ia = this.parseUVIndex(ua, uvLen);\r\n            ib = this.parseUVIndex(ub, uvLen);\r\n            ic = this.parseUVIndex(uc, uvLen);\r\n\r\n            if (d === undefined) {\r\n\r\n                this.addUV(ia, ib, ic);\r\n\r\n            } else {\r\n\r\n                id = this.parseUVIndex(ud, uvLen);\r\n\r\n                this.addUV(ia, ib, id);\r\n                this.addUV(ib, ic, id);\r\n\r\n            }\r\n\r\n            }\r\n\r\n            if (na !== undefined) {\r\n\r\n            // Normals are many times the same. If so, skip function call and parseInt.\r\n            var nLen = this.normals.length;\r\n            ia = this.parseNormalIndex(na, nLen);\r\n\r\n            ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\r\n            ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\r\n\r\n            if (d === undefined) {\r\n\r\n                this.addNormal(ia, ib, ic);\r\n\r\n            } else {\r\n\r\n                id = this.parseNormalIndex(nd, nLen);\r\n\r\n                this.addNormal(ia, ib, id);\r\n                this.addNormal(ib, ic, id);\r\n\r\n            }\r\n\r\n            }\r\n\r\n        },\r\n\r\n        addLineGeometry: function (vertices, uvs) {\r\n\r\n            this.object.geometry.type = 'Line';\r\n\r\n            var vLen = this.vertices.length;\r\n            var uvLen = this.uvs.length;\r\n\r\n            for (var vi = 0, l = vertices.length; vi < l; vi++) {\r\n\r\n            this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen));\r\n\r\n            }\r\n\r\n            for (var uvi = 0, l = uvs.length; uvi < l; uvi++) {\r\n\r\n            this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen));\r\n\r\n            }\r\n\r\n        }\r\n\r\n        };\r\n\r\n        state.startObject('', false);\r\n\r\n        return state;\r\n\r\n    }\r\n    \r\n    parse(text, debug) {\r\n\r\n        if (typeof(debug) === 'undefined') {\r\n        debug = true;\r\n        }\r\n\r\n        if (debug) {\r\n        console.time('OBJLoader');\r\n        }\r\n\r\n        var state = this._createParserState();\r\n\r\n        if (text.indexOf('\\r\\n') !== - 1) {\r\n\r\n        // This is faster than String.split with regex that splits on both\r\n        text = text.replace(/\\r\\n/g, '\\n');\r\n\r\n        }\r\n\r\n        if (text.indexOf('\\\\\\n') !== - 1) {\r\n\r\n        // join lines separated by a line continuation character (\\)\r\n        text = text.replace(/\\\\\\n/g, '');\r\n\r\n        }\r\n\r\n        var lines = text.split('\\n');\r\n        var line = '', lineFirstChar = '', lineSecondChar = '';\r\n        var lineLength = 0;\r\n        var result = [];\r\n\r\n        // Faster to just trim left side of the line. Use if available.\r\n        var trimLeft = (typeof ''.trimLeft === 'function');\r\n\r\n        for (var i = 0, l = lines.length; i < l; i++) {\r\n\r\n        line = lines[i];\r\n\r\n        line = trimLeft ? line.trimLeft() : line.trim();\r\n\r\n        lineLength = line.length;\r\n\r\n        if (lineLength === 0) continue;\r\n\r\n        lineFirstChar = line.charAt(0);\r\n\r\n        // @todo invoke passed in handler if any\r\n        if (lineFirstChar === '#') continue;\r\n\r\n        if (lineFirstChar === 'v') {\r\n\r\n            lineSecondChar = line.charAt(1);\r\n\r\n            if (lineSecondChar === ' ' && (result = this.regexp.vertex_pattern.exec(line)) !== null) {\r\n\r\n            // 0                  1      2      3\r\n            // [\"v 1.0 2.0 3.0\", \"1.0\", \"2.0\", \"3.0\"]\r\n\r\n            state.vertices.push(\r\n                parseFloat(result[1]),\r\n                parseFloat(result[2]),\r\n                parseFloat(result[3])\r\n            );\r\n\r\n            } else if (lineSecondChar === 'n' && (result = this.regexp.normal_pattern.exec(line)) !== null) {\r\n\r\n            // 0                   1      2      3\r\n            // [\"vn 1.0 2.0 3.0\", \"1.0\", \"2.0\", \"3.0\"]\r\n\r\n            state.normals.push(\r\n                parseFloat(result[1]),\r\n                parseFloat(result[2]),\r\n                parseFloat(result[3])\r\n            );\r\n\r\n            } else if (lineSecondChar === 't' && (result = this.regexp.uv_pattern.exec(line)) !== null) {\r\n\r\n            // 0               1      2\r\n            // [\"vt 0.1 0.2\", \"0.1\", \"0.2\"]\r\n\r\n            state.uvs.push(\r\n                parseFloat(result[1]),\r\n                parseFloat(result[2])\r\n            );\r\n\r\n            } else {\r\n\r\n            this.onError(\"Unexpected vertex/normal/uv line: '\" + line + \"'\");\r\n\r\n            }\r\n\r\n        } else if (lineFirstChar === \"f\") {\r\n\r\n            if ((result = this.regexp.face_vertex_uv_normal.exec(line)) !== null) {\r\n\r\n            // f vertex/uv/normal vertex/uv/normal vertex/uv/normal\r\n            // 0                        1    2    3    4    5    6    7    8    9   10         11         12\r\n            // [\"f 1/1/1 2/2/2 3/3/3\", \"1\", \"1\", \"1\", \"2\", \"2\", \"2\", \"3\", \"3\", \"3\", undefined, undefined, undefined]\r\n\r\n            state.addFace(\r\n                result[1], result[4], result[7], result[10],\r\n                result[2], result[5], result[8], result[11],\r\n                result[3], result[6], result[9], result[12]\r\n            );\r\n\r\n            } else if ((result = this.regexp.face_vertex_uv.exec(line)) !== null) {\r\n\r\n            // f vertex/uv vertex/uv vertex/uv\r\n            // 0                  1    2    3    4    5    6   7          8\r\n            // [\"f 1/1 2/2 3/3\", \"1\", \"1\", \"2\", \"2\", \"3\", \"3\", undefined, undefined]\r\n\r\n            state.addFace(\r\n                result[1], result[3], result[5], result[7],\r\n                result[2], result[4], result[6], result[8]\r\n            );\r\n\r\n            } else if ((result = this.regexp.face_vertex_normal.exec(line)) !== null) {\r\n\r\n            // f vertex//normal vertex//normal vertex//normal\r\n            // 0                     1    2    3    4    5    6   7          8\r\n            // [\"f 1//1 2//2 3//3\", \"1\", \"1\", \"2\", \"2\", \"3\", \"3\", undefined, undefined]\r\n\r\n            state.addFace(\r\n                result[1], result[3], result[5], result[7],\r\n                undefined, undefined, undefined, undefined,\r\n                result[2], result[4], result[6], result[8]\r\n            );\r\n\r\n            } else if ((result = this.regexp.face_vertex.exec(line)) !== null) {\r\n\r\n            // f vertex vertex vertex\r\n            // 0            1    2    3   4\r\n            // [\"f 1 2 3\", \"1\", \"2\", \"3\", undefined]\r\n\r\n            state.addFace(\r\n                result[1], result[2], result[3], result[4]\r\n            );\r\n\r\n            } else {\r\n\r\n            this.onError(\"Unexpected face line: '\" + line + \"'\");\r\n\r\n            }\r\n\r\n        } else if (lineFirstChar === \"l\") {\r\n\r\n            var lineParts = line.substring(1).trim().split(\" \");\r\n            var lineVertices = [], lineUVs = [];\r\n\r\n            if (line.indexOf(\"/\") === - 1) {\r\n\r\n            lineVertices = lineParts;\r\n\r\n            } else {\r\n\r\n            for (var li = 0, llen = lineParts.length; li < llen; li++) {\r\n\r\n                var parts = lineParts[li].split(\"/\");\r\n\r\n                if (parts[0] !== \"\") lineVertices.push(parts[0]);\r\n                if (parts[1] !== \"\") lineUVs.push(parts[1]);\r\n\r\n            }\r\n\r\n            }\r\n            state.addLineGeometry(lineVertices, lineUVs);\r\n\r\n        } else if ((result = this.regexp.object_pattern.exec(line)) !== null) {\r\n\r\n            // o object_name\r\n            // or\r\n            // g group_name\r\n\r\n            // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\r\n            // var name = result[ 0 ].substr( 1 ).trim();\r\n            var name = (\" \" + result[0].substr(1).trim()).substr(1);\r\n\r\n            state.startObject(name);\r\n\r\n        } else if (this.regexp.material_use_pattern.test(line)) {\r\n\r\n            // material\r\n\r\n            state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\r\n\r\n        } else if (this.regexp.material_library_pattern.test(line)) {\r\n\r\n            // mtl file\r\n\r\n            state.materialLibraries.push(line.substring(7).trim());\r\n\r\n        } else if ((result = this.regexp.smoothing_pattern.exec(line)) !== null) {\r\n\r\n            // smooth shading\r\n\r\n            // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\r\n            // but does not define a usemtl for each face set.\r\n            // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\r\n            // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\r\n            // where explicit usemtl defines geometry groups.\r\n            // Example asset: examples/models/obj/cerberus/Cerberus.obj\r\n\r\n            var value = result[1].trim().toLowerCase();\r\n            state.object.smooth = (value === '1' || value === 'on');\r\n\r\n            var material = state.object.currentMaterial();\r\n            if (material) {\r\n\r\n            material.smooth = state.object.smooth;\r\n\r\n            }\r\n\r\n        } else {\r\n\r\n            // Handle null terminated files without exception\r\n            if (line === '\\0') continue;\r\n\r\n            this.onError(\"Unexpected line: '\" + line + \"'\");\r\n\r\n        }\r\n\r\n        }\r\n\r\n        state.finalize();\r\n\r\n        var container = new Group();\r\n        container.materialLibraries = [].concat(state.materialLibraries);\r\n\r\n        for (var i = 0, l = state.objects.length; i < l; i++) {\r\n\r\n        var object = state.objects[i];\r\n        var geometry = object.geometry;\r\n        var materials = object.materials;\r\n        var isLine = (geometry.type === 'Line');\r\n\r\n        // Skip o/g line declarations that did not follow with any faces\r\n        if (geometry.vertices.length === 0) continue;\r\n\r\n        var buffergeometry = new BufferGeometry();\r\n\r\n        buffergeometry.addAttribute('position', new BufferAttribute(new Float32Array(geometry.vertices), 3));\r\n\r\n        if (geometry.normals.length > 0) {\r\n\r\n            buffergeometry.addAttribute('normal', new BufferAttribute(new Float32Array(geometry.normals), 3));\r\n\r\n        } else {\r\n\r\n            buffergeometry.computeVertexNormals();\r\n\r\n        }\r\n\r\n        if (geometry.uvs.length > 0) {\r\n\r\n            buffergeometry.addAttribute('uv', new BufferAttribute(new Float32Array(geometry.uvs), 2));\r\n\r\n        }\r\n\r\n        // Create materials\r\n\r\n        var createdMaterials = [];\r\n\r\n        for (var mi = 0, miLen = materials.length; mi < miLen; mi++) {\r\n\r\n            var sourceMaterial = materials[mi];\r\n            var material = undefined;\r\n\r\n            if (this.materials !== null) {\r\n\r\n            material = this.materials.create(sourceMaterial.name);\r\n\r\n            // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\r\n            if (isLine && material && !(material instanceof LineBasicMaterial)) {\r\n\r\n                var materialLine = new LineBasicMaterial();\r\n                materialLine.copy(material);\r\n                material = materialLine;\r\n\r\n            }\r\n\r\n            }\r\n\r\n            if (!material) {\r\n\r\n            material = (!isLine ? new MeshPhongMaterial() : new LineBasicMaterial());\r\n            material.name = sourceMaterial.name;\r\n\r\n            }\r\n\r\n            material.shading = sourceMaterial.smooth ? SmoothShading : FlatShading;\r\n\r\n            createdMaterials.push(material);\r\n\r\n        }\r\n\r\n        // Create mesh\r\n\r\n        var mesh;\r\n\r\n        if (createdMaterials.length > 1) {\r\n\r\n            for (var mi = 0, miLen = materials.length; mi < miLen; mi++) {\r\n\r\n            var sourceMaterial = materials[mi];\r\n            buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi);\r\n\r\n            }\r\n\r\n            var multiMaterial = new MultiMaterial(createdMaterials);\r\n            mesh = (!isLine ? new Mesh(buffergeometry, multiMaterial) : new LineSegments(buffergeometry, multiMaterial));\r\n\r\n        } else {\r\n\r\n            mesh = (!isLine ? new Mesh(buffergeometry, createdMaterials[0]) : new LineSegments(buffergeometry, createdMaterials[0]));\r\n        }\r\n\r\n        mesh.name = object.name;\r\n\r\n        container.add(mesh);\r\n\r\n        }\r\n\r\n        if (debug) {\r\n        console.timeEnd('OBJLoader');\r\n        }\r\n\r\n        return container;\r\n\r\n    }\r\n    \r\n};","import * as THREE from 'three'\r\n\r\n/**\r\n * @author Rich Tibbett / https://github.com/richtr\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author Tony Parisi / http://www.tonyparisi.com/\r\n * @author Takahiro / https://github.com/takahirox\r\n * @author Don McCurdy / https://www.donmccurdy.com\r\n */\r\n\r\n console.log('hello')\r\n\r\nTHREE.GLTFLoader = ( function () {\r\n\r\n\tfunction GLTFLoader( manager ) {\r\n\r\n\t\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\t\tthis.dracoLoader = null;\r\n\r\n\t}\r\n\r\n\tGLTFLoader.prototype = {\r\n\r\n\t\tconstructor: GLTFLoader,\r\n\r\n\t\tcrossOrigin: 'anonymous',\r\n\r\n\t\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\t\tvar scope = this;\r\n\r\n\t\t\tvar path = this.path !== undefined ? this.path : THREE.LoaderUtils.extractUrlBase( url );\r\n\r\n\t\t\tvar loader = new THREE.FileLoader( scope.manager );\r\n\r\n\t\t\tloader.setResponseType( 'arraybuffer' );\r\n\r\n\t\t\tloader.load( url, function ( data ) {\r\n\r\n\t\t\t\ttry {\r\n\r\n\t\t\t\t\tscope.parse( data, path, onLoad, onError );\r\n\r\n\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\tif ( onError !== undefined ) {\r\n\r\n\t\t\t\t\t\tonError( e );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tthrow e;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}, onProgress, onError );\r\n\r\n\t\t},\r\n\r\n\t\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\t\tthis.crossOrigin = value;\r\n\t\t\treturn this;\r\n\r\n\t\t},\r\n\r\n\t\tsetPath: function ( value ) {\r\n\r\n\t\t\tthis.path = value;\r\n\t\t\treturn this;\r\n\r\n\t\t},\r\n\r\n\t\tsetDRACOLoader: function ( dracoLoader ) {\r\n\r\n\t\t\tthis.dracoLoader = dracoLoader;\r\n\t\t\treturn this;\r\n\r\n\t\t},\r\n\r\n\t\tparse: function ( data, path, onLoad, onError ) {\r\n\r\n\t\t\tvar content;\r\n\t\t\tvar extensions = {};\r\n\r\n\t\t\tif ( typeof data === 'string' ) {\r\n\r\n\t\t\t\tcontent = data;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar magic = THREE.LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\r\n\r\n\t\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\r\n\r\n\t\t\t\t\ttry {\r\n\r\n\t\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\r\n\r\n\t\t\t\t\t} catch ( error ) {\r\n\r\n\t\t\t\t\t\tif ( onError ) onError( error );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tcontent = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar json = JSON.parse( content );\r\n\r\n\t\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\r\n\r\n\t\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.' ) );\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( json.extensionsUsed ) {\r\n\r\n\t\t\t\tfor ( var i = 0; i < json.extensionsUsed.length; ++ i ) {\r\n\r\n\t\t\t\t\tvar extensionName = json.extensionsUsed[ i ];\r\n\t\t\t\t\tvar extensionsRequired = json.extensionsRequired || [];\r\n\r\n\t\t\t\t\tswitch ( extensionName ) {\r\n\r\n\t\t\t\t\t\tcase EXTENSIONS.KHR_LIGHTS:\r\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFLightsExtension( json );\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\r\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension( json );\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\r\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\r\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase EXTENSIONS.MSFT_TEXTURE_DDS:\r\n\t\t\t\t\t\t\textensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] = new GLTFTextureDDSExtension();\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 ) {\r\n\r\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\r\n\r\n\t\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\tvar parser = new GLTFParser( json, extensions, {\r\n\r\n\t\t\t\tpath: path || this.path || '',\r\n\t\t\t\tcrossOrigin: this.crossOrigin,\r\n\t\t\t\tmanager: this.manager\r\n\r\n\t\t\t} );\r\n\r\n\t\t\tparser.parse( function ( scene, scenes, cameras, animations, json ) {\r\n\r\n\t\t\t\tvar glTF = {\r\n\t\t\t\t\tscene: scene,\r\n\t\t\t\t\tscenes: scenes,\r\n\t\t\t\t\tcameras: cameras,\r\n\t\t\t\t\tanimations: animations,\r\n\t\t\t\t\tasset: json.asset,\r\n\t\t\t\t\tparser: parser,\r\n\t\t\t\t\tuserData: {}\r\n\t\t\t\t};\r\n\r\n\t\t\t\taddUnknownExtensionsToUserData( extensions, glTF, json );\r\n\r\n\t\t\t\tonLoad( glTF );\r\n\r\n\t\t\t}, onError );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t/* GLTFREGISTRY */\r\n\r\n\tfunction GLTFRegistry() {\r\n\r\n\t\tvar objects = {};\r\n\r\n\t\treturn\t{\r\n\r\n\t\t\tget: function ( key ) {\r\n\r\n\t\t\t\treturn objects[ key ];\r\n\r\n\t\t\t},\r\n\r\n\t\t\tadd: function ( key, object ) {\r\n\r\n\t\t\t\tobjects[ key ] = object;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tremove: function ( key ) {\r\n\r\n\t\t\t\tdelete objects[ key ];\r\n\r\n\t\t\t},\r\n\r\n\t\t\tremoveAll: function () {\r\n\r\n\t\t\t\tobjects = {};\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}\r\n\r\n\t/*********************************/\r\n\t/********** EXTENSIONS ***********/\r\n\t/*********************************/\r\n\r\n\tvar EXTENSIONS = {\r\n\t\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\r\n\t\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\r\n\t\tKHR_LIGHTS: 'KHR_lights',\r\n\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\r\n\t\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\r\n\t\tMSFT_TEXTURE_DDS: 'MSFT_texture_dds'\r\n\t};\r\n\r\n\t/**\r\n\t * DDS Texture Extension\r\n\t *\r\n\t * Specification:\r\n\t * https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds\r\n\t *\r\n\t */\r\n\tfunction GLTFTextureDDSExtension() {\r\n\r\n\t\tif ( ! THREE.DDSLoader ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader' );\r\n\r\n\t\t}\r\n\r\n\t\tthis.name = EXTENSIONS.MSFT_TEXTURE_DDS;\r\n\t\tthis.ddsLoader = new THREE.DDSLoader();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Lights Extension\r\n\t *\r\n\t * Specification: PENDING\r\n\t */\r\n\tfunction GLTFLightsExtension( json ) {\r\n\r\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS;\r\n\r\n\t\tthis.lights = {};\r\n\r\n\t\tvar extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {};\r\n\t\tvar lights = extension.lights || {};\r\n\r\n\t\tfor ( var lightId in lights ) {\r\n\r\n\t\t\tvar light = lights[ lightId ];\r\n\t\t\tvar lightNode;\r\n\r\n\t\t\tvar color = new THREE.Color().fromArray( light.color );\r\n\r\n\t\t\tswitch ( light.type ) {\r\n\r\n\t\t\t\tcase 'directional':\r\n\t\t\t\t\tlightNode = new THREE.DirectionalLight( color );\r\n\t\t\t\t\tlightNode.target.position.set( 0, 0, 1 );\r\n\t\t\t\t\tlightNode.add( lightNode.target );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'point':\r\n\t\t\t\t\tlightNode = new THREE.PointLight( color );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'spot':\r\n\t\t\t\t\tlightNode = new THREE.SpotLight( color );\r\n\t\t\t\t\t// Handle spotlight properties.\r\n\t\t\t\t\tlight.spot = light.spot || {};\r\n\t\t\t\t\tlight.spot.innerConeAngle = light.spot.innerConeAngle !== undefined ? light.spot.innerConeAngle : 0;\r\n\t\t\t\t\tlight.spot.outerConeAngle = light.spot.outerConeAngle !== undefined ? light.spot.outerConeAngle : Math.PI / 4.0;\r\n\t\t\t\t\tlightNode.angle = light.spot.outerConeAngle;\r\n\t\t\t\t\tlightNode.penumbra = 1.0 - light.spot.innerConeAngle / light.spot.outerConeAngle;\r\n\t\t\t\t\tlightNode.target.position.set( 0, 0, 1 );\r\n\t\t\t\t\tlightNode.add( lightNode.target );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'ambient':\r\n\t\t\t\t\tlightNode = new THREE.AmbientLight( color );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( lightNode ) {\r\n\r\n\t\t\t\tlightNode.decay = 2;\r\n\r\n\t\t\t\tif ( light.intensity !== undefined ) {\r\n\r\n\t\t\t\t\tlightNode.intensity = light.intensity;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlightNode.name = light.name || ( 'light_' + lightId );\r\n\t\t\t\tthis.lights[ lightId ] = lightNode;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Unlit Materials Extension (pending)\r\n\t *\r\n\t * PR: https://github.com/KhronosGroup/glTF/pull/1163\r\n\t */\r\n\tfunction GLTFMaterialsUnlitExtension( json ) {\r\n\r\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\r\n\r\n\t}\r\n\r\n\tGLTFMaterialsUnlitExtension.prototype.getMaterialType = function ( material ) {\r\n\r\n\t\treturn THREE.MeshBasicMaterial;\r\n\r\n\t};\r\n\r\n\tGLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, material, parser ) {\r\n\r\n\t\tvar pending = [];\r\n\r\n\t\tmaterialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );\r\n\t\tmaterialParams.opacity = 1.0;\r\n\r\n\t\tvar metallicRoughness = material.pbrMetallicRoughness;\r\n\r\n\t\tif ( metallicRoughness ) {\r\n\r\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\r\n\r\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\r\n\r\n\t\t\t\tmaterialParams.color.fromArray( array );\r\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\r\n\r\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn Promise.all( pending );\r\n\r\n\t};\r\n\r\n\t/* BINARY EXTENSION */\r\n\r\n\tvar BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF';\r\n\tvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\r\n\tvar BINARY_EXTENSION_HEADER_LENGTH = 12;\r\n\tvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\r\n\r\n\tfunction GLTFBinaryExtension( data ) {\r\n\r\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\r\n\t\tthis.content = null;\r\n\t\tthis.body = null;\r\n\r\n\t\tvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\r\n\r\n\t\tthis.header = {\r\n\t\t\tmagic: THREE.LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\r\n\t\t\tversion: headerView.getUint32( 4, true ),\r\n\t\t\tlength: headerView.getUint32( 8, true )\r\n\t\t};\r\n\r\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\r\n\r\n\t\t} else if ( this.header.version < 2.0 ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.' );\r\n\r\n\t\t}\r\n\r\n\t\tvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\r\n\t\tvar chunkIndex = 0;\r\n\r\n\t\twhile ( chunkIndex < chunkView.byteLength ) {\r\n\r\n\t\t\tvar chunkLength = chunkView.getUint32( chunkIndex, true );\r\n\t\t\tchunkIndex += 4;\r\n\r\n\t\t\tvar chunkType = chunkView.getUint32( chunkIndex, true );\r\n\t\t\tchunkIndex += 4;\r\n\r\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\r\n\r\n\t\t\t\tvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\r\n\t\t\t\tthis.content = THREE.LoaderUtils.decodeText( contentArray );\r\n\r\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\r\n\r\n\t\t\t\tvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\r\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Clients must ignore chunks with unknown types.\r\n\r\n\t\t\tchunkIndex += chunkLength;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.content === null ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * DRACO Mesh Compression Extension\r\n\t *\r\n\t * Specification: https://github.com/KhronosGroup/glTF/pull/874\r\n\t */\r\n\tfunction GLTFDracoMeshCompressionExtension( json, dracoLoader ) {\r\n\r\n\t\tif ( ! dracoLoader ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\r\n\r\n\t\t}\r\n\r\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\r\n\t\tthis.json = json;\r\n\t\tthis.dracoLoader = dracoLoader;\r\n\r\n\t}\r\n\r\n\tGLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {\r\n\r\n\t\tvar json = this.json;\r\n\t\tvar dracoLoader = this.dracoLoader;\r\n\t\tvar bufferViewIndex = primitive.extensions[ this.name ].bufferView;\r\n\t\tvar gltfAttributeMap = primitive.extensions[ this.name ].attributes;\r\n\t\tvar threeAttributeMap = {};\r\n\t\tvar attributeNormalizedMap = {};\r\n\t\tvar attributeTypeMap = {};\r\n\r\n\t\tfor ( var attributeName in gltfAttributeMap ) {\r\n\r\n\t\t\tif ( ! ( attributeName in ATTRIBUTES ) ) continue;\r\n\r\n\t\t\tthreeAttributeMap[ ATTRIBUTES[ attributeName ] ] = gltfAttributeMap[ attributeName ];\r\n\r\n\t\t}\r\n\r\n\t\tfor ( attributeName in primitive.attributes ) {\r\n\r\n\t\t\tif ( ATTRIBUTES[ attributeName ] !== undefined && gltfAttributeMap[ attributeName ] !== undefined ) {\r\n\r\n\t\t\t\tvar accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\r\n\t\t\t\tvar componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\r\n\r\n\t\t\t\tattributeTypeMap[ ATTRIBUTES[ attributeName ] ] = componentType;\r\n\t\t\t\tattributeNormalizedMap[ ATTRIBUTES[ attributeName ] ] = accessorDef.normalized === true;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\r\n\r\n\t\t\treturn new Promise( function ( resolve ) {\r\n\r\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\r\n\r\n\t\t\t\t\tfor ( var attributeName in geometry.attributes ) {\r\n\r\n\t\t\t\t\t\tvar attribute = geometry.attributes[ attributeName ];\r\n\t\t\t\t\t\tvar normalized = attributeNormalizedMap[ attributeName ];\r\n\r\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresolve( geometry );\r\n\r\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\r\n\r\n\t\t\t} );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specular-Glossiness Extension\r\n\t *\r\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\r\n\t */\r\n\tfunction GLTFMaterialsPbrSpecularGlossinessExtension() {\r\n\r\n\t\treturn {\r\n\r\n\t\t\tname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,\r\n\r\n\t\t\tspecularGlossinessParams: [\r\n\t\t\t\t'color',\r\n\t\t\t\t'map',\r\n\t\t\t\t'lightMap',\r\n\t\t\t\t'lightMapIntensity',\r\n\t\t\t\t'aoMap',\r\n\t\t\t\t'aoMapIntensity',\r\n\t\t\t\t'emissive',\r\n\t\t\t\t'emissiveIntensity',\r\n\t\t\t\t'emissiveMap',\r\n\t\t\t\t'bumpMap',\r\n\t\t\t\t'bumpScale',\r\n\t\t\t\t'normalMap',\r\n\t\t\t\t'displacementMap',\r\n\t\t\t\t'displacementScale',\r\n\t\t\t\t'displacementBias',\r\n\t\t\t\t'specularMap',\r\n\t\t\t\t'specular',\r\n\t\t\t\t'glossinessMap',\r\n\t\t\t\t'glossiness',\r\n\t\t\t\t'alphaMap',\r\n\t\t\t\t'envMap',\r\n\t\t\t\t'envMapIntensity',\r\n\t\t\t\t'refractionRatio',\r\n\t\t\t],\r\n\r\n\t\t\tgetMaterialType: function () {\r\n\r\n\t\t\t\treturn THREE.ShaderMaterial;\r\n\r\n\t\t\t},\r\n\r\n\t\t\textendParams: function ( params, material, parser ) {\r\n\r\n\t\t\t\tvar pbrSpecularGlossiness = material.extensions[ this.name ];\r\n\r\n\t\t\t\tvar shader = THREE.ShaderLib[ 'standard' ];\r\n\r\n\t\t\t\tvar uniforms = THREE.UniformsUtils.clone( shader.uniforms );\r\n\r\n\t\t\t\tvar specularMapParsFragmentChunk = [\r\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\r\n\t\t\t\t\t'\tuniform sampler2D specularMap;',\r\n\t\t\t\t\t'#endif'\r\n\t\t\t\t].join( '\\n' );\r\n\r\n\t\t\t\tvar glossinessMapParsFragmentChunk = [\r\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\r\n\t\t\t\t\t'\tuniform sampler2D glossinessMap;',\r\n\t\t\t\t\t'#endif'\r\n\t\t\t\t].join( '\\n' );\r\n\r\n\t\t\t\tvar specularMapFragmentChunk = [\r\n\t\t\t\t\t'vec3 specularFactor = specular;',\r\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\r\n\t\t\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\r\n\t\t\t\t\t'\ttexelSpecular = sRGBToLinear( texelSpecular );',\r\n\t\t\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\r\n\t\t\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\r\n\t\t\t\t\t'#endif'\r\n\t\t\t\t].join( '\\n' );\r\n\r\n\t\t\t\tvar glossinessMapFragmentChunk = [\r\n\t\t\t\t\t'float glossinessFactor = glossiness;',\r\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\r\n\t\t\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\r\n\t\t\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\r\n\t\t\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\r\n\t\t\t\t\t'#endif'\r\n\t\t\t\t].join( '\\n' );\r\n\r\n\t\t\t\tvar lightPhysicalFragmentChunk = [\r\n\t\t\t\t\t'PhysicalMaterial material;',\r\n\t\t\t\t\t'material.diffuseColor = diffuseColor.rgb;',\r\n\t\t\t\t\t'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );',\r\n\t\t\t\t\t'material.specularColor = specularFactor.rgb;',\r\n\t\t\t\t].join( '\\n' );\r\n\r\n\t\t\t\tvar fragmentShader = shader.fragmentShader\r\n\t\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\r\n\t\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\r\n\t\t\t\t\t.replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )\r\n\t\t\t\t\t.replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )\r\n\t\t\t\t\t.replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )\r\n\t\t\t\t\t.replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )\r\n\t\t\t\t\t.replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );\r\n\r\n\t\t\t\tdelete uniforms.roughness;\r\n\t\t\t\tdelete uniforms.metalness;\r\n\t\t\t\tdelete uniforms.roughnessMap;\r\n\t\t\t\tdelete uniforms.metalnessMap;\r\n\r\n\t\t\t\tuniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) };\r\n\t\t\t\tuniforms.glossiness = { value: 0.5 };\r\n\t\t\t\tuniforms.specularMap = { value: null };\r\n\t\t\t\tuniforms.glossinessMap = { value: null };\r\n\r\n\t\t\t\tparams.vertexShader = shader.vertexShader;\r\n\t\t\t\tparams.fragmentShader = fragmentShader;\r\n\t\t\t\tparams.uniforms = uniforms;\r\n\t\t\t\tparams.defines = { 'STANDARD': '' };\r\n\r\n\t\t\t\tparams.color = new THREE.Color( 1.0, 1.0, 1.0 );\r\n\t\t\t\tparams.opacity = 1.0;\r\n\r\n\t\t\t\tvar pending = [];\r\n\r\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\r\n\r\n\t\t\t\t\tvar array = pbrSpecularGlossiness.diffuseFactor;\r\n\r\n\t\t\t\t\tparams.color.fromArray( array );\r\n\t\t\t\t\tparams.opacity = array[ 3 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\r\n\r\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'map', pbrSpecularGlossiness.diffuseTexture.index ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tparams.emissive = new THREE.Color( 0.0, 0.0, 0.0 );\r\n\t\t\t\tparams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\r\n\t\t\t\tparams.specular = new THREE.Color( 1.0, 1.0, 1.0 );\r\n\r\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\r\n\r\n\t\t\t\t\tparams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\r\n\r\n\t\t\t\t\tvar specGlossIndex = pbrSpecularGlossiness.specularGlossinessTexture.index;\r\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'glossinessMap', specGlossIndex ) );\r\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'specularMap', specGlossIndex ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn Promise.all( pending );\r\n\r\n\t\t\t},\r\n\r\n\t\t\tcreateMaterial: function ( params ) {\r\n\r\n\t\t\t\t// setup material properties based on MeshStandardMaterial for Specular-Glossiness\r\n\r\n\t\t\t\tvar material = new THREE.ShaderMaterial( {\r\n\t\t\t\t\tdefines: params.defines,\r\n\t\t\t\t\tvertexShader: params.vertexShader,\r\n\t\t\t\t\tfragmentShader: params.fragmentShader,\r\n\t\t\t\t\tuniforms: params.uniforms,\r\n\t\t\t\t\tfog: true,\r\n\t\t\t\t\tlights: true,\r\n\t\t\t\t\topacity: params.opacity,\r\n\t\t\t\t\ttransparent: params.transparent\r\n\t\t\t\t} );\r\n\r\n\t\t\t\tmaterial.isGLTFSpecularGlossinessMaterial = true;\r\n\r\n\t\t\t\tmaterial.color = params.color;\r\n\r\n\t\t\t\tmaterial.map = params.map === undefined ? null : params.map;\r\n\r\n\t\t\t\tmaterial.lightMap = null;\r\n\t\t\t\tmaterial.lightMapIntensity = 1.0;\r\n\r\n\t\t\t\tmaterial.aoMap = params.aoMap === undefined ? null : params.aoMap;\r\n\t\t\t\tmaterial.aoMapIntensity = 1.0;\r\n\r\n\t\t\t\tmaterial.emissive = params.emissive;\r\n\t\t\t\tmaterial.emissiveIntensity = 1.0;\r\n\t\t\t\tmaterial.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap;\r\n\r\n\t\t\t\tmaterial.bumpMap = params.bumpMap === undefined ? null : params.bumpMap;\r\n\t\t\t\tmaterial.bumpScale = 1;\r\n\r\n\t\t\t\tmaterial.normalMap = params.normalMap === undefined ? null : params.normalMap;\r\n\t\t\t\tif ( params.normalScale ) material.normalScale = params.normalScale;\r\n\r\n\t\t\t\tmaterial.displacementMap = null;\r\n\t\t\t\tmaterial.displacementScale = 1;\r\n\t\t\t\tmaterial.displacementBias = 0;\r\n\r\n\t\t\t\tmaterial.specularMap = params.specularMap === undefined ? null : params.specularMap;\r\n\t\t\t\tmaterial.specular = params.specular;\r\n\r\n\t\t\t\tmaterial.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap;\r\n\t\t\t\tmaterial.glossiness = params.glossiness;\r\n\r\n\t\t\t\tmaterial.alphaMap = null;\r\n\r\n\t\t\t\tmaterial.envMap = params.envMap === undefined ? null : params.envMap;\r\n\t\t\t\tmaterial.envMapIntensity = 1.0;\r\n\r\n\t\t\t\tmaterial.refractionRatio = 0.98;\r\n\r\n\t\t\t\tmaterial.extensions.derivatives = true;\r\n\r\n\t\t\t\treturn material;\r\n\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method can\r\n\t\t\t * copy only properties it knows about or inherits, and misses many properties that would\r\n\t\t\t * normally be defined by MeshStandardMaterial.\r\n\t\t\t *\r\n\t\t\t * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process of\r\n\t\t\t * loading a glTF model, but cloning later (e.g. by the user) would require these changes\r\n\t\t\t * AND also updating `.onBeforeRender` on the parent mesh.\r\n\t\t\t *\r\n\t\t\t * @param  {THREE.ShaderMaterial} source\r\n\t\t\t * @return {THREE.ShaderMaterial}\r\n\t\t\t */\r\n\t\t\tcloneMaterial: function ( source ) {\r\n\r\n\t\t\t\tvar target = source.clone();\r\n\r\n\t\t\t\ttarget.isGLTFSpecularGlossinessMaterial = true;\r\n\r\n\t\t\t\tvar params = this.specularGlossinessParams;\r\n\r\n\t\t\t\tfor ( var i = 0, il = params.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\ttarget[ params[ i ] ] = source[ params[ i ] ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn target;\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer.\r\n\t\t\trefreshUniforms: function ( renderer, scene, camera, geometry, material, group ) {\r\n\r\n\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial !== true ) {\r\n\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar uniforms = material.uniforms;\r\n\t\t\t\tvar defines = material.defines;\r\n\r\n\t\t\t\tuniforms.opacity.value = material.opacity;\r\n\r\n\t\t\t\tuniforms.diffuse.value.copy( material.color );\r\n\t\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\r\n\r\n\t\t\t\tuniforms.map.value = material.map;\r\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\r\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\r\n\r\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\r\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\r\n\r\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\r\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\r\n\r\n\t\t\t\t// uv repeat and offset setting priorities\r\n\t\t\t\t// 1. color map\r\n\t\t\t\t// 2. specular map\r\n\t\t\t\t// 3. normal map\r\n\t\t\t\t// 4. bump map\r\n\t\t\t\t// 5. alpha map\r\n\t\t\t\t// 6. emissive map\r\n\r\n\t\t\t\tvar uvScaleMap;\r\n\r\n\t\t\t\tif ( material.map ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.map;\r\n\r\n\t\t\t\t} else if ( material.specularMap ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.specularMap;\r\n\r\n\t\t\t\t} else if ( material.displacementMap ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.displacementMap;\r\n\r\n\t\t\t\t} else if ( material.normalMap ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.normalMap;\r\n\r\n\t\t\t\t} else if ( material.bumpMap ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.bumpMap;\r\n\r\n\t\t\t\t} else if ( material.glossinessMap ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.glossinessMap;\r\n\r\n\t\t\t\t} else if ( material.alphaMap ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.alphaMap;\r\n\r\n\t\t\t\t} else if ( material.emissiveMap ) {\r\n\r\n\t\t\t\t\tuvScaleMap = material.emissiveMap;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( uvScaleMap !== undefined ) {\r\n\r\n\t\t\t\t\t// backwards compatibility\r\n\t\t\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\r\n\r\n\t\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\r\n\r\n\t\t\t\t\t\tuvScaleMap.updateMatrix();\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuniforms.envMap.value = material.envMap;\r\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\r\n\t\t\t\tuniforms.flipEnvMap.value = ( material.envMap && material.envMap.isCubeTexture ) ? - 1 : 1;\r\n\r\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\r\n\r\n\t\t\t\tuniforms.specular.value.copy( material.specular );\r\n\t\t\t\tuniforms.glossiness.value = material.glossiness;\r\n\r\n\t\t\t\tuniforms.glossinessMap.value = material.glossinessMap;\r\n\r\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\r\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\r\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\r\n\r\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\r\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\r\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\r\n\r\n\t\t\t\tif ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) {\r\n\r\n\t\t\t\t\tdefines.USE_GLOSSINESSMAP = '';\r\n\t\t\t\t\t// set USE_ROUGHNESSMAP to enable vUv\r\n\t\t\t\t\tdefines.USE_ROUGHNESSMAP = '';\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) {\r\n\r\n\t\t\t\t\tdelete defines.USE_GLOSSINESSMAP;\r\n\t\t\t\t\tdelete defines.USE_ROUGHNESSMAP;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}\r\n\r\n\t/*********************************/\r\n\t/********** INTERPOLATION ********/\r\n\t/*********************************/\r\n\r\n\t// Spline Interpolation\r\n\t// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\r\n\tfunction GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\r\n\r\n\t\tTHREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\r\n\r\n\t}\r\n\r\n\tGLTFCubicSplineInterpolant.prototype = Object.create( THREE.Interpolant.prototype );\r\n\tGLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;\r\n\r\n\tGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {\r\n\r\n\t\tvar result = this.resultBuffer;\r\n\t\tvar values = this.sampleValues;\r\n\t\tvar stride = this.valueSize;\r\n\r\n\t\tvar stride2 = stride * 2;\r\n\t\tvar stride3 = stride * 3;\r\n\r\n\t\tvar td = t1 - t0;\r\n\r\n\t\tvar p = ( t - t0 ) / td;\r\n\t\tvar pp = p * p;\r\n\t\tvar ppp = pp * p;\r\n\r\n\t\tvar offset1 = i1 * stride3;\r\n\t\tvar offset0 = offset1 - stride3;\r\n\r\n\t\tvar s0 = 2 * ppp - 3 * pp + 1;\r\n\t\tvar s1 = ppp - 2 * pp + p;\r\n\t\tvar s2 = - 2 * ppp + 3 * pp;\r\n\t\tvar s3 = ppp - pp;\r\n\r\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\r\n\t\t//   [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\r\n\t\tfor ( var i = 0; i !== stride; i ++ ) {\r\n\r\n\t\t\tvar p0 = values[ offset0 + i + stride ]; // splineVertex_k\r\n\t\t\tvar m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\r\n\t\t\tvar p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\r\n\t\t\tvar m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\r\n\r\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t};\r\n\r\n\t/*********************************/\r\n\t/********** INTERNALS ************/\r\n\t/*********************************/\r\n\r\n\t/* CONSTANTS */\r\n\r\n\tvar WEBGL_CONSTANTS = {\r\n\t\tFLOAT: 5126,\r\n\t\t//FLOAT_MAT2: 35674,\r\n\t\tFLOAT_MAT3: 35675,\r\n\t\tFLOAT_MAT4: 35676,\r\n\t\tFLOAT_VEC2: 35664,\r\n\t\tFLOAT_VEC3: 35665,\r\n\t\tFLOAT_VEC4: 35666,\r\n\t\tLINEAR: 9729,\r\n\t\tREPEAT: 10497,\r\n\t\tSAMPLER_2D: 35678,\r\n\t\tPOINTS: 0,\r\n\t\tLINES: 1,\r\n\t\tLINE_LOOP: 2,\r\n\t\tLINE_STRIP: 3,\r\n\t\tTRIANGLES: 4,\r\n\t\tTRIANGLE_STRIP: 5,\r\n\t\tTRIANGLE_FAN: 6,\r\n\t\tUNSIGNED_BYTE: 5121,\r\n\t\tUNSIGNED_SHORT: 5123\r\n\t};\r\n\r\n\tvar WEBGL_TYPE = {\r\n\t\t5126: Number,\r\n\t\t//35674: THREE.Matrix2,\r\n\t\t35675: THREE.Matrix3,\r\n\t\t35676: THREE.Matrix4,\r\n\t\t35664: THREE.Vector2,\r\n\t\t35665: THREE.Vector3,\r\n\t\t35666: THREE.Vector4,\r\n\t\t35678: THREE.Texture\r\n\t};\r\n\r\n\tvar WEBGL_COMPONENT_TYPES = {\r\n\t\t5120: Int8Array,\r\n\t\t5121: Uint8Array,\r\n\t\t5122: Int16Array,\r\n\t\t5123: Uint16Array,\r\n\t\t5125: Uint32Array,\r\n\t\t5126: Float32Array\r\n\t};\r\n\r\n\tvar WEBGL_FILTERS = {\r\n\t\t9728: THREE.NearestFilter,\r\n\t\t9729: THREE.LinearFilter,\r\n\t\t9984: THREE.NearestMipMapNearestFilter,\r\n\t\t9985: THREE.LinearMipMapNearestFilter,\r\n\t\t9986: THREE.NearestMipMapLinearFilter,\r\n\t\t9987: THREE.LinearMipMapLinearFilter\r\n\t};\r\n\r\n\tvar WEBGL_WRAPPINGS = {\r\n\t\t33071: THREE.ClampToEdgeWrapping,\r\n\t\t33648: THREE.MirroredRepeatWrapping,\r\n\t\t10497: THREE.RepeatWrapping\r\n\t};\r\n\r\n\tvar WEBGL_TEXTURE_FORMATS = {\r\n\t\t6406: THREE.AlphaFormat,\r\n\t\t6407: THREE.RGBFormat,\r\n\t\t6408: THREE.RGBAFormat,\r\n\t\t6409: THREE.LuminanceFormat,\r\n\t\t6410: THREE.LuminanceAlphaFormat\r\n\t};\r\n\r\n\tvar WEBGL_TEXTURE_DATATYPES = {\r\n\t\t5121: THREE.UnsignedByteType,\r\n\t\t32819: THREE.UnsignedShort4444Type,\r\n\t\t32820: THREE.UnsignedShort5551Type,\r\n\t\t33635: THREE.UnsignedShort565Type\r\n\t};\r\n\r\n\tvar WEBGL_SIDES = {\r\n\t\t1028: THREE.BackSide, // Culling front\r\n\t\t1029: THREE.FrontSide // Culling back\r\n\t\t//1032: THREE.NoSide   // Culling front and back, what to do?\r\n\t};\r\n\r\n\tvar WEBGL_DEPTH_FUNCS = {\r\n\t\t512: THREE.NeverDepth,\r\n\t\t513: THREE.LessDepth,\r\n\t\t514: THREE.EqualDepth,\r\n\t\t515: THREE.LessEqualDepth,\r\n\t\t516: THREE.GreaterEqualDepth,\r\n\t\t517: THREE.NotEqualDepth,\r\n\t\t518: THREE.GreaterEqualDepth,\r\n\t\t519: THREE.AlwaysDepth\r\n\t};\r\n\r\n\tvar WEBGL_BLEND_EQUATIONS = {\r\n\t\t32774: THREE.AddEquation,\r\n\t\t32778: THREE.SubtractEquation,\r\n\t\t32779: THREE.ReverseSubtractEquation\r\n\t};\r\n\r\n\tvar WEBGL_BLEND_FUNCS = {\r\n\t\t0: THREE.ZeroFactor,\r\n\t\t1: THREE.OneFactor,\r\n\t\t768: THREE.SrcColorFactor,\r\n\t\t769: THREE.OneMinusSrcColorFactor,\r\n\t\t770: THREE.SrcAlphaFactor,\r\n\t\t771: THREE.OneMinusSrcAlphaFactor,\r\n\t\t772: THREE.DstAlphaFactor,\r\n\t\t773: THREE.OneMinusDstAlphaFactor,\r\n\t\t774: THREE.DstColorFactor,\r\n\t\t775: THREE.OneMinusDstColorFactor,\r\n\t\t776: THREE.SrcAlphaSaturateFactor\r\n\t\t// The followings are not supported by Three.js yet\r\n\t\t//32769: CONSTANT_COLOR,\r\n\t\t//32770: ONE_MINUS_CONSTANT_COLOR,\r\n\t\t//32771: CONSTANT_ALPHA,\r\n\t\t//32772: ONE_MINUS_CONSTANT_COLOR\r\n\t};\r\n\r\n\tvar WEBGL_TYPE_SIZES = {\r\n\t\t'SCALAR': 1,\r\n\t\t'VEC2': 2,\r\n\t\t'VEC3': 3,\r\n\t\t'VEC4': 4,\r\n\t\t'MAT2': 4,\r\n\t\t'MAT3': 9,\r\n\t\t'MAT4': 16\r\n\t};\r\n\r\n\tvar ATTRIBUTES = {\r\n\t\tPOSITION: 'position',\r\n\t\tNORMAL: 'normal',\r\n\t\tTEXCOORD_0: 'uv',\r\n\t\tTEXCOORD0: 'uv', // deprecated\r\n\t\tTEXCOORD: 'uv', // deprecated\r\n\t\tTEXCOORD_1: 'uv2',\r\n\t\tCOLOR_0: 'color',\r\n\t\tCOLOR0: 'color', // deprecated\r\n\t\tCOLOR: 'color', // deprecated\r\n\t\tWEIGHTS_0: 'skinWeight',\r\n\t\tWEIGHT: 'skinWeight', // deprecated\r\n\t\tJOINTS_0: 'skinIndex',\r\n\t\tJOINT: 'skinIndex' // deprecated\r\n\t};\r\n\r\n\tvar PATH_PROPERTIES = {\r\n\t\tscale: 'scale',\r\n\t\ttranslation: 'position',\r\n\t\trotation: 'quaternion',\r\n\t\tweights: 'morphTargetInfluences'\r\n\t};\r\n\r\n\tvar INTERPOLATION = {\r\n\t\tCUBICSPLINE: THREE.InterpolateSmooth, // We use custom interpolation GLTFCubicSplineInterpolation for CUBICSPLINE.\r\n\t\t                                      // KeyframeTrack.optimize() can't handle glTF Cubic Spline output values layout,\r\n\t\t                                      // using THREE.InterpolateSmooth for KeyframeTrack instantiation to prevent optimization.\r\n\t\t                                      // See KeyframeTrack.optimize() for the detail.\r\n\t\tLINEAR: THREE.InterpolateLinear,\r\n\t\tSTEP: THREE.InterpolateDiscrete\r\n\t};\r\n\r\n\tvar STATES_ENABLES = {\r\n\t\t2884: 'CULL_FACE',\r\n\t\t2929: 'DEPTH_TEST',\r\n\t\t3042: 'BLEND',\r\n\t\t3089: 'SCISSOR_TEST',\r\n\t\t32823: 'POLYGON_OFFSET_FILL',\r\n\t\t32926: 'SAMPLE_ALPHA_TO_COVERAGE'\r\n\t};\r\n\r\n\tvar ALPHA_MODES = {\r\n\t\tOPAQUE: 'OPAQUE',\r\n\t\tMASK: 'MASK',\r\n\t\tBLEND: 'BLEND'\r\n\t};\r\n\r\n\t/* UTILITY FUNCTIONS */\r\n\r\n\tfunction resolveURL( url, path ) {\r\n\r\n\t\t// Invalid URL\r\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\r\n\r\n\t\t// Absolute URL http://,https://,//\r\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\r\n\r\n\t\t// Data URI\r\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\r\n\r\n\t\t// Blob URL\r\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\r\n\r\n\t\t// Relative URL\r\n\t\treturn path + url;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\r\n\t */\r\n\tfunction createDefaultMaterial() {\r\n\r\n\t\treturn new THREE.MeshStandardMaterial( {\r\n\t\t\tcolor: 0xFFFFFF,\r\n\t\t\temissive: 0x000000,\r\n\t\t\tmetalness: 1,\r\n\t\t\troughness: 1,\r\n\t\t\ttransparent: false,\r\n\t\t\tdepthTest: true,\r\n\t\t\tside: THREE.FrontSide\r\n\t\t} );\r\n\r\n\t}\r\n\r\n\tfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\r\n\r\n\t\t// Add unknown glTF extensions to an object's userData.\r\n\r\n\t\tfor ( var name in objectDef.extensions ) {\r\n\r\n\t\t\tif ( knownExtensions[ name ] === undefined ) {\r\n\r\n\t\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\r\n\t\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\r\n\t *\r\n\t * @param {THREE.BufferGeometry} geometry\r\n\t * @param {Array<GLTF.Target>} targets\r\n\t * @param {Array<THREE.BufferAttribute>} accessors\r\n\t */\r\n\tfunction addMorphTargets( geometry, targets, accessors ) {\r\n\r\n\t\tvar hasMorphPosition = false;\r\n\t\tvar hasMorphNormal = false;\r\n\r\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar target = targets[ i ];\r\n\r\n\t\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\r\n\t\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\r\n\r\n\t\t\tif ( hasMorphPosition && hasMorphNormal ) break;\r\n\r\n\t\t}\r\n\r\n\t\tif ( ! hasMorphPosition && ! hasMorphNormal ) return;\r\n\r\n\t\tvar morphPositions = [];\r\n\t\tvar morphNormals = [];\r\n\r\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar target = targets[ i ];\r\n\t\t\tvar attributeName = 'morphTarget' + i;\r\n\r\n\t\t\tif ( hasMorphPosition ) {\r\n\r\n\t\t\t\t// Three.js morph position is absolute value. The formula is\r\n\t\t\t\t//   basePosition\r\n\t\t\t\t//     + weight0 * ( morphPosition0 - basePosition )\r\n\t\t\t\t//     + weight1 * ( morphPosition1 - basePosition )\r\n\t\t\t\t//     ...\r\n\t\t\t\t// while the glTF one is relative\r\n\t\t\t\t//   basePosition\r\n\t\t\t\t//     + weight0 * glTFmorphPosition0\r\n\t\t\t\t//     + weight1 * glTFmorphPosition1\r\n\t\t\t\t//     ...\r\n\t\t\t\t// then we need to convert from relative to absolute here.\r\n\r\n\t\t\t\tif ( target.POSITION !== undefined ) {\r\n\r\n\t\t\t\t\t// Cloning not to pollute original accessor\r\n\t\t\t\t\tvar positionAttribute = cloneBufferAttribute( accessors[ target.POSITION ] );\r\n\t\t\t\t\tpositionAttribute.name = attributeName;\r\n\r\n\t\t\t\t\tvar position = geometry.attributes.position;\r\n\r\n\t\t\t\t\tfor ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\t\tpositionAttribute.setXYZ(\r\n\t\t\t\t\t\t\tj,\r\n\t\t\t\t\t\t\tpositionAttribute.getX( j ) + position.getX( j ),\r\n\t\t\t\t\t\t\tpositionAttribute.getY( j ) + position.getY( j ),\r\n\t\t\t\t\t\t\tpositionAttribute.getZ( j ) + position.getZ( j )\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} else {\r\n\r\n\t\t\t\t\tpositionAttribute = geometry.attributes.position;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmorphPositions.push( positionAttribute );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasMorphNormal ) {\r\n\r\n\t\t\t\t// see target.POSITION's comment\r\n\r\n\t\t\t\tvar normalAttribute;\r\n\r\n\t\t\t\tif ( target.NORMAL !== undefined ) {\r\n\r\n\t\t\t\t\tvar normalAttribute = cloneBufferAttribute( accessors[ target.NORMAL ] );\r\n\t\t\t\t\tnormalAttribute.name = attributeName;\r\n\r\n\t\t\t\t\tvar normal = geometry.attributes.normal;\r\n\r\n\t\t\t\t\tfor ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\t\tnormalAttribute.setXYZ(\r\n\t\t\t\t\t\t\tj,\r\n\t\t\t\t\t\t\tnormalAttribute.getX( j ) + normal.getX( j ),\r\n\t\t\t\t\t\t\tnormalAttribute.getY( j ) + normal.getY( j ),\r\n\t\t\t\t\t\t\tnormalAttribute.getZ( j ) + normal.getZ( j )\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} else {\r\n\r\n\t\t\t\t\tnormalAttribute = geometry.attributes.normal;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmorphNormals.push( normalAttribute );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\r\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @param {THREE.Mesh} mesh\r\n\t * @param {GLTF.Mesh} meshDef\r\n\t */\r\n\tfunction updateMorphTargets( mesh, meshDef ) {\r\n\r\n\t\tmesh.updateMorphTargets();\r\n\r\n\t\tif ( meshDef.weights !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// .extras has user-defined data, so check that .extras.targetNames is an array.\r\n\t\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\r\n\r\n\t\t\tvar targetNames = meshDef.extras.targetNames;\r\n\r\n\t\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\r\n\r\n\t\t\t\tmesh.morphTargetDictionary = {};\r\n\r\n\t\t\t\tfor ( var i = 0, il = targetNames.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction isPrimitiveEqual( a, b ) {\r\n\r\n\t\tif ( a.indices !== b.indices ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn isObjectEqual( a.attributes, b.attributes );\r\n\r\n\t}\r\n\r\n\tfunction isObjectEqual( a, b ) {\r\n\r\n\t\tif ( Object.keys( a ).length !== Object.keys( b ).length ) return false;\r\n\r\n\t\tfor ( var key in a ) {\r\n\r\n\t\t\tif ( a[ key ] !== b[ key ] ) return false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n\tfunction isArrayEqual( a, b ) {\r\n\r\n\t\tif ( a.length !== b.length ) return false;\r\n\r\n\t\tfor ( var i = 0, il = a.length; i < il; i ++ ) {\r\n\r\n\t\t\tif ( a[ i ] !== b[ i ] ) return false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n\tfunction getCachedGeometry( cache, newPrimitive ) {\r\n\r\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar cached = cache[ i ];\r\n\r\n\t\t\tif ( isPrimitiveEqual( cached.primitive, newPrimitive ) ) return cached.promise;\r\n\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t}\r\n\r\n\tfunction getCachedCombinedGeometry( cache, geometries ) {\r\n\r\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar cached = cache[ i ];\r\n\r\n\t\t\tif ( isArrayEqual( geometries, cached.baseGeometries ) ) return cached.geometry;\r\n\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t}\r\n\r\n\tfunction getCachedMultiPassGeometry( cache, geometry, primitives ) {\r\n\r\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar cached = cache[ i ];\r\n\r\n\t\t\tif ( geometry === cached.baseGeometry && isArrayEqual( primitives, cached.primitives ) ) return cached.geometry;\r\n\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t}\r\n\r\n\tfunction cloneBufferAttribute( attribute ) {\r\n\r\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\r\n\r\n\t\t\tvar count = attribute.count;\r\n\t\t\tvar itemSize = attribute.itemSize;\r\n\t\t\tvar array = attribute.array.slice( 0, count * itemSize );\r\n\r\n\t\t\tfor ( var i = 0; i < count; ++ i ) {\r\n\r\n\t\t\t\tarray[ i ] = attribute.getX( i );\r\n\t\t\t\tif ( itemSize >= 2 ) array[ i + 1 ] = attribute.getY( i );\r\n\t\t\t\tif ( itemSize >= 3 ) array[ i + 2 ] = attribute.getZ( i );\r\n\t\t\t\tif ( itemSize >= 4 ) array[ i + 3 ] = attribute.getW( i );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn new THREE.BufferAttribute( array, itemSize, attribute.normalized );\r\n\r\n\t\t}\r\n\r\n\t\treturn attribute.clone();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if we can build a single Mesh with MultiMaterial from multiple primitives.\r\n\t * Returns true if all primitives use the same attributes/morphAttributes/mode\r\n\t * and also have index. Otherwise returns false.\r\n\t *\r\n\t * @param {Array<GLTF.Primitive>} primitives\r\n\t * @return {Boolean}\r\n\t */\r\n\tfunction isMultiPassGeometry( primitives ) {\r\n\r\n\t\tif ( primitives.length < 2 ) return false;\r\n\r\n\t\tvar primitive0 = primitives[ 0 ];\r\n\t\tvar targets0 = primitive0.targets || [];\r\n\r\n\t\tif ( primitive0.indices === undefined ) return false;\r\n\r\n\t\tfor ( var i = 1, il = primitives.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar primitive = primitives[ i ];\r\n\r\n\t\t\tif ( primitive0.mode !== primitive.mode ) return false;\r\n\t\t\tif ( primitive.indices === undefined ) return false;\r\n\t\t\tif ( ! isObjectEqual( primitive0.attributes, primitive.attributes ) ) return false;\r\n\r\n\t\t\tvar targets = primitive.targets || [];\r\n\r\n\t\t\tif ( targets0.length !== targets.length ) return false;\r\n\r\n\t\t\tfor ( var j = 0, jl = targets0.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tif ( ! isObjectEqual( targets0[ j ], targets[ j ] ) ) return false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n\t/* GLTF PARSER */\r\n\r\n\tfunction GLTFParser( json, extensions, options ) {\r\n\r\n\t\tthis.json = json || {};\r\n\t\tthis.extensions = extensions || {};\r\n\t\tthis.options = options || {};\r\n\r\n\t\t// loader object cache\r\n\t\tthis.cache = new GLTFRegistry();\r\n\r\n\t\t// BufferGeometry caching\r\n\t\tthis.primitiveCache = [];\r\n\t\tthis.multiplePrimitivesCache = [];\r\n\t\tthis.multiPassGeometryCache = [];\r\n\r\n\t\tthis.textureLoader = new THREE.TextureLoader( this.options.manager );\r\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\r\n\r\n\t\tthis.fileLoader = new THREE.FileLoader( this.options.manager );\r\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\r\n\r\n\t}\r\n\r\n\tGLTFParser.prototype.parse = function ( onLoad, onError ) {\r\n\r\n\t\tvar json = this.json;\r\n\r\n\t\t// Clear the loader cache\r\n\t\tthis.cache.removeAll();\r\n\r\n\t\t// Mark the special nodes/meshes in json for efficient parse\r\n\t\tthis.markDefs();\r\n\r\n\t\t// Fire the callback on complete\r\n\t\tthis.getMultiDependencies( [\r\n\r\n\t\t\t'scene',\r\n\t\t\t'animation',\r\n\t\t\t'camera'\r\n\r\n\t\t] ).then( function ( dependencies ) {\r\n\r\n\t\t\tvar scenes = dependencies.scenes || [];\r\n\t\t\tvar scene = scenes[ json.scene || 0 ];\r\n\t\t\tvar animations = dependencies.animations || [];\r\n\t\t\tvar cameras = dependencies.cameras || [];\r\n\r\n\t\t\tonLoad( scene, scenes, cameras, animations, json );\r\n\r\n\t\t} ).catch( onError );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Marks the special nodes/meshes in json for efficient parse.\r\n\t */\r\n\tGLTFParser.prototype.markDefs = function () {\r\n\r\n\t\tvar nodeDefs = this.json.nodes || [];\r\n\t\tvar skinDefs = this.json.skins || [];\r\n\t\tvar meshDefs = this.json.meshes || [];\r\n\r\n\t\tvar meshReferences = {};\r\n\t\tvar meshUses = {};\r\n\r\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\r\n\t\t// Object3D. Use the skins' joint references to mark bones.\r\n\t\tfor ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\r\n\r\n\t\t\tvar joints = skinDefs[ skinIndex ].joints;\r\n\r\n\t\t\tfor ( var i = 0, il = joints.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Meshes can (and should) be reused by multiple nodes in a glTF asset. To\r\n\t\t// avoid having more than one THREE.Mesh with the same name, count\r\n\t\t// references and rename instances below.\r\n\t\t//\r\n\t\t// Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\r\n\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\r\n\r\n\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\r\n\r\n\t\t\tif ( nodeDef.mesh !== undefined ) {\r\n\r\n\t\t\t\tif ( meshReferences[ nodeDef.mesh ] === undefined ) {\r\n\r\n\t\t\t\t\tmeshReferences[ nodeDef.mesh ] = meshUses[ nodeDef.mesh ] = 0;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmeshReferences[ nodeDef.mesh ] ++;\r\n\r\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\r\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\r\n\t\t\t\t// to mark SkinnedMesh if node has skin.\r\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\r\n\r\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.json.meshReferences = meshReferences;\r\n\t\tthis.json.meshUses = meshUses;\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Requests the specified dependency asynchronously, with caching.\r\n\t * @param {string} type\r\n\t * @param {number} index\r\n\t * @return {Promise<Object>}\r\n\t */\r\n\tGLTFParser.prototype.getDependency = function ( type, index ) {\r\n\r\n\t\tvar cacheKey = type + ':' + index;\r\n\t\tvar dependency = this.cache.get( cacheKey );\r\n\r\n\t\tif ( ! dependency ) {\r\n\r\n\t\t\tswitch ( type ) {\r\n\r\n\t\t\t\tcase 'scene':\r\n\t\t\t\t\tdependency = this.loadScene( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'node':\r\n\t\t\t\t\tdependency = this.loadNode( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'mesh':\r\n\t\t\t\t\tdependency = this.loadMesh( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'accessor':\r\n\t\t\t\t\tdependency = this.loadAccessor( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'bufferView':\r\n\t\t\t\t\tdependency = this.loadBufferView( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'buffer':\r\n\t\t\t\t\tdependency = this.loadBuffer( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'material':\r\n\t\t\t\t\tdependency = this.loadMaterial( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'texture':\r\n\t\t\t\t\tdependency = this.loadTexture( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'skin':\r\n\t\t\t\t\tdependency = this.loadSkin( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'animation':\r\n\t\t\t\t\tdependency = this.loadAnimation( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'camera':\r\n\t\t\t\t\tdependency = this.loadCamera( index );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.cache.add( cacheKey, dependency );\r\n\r\n\t\t}\r\n\r\n\t\treturn dependency;\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Requests all dependencies of the specified type asynchronously, with caching.\r\n\t * @param {string} type\r\n\t * @return {Promise<Array<Object>>}\r\n\t */\r\n\tGLTFParser.prototype.getDependencies = function ( type ) {\r\n\r\n\t\tvar dependencies = this.cache.get( type );\r\n\r\n\t\tif ( ! dependencies ) {\r\n\r\n\t\t\tvar parser = this;\r\n\t\t\tvar defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\r\n\r\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\r\n\r\n\t\t\t\treturn parser.getDependency( type, index );\r\n\r\n\t\t\t} ) );\r\n\r\n\t\t\tthis.cache.add( type, dependencies );\r\n\r\n\t\t}\r\n\r\n\t\treturn dependencies;\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Requests all multiple dependencies of the specified types asynchronously, with caching.\r\n\t * @param {Array<string>} types\r\n\t * @return {Promise<Object<Array<Object>>>}\r\n\t */\r\n\tGLTFParser.prototype.getMultiDependencies = function ( types ) {\r\n\r\n\t\tvar results = {};\r\n\t\tvar pendings = [];\r\n\r\n\t\tfor ( var i = 0, il = types.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar type = types[ i ];\r\n\t\t\tvar value = this.getDependencies( type );\r\n\r\n\t\t\tvalue = value.then( function ( key, value ) {\r\n\r\n\t\t\t\tresults[ key ] = value;\r\n\r\n\t\t\t}.bind( this, type + ( type === 'mesh' ? 'es' : 's' ) ) );\r\n\r\n\t\t\tpendings.push( value );\r\n\r\n\t\t}\r\n\r\n\t\treturn Promise.all( pendings ).then( function () {\r\n\r\n\t\t\treturn results;\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\r\n\t * @param {number} bufferIndex\r\n\t * @return {Promise<ArrayBuffer>}\r\n\t */\r\n\tGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {\r\n\r\n\t\tvar bufferDef = this.json.buffers[ bufferIndex ];\r\n\t\tvar loader = this.fileLoader;\r\n\r\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\r\n\r\n\t\t}\r\n\r\n\t\t// If present, GLB container is required to be the first buffer.\r\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\r\n\r\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\r\n\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\treturn new Promise( function ( resolve, reject ) {\r\n\r\n\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\r\n\r\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\r\n\r\n\t\t\t} );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\r\n\t * @param {number} bufferViewIndex\r\n\t * @return {Promise<ArrayBuffer>}\r\n\t */\r\n\tGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {\r\n\r\n\t\tvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\r\n\r\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\r\n\r\n\t\t\tvar byteLength = bufferViewDef.byteLength || 0;\r\n\t\t\tvar byteOffset = bufferViewDef.byteOffset || 0;\r\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\r\n\t * @param {number} accessorIndex\r\n\t * @return {Promise<THREE.BufferAttribute|THREE.InterleavedBufferAttribute>}\r\n\t */\r\n\tGLTFParser.prototype.loadAccessor = function ( accessorIndex ) {\r\n\r\n\t\tvar parser = this;\r\n\t\tvar json = this.json;\r\n\r\n\t\tvar accessorDef = this.json.accessors[ accessorIndex ];\r\n\r\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\r\n\r\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\r\n\t\t\t// information about attributes coming from another source (e.g. Draco\r\n\t\t\t// compression extension).\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\tvar pendingBufferViews = [];\r\n\r\n\t\tif ( accessorDef.bufferView !== undefined ) {\r\n\r\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tpendingBufferViews.push( null );\r\n\r\n\t\t}\r\n\r\n\t\tif ( accessorDef.sparse !== undefined ) {\r\n\r\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\r\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\r\n\r\n\t\t\tvar bufferView = bufferViews[ 0 ];\r\n\r\n\t\t\tvar itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\r\n\t\t\tvar TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\r\n\r\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\r\n\t\t\tvar elementBytes = TypedArray.BYTES_PER_ELEMENT;\r\n\t\t\tvar itemBytes = elementBytes * itemSize;\r\n\t\t\tvar byteOffset = accessorDef.byteOffset || 0;\r\n\t\t\tvar byteStride = json.bufferViews[ accessorDef.bufferView ].byteStride;\r\n\t\t\tvar normalized = accessorDef.normalized === true;\r\n\t\t\tvar array, bufferAttribute;\r\n\r\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\r\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\r\n\r\n\t\t\t\tvar ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType;\r\n\t\t\t\tvar ib = parser.cache.get( ibCacheKey );\r\n\r\n\t\t\t\tif ( ! ib ) {\r\n\r\n\t\t\t\t\t// Use the full buffer if it's interleaved.\r\n\t\t\t\t\tarray = new TypedArray( bufferView );\r\n\r\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\r\n\t\t\t\t\tib = new THREE.InterleavedBuffer( array, byteStride / elementBytes );\r\n\r\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbufferAttribute = new THREE.InterleavedBufferAttribute( ib, itemSize, byteOffset / elementBytes, normalized );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( bufferView === null ) {\r\n\r\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbufferAttribute = new THREE.BufferAttribute( array, itemSize, normalized );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\r\n\t\t\tif ( accessorDef.sparse !== undefined ) {\r\n\r\n\t\t\t\tvar itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\r\n\t\t\t\tvar TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\r\n\r\n\t\t\t\tvar byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\r\n\t\t\t\tvar byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\r\n\r\n\t\t\t\tvar sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\r\n\t\t\t\tvar sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\r\n\r\n\t\t\t\tif ( bufferView !== null ) {\r\n\r\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\r\n\t\t\t\t\tbufferAttribute.setArray( bufferAttribute.array.slice() );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tvar index = sparseIndices[ i ];\r\n\r\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\r\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\r\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\r\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\r\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn bufferAttribute;\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\r\n\t * @param {number} textureIndex\r\n\t * @return {Promise<THREE.Texture>}\r\n\t */\r\n\tGLTFParser.prototype.loadTexture = function ( textureIndex ) {\r\n\r\n\t\tvar parser = this;\r\n\t\tvar json = this.json;\r\n\t\tvar options = this.options;\r\n\t\tvar textureLoader = this.textureLoader;\r\n\r\n\t\tvar URL = window.URL || window.webkitURL;\r\n\r\n\t\tvar textureDef = json.textures[ textureIndex ];\r\n\r\n\t\tvar textureExtensions = textureDef.extensions || {};\r\n\r\n\t\tvar source;\r\n\r\n\t\tif ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\r\n\r\n\t\t\tsource = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];\r\n\r\n\t\t} else {\r\n\r\n\t\t\tsource = json.images[ textureDef.source ];\r\n\r\n\t\t}\r\n\r\n\t\tvar sourceURI = source.uri;\r\n\t\tvar isObjectURL = false;\r\n\r\n\t\tif ( source.bufferView !== undefined ) {\r\n\r\n\t\t\t// Load binary image data from bufferView, if provided.\r\n\r\n\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {\r\n\r\n\t\t\t\tisObjectURL = true;\r\n\t\t\t\tvar blob = new Blob( [ bufferView ], { type: source.mimeType } );\r\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\r\n\t\t\t\treturn sourceURI;\r\n\r\n\t\t\t} );\r\n\r\n\t\t}\r\n\r\n\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\r\n\r\n\t\t\t// Load Texture resource.\r\n\r\n\t\t\tvar loader = THREE.Loader.Handlers.get( sourceURI );\r\n\r\n\t\t\tif ( ! loader ) {\r\n\r\n\t\t\t\tloader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]\r\n\t\t\t\t\t? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader\r\n\t\t\t\t\t: textureLoader;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn new Promise( function ( resolve, reject ) {\r\n\r\n\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject );\r\n\r\n\t\t\t} );\r\n\r\n\t\t} ).then( function ( texture ) {\r\n\r\n\t\t\t// Clean up resources and configure Texture.\r\n\r\n\t\t\tif ( isObjectURL === true ) {\r\n\r\n\t\t\t\tURL.revokeObjectURL( sourceURI );\r\n\r\n\t\t\t}\r\n\r\n\t\t\ttexture.flipY = false;\r\n\r\n\t\t\tif ( textureDef.name !== undefined ) texture.name = textureDef.name;\r\n\r\n\t\t\t// .format of dds texture is set in DDSLoader\r\n\t\t\tif ( ! textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\r\n\r\n\t\t\t\ttexture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. ' +\r\n\t\t\t\t\t\t\t\t\t\t\t'internalFormat will be forced to be the same value as format.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t\ttexture.type = textureDef.type !== undefined ? WEBGL_TEXTURE_DATATYPES[ textureDef.type ] : THREE.UnsignedByteType;\r\n\r\n\t\t\tvar samplers = json.samplers || {};\r\n\t\t\tvar sampler = samplers[ textureDef.sampler ] || {};\r\n\r\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter;\r\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter;\r\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping;\r\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping;\r\n\r\n\t\t\treturn texture;\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Asynchronously assigns a texture to the given material parameters.\r\n\t * @param {Object} materialParams\r\n\t * @param {string} textureName\r\n\t * @param {number} textureIndex\r\n\t * @return {Promise}\r\n\t */\r\n\tGLTFParser.prototype.assignTexture = function ( materialParams, textureName, textureIndex ) {\r\n\r\n\t\treturn this.getDependency( 'texture', textureIndex ).then( function ( texture ) {\r\n\r\n\t\t\tmaterialParams[ textureName ] = texture;\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\r\n\t * @param {number} materialIndex\r\n\t * @return {Promise<THREE.Material>}\r\n\t */\r\n\tGLTFParser.prototype.loadMaterial = function ( materialIndex ) {\r\n\r\n\t\tvar parser = this;\r\n\t\tvar json = this.json;\r\n\t\tvar extensions = this.extensions;\r\n\t\tvar materialDef = this.json.materials[ materialIndex ];\r\n\r\n\t\tvar materialType;\r\n\t\tvar materialParams = {};\r\n\t\tvar materialExtensions = materialDef.extensions || {};\r\n\r\n\t\tvar pending = [];\r\n\r\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\r\n\r\n\t\t\tvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\r\n\t\t\tmaterialType = sgExtension.getMaterialType( materialDef );\r\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\r\n\r\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\r\n\r\n\t\t\tvar kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\r\n\t\t\tmaterialType = kmuExtension.getMaterialType( materialDef );\r\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Specification:\r\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\r\n\r\n\t\t\tmaterialType = THREE.MeshStandardMaterial;\r\n\r\n\t\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness || {};\r\n\r\n\t\t\tmaterialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );\r\n\t\t\tmaterialParams.opacity = 1.0;\r\n\r\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\r\n\r\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\r\n\r\n\t\t\t\tmaterialParams.color.fromArray( array );\r\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\r\n\r\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\r\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\r\n\r\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\r\n\r\n\t\t\t\tvar textureIndex = metallicRoughness.metallicRoughnessTexture.index;\r\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', textureIndex ) );\r\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', textureIndex ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( materialDef.doubleSided === true ) {\r\n\r\n\t\t\tmaterialParams.side = THREE.DoubleSide;\r\n\r\n\t\t}\r\n\r\n\t\tvar alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\r\n\r\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\r\n\r\n\t\t\tmaterialParams.transparent = true;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tmaterialParams.transparent = false;\r\n\r\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\r\n\r\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {\r\n\r\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture.index ) );\r\n\r\n\t\t\tmaterialParams.normalScale = new THREE.Vector2( 1, 1 );\r\n\r\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\r\n\r\n\t\t\t\tmaterialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {\r\n\r\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture.index ) );\r\n\r\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\r\n\r\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== THREE.MeshBasicMaterial ) {\r\n\r\n\t\t\tmaterialParams.emissive = new THREE.Color().fromArray( materialDef.emissiveFactor );\r\n\r\n\t\t}\r\n\r\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {\r\n\r\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture.index ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn Promise.all( pending ).then( function () {\r\n\r\n\t\t\tvar material;\r\n\r\n\t\t\tif ( materialType === THREE.ShaderMaterial ) {\r\n\r\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tmaterial = new materialType( materialParams );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( materialDef.name !== undefined ) material.name = materialDef.name;\r\n\r\n\t\t\t// Normal map textures use OpenGL conventions:\r\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materialnormaltexture\r\n\t\t\tif ( material.normalScale ) {\r\n\r\n\t\t\t\tmaterial.normalScale.y = - material.normalScale.y;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.\r\n\t\t\tif ( material.map ) material.map.encoding = THREE.sRGBEncoding;\r\n\t\t\tif ( material.emissiveMap ) material.emissiveMap.encoding = THREE.sRGBEncoding;\r\n\t\t\tif ( material.specularMap ) material.specularMap.encoding = THREE.sRGBEncoding;\r\n\r\n\t\t\tif ( materialDef.extras ) material.userData = materialDef.extras;\r\n\r\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\r\n\r\n\t\t\treturn material;\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * @param  {THREE.BufferGeometry} geometry\r\n\t * @param  {GLTF.Primitive} primitiveDef\r\n\t * @param  {Array<THREE.BufferAttribute>} accessors\r\n\t */\r\n\tfunction addPrimitiveAttributes( geometry, primitiveDef, accessors ) {\r\n\r\n\t\tvar attributes = primitiveDef.attributes;\r\n\r\n\t\tfor ( var gltfAttributeName in attributes ) {\r\n\r\n\t\t\tvar threeAttributeName = ATTRIBUTES[ gltfAttributeName ];\r\n\t\t\tvar bufferAttribute = accessors[ attributes[ gltfAttributeName ] ];\r\n\r\n\t\t\t// Skip attributes already provided by e.g. Draco extension.\r\n\t\t\tif ( ! threeAttributeName ) continue;\r\n\t\t\tif ( threeAttributeName in geometry.attributes ) continue;\r\n\r\n\t\t\tgeometry.addAttribute( threeAttributeName, bufferAttribute );\r\n\r\n\t\t}\r\n\r\n\t\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\r\n\r\n\t\t\tgeometry.setIndex( accessors[ primitiveDef.indices ] );\r\n\r\n\t\t}\r\n\r\n\t\tif ( primitiveDef.targets !== undefined ) {\r\n\r\n\t\t\taddMorphTargets( geometry, primitiveDef.targets, accessors );\r\n\r\n\t\t}\r\n\r\n\t\tif ( primitiveDef.extras !== undefined ) {\r\n\r\n\t\t\tgeometry.userData = primitiveDef.extras;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\r\n\t *\r\n\t * Creates BufferGeometries from primitives.\r\n\t * If we can build a single BufferGeometry with .groups from multiple primitives, returns one BufferGeometry.\r\n\t * Otherwise, returns BufferGeometries without .groups as many as primitives.\r\n\t *\r\n\t * @param {Array<Object>} primitives\r\n\t * @return {Promise<Array<THREE.BufferGeometry>>}\r\n\t */\r\n\tGLTFParser.prototype.loadGeometries = function ( primitives ) {\r\n\r\n\t\tvar parser = this;\r\n\t\tvar extensions = this.extensions;\r\n\t\tvar cache = this.primitiveCache;\r\n\r\n\t\tvar isMultiPass = isMultiPassGeometry( primitives );\r\n\t\tvar originalPrimitives;\r\n\r\n\t\tif ( isMultiPass ) {\r\n\r\n\t\t\toriginalPrimitives = primitives; // save original primitives and use later\r\n\r\n\t\t\t// We build a single BufferGeometry with .groups from multiple primitives\r\n\t\t\t// because all primitives share the same attributes/morph/mode and have indices.\r\n\r\n\t\t\tprimitives = [ primitives[ 0 ] ];\r\n\r\n\t\t\t// Sets .groups and combined indices to a geometry later in this method.\r\n\r\n\t\t}\r\n\r\n\t\treturn this.getDependencies( 'accessor' ).then( function ( accessors ) {\r\n\r\n\t\t\tvar pending = [];\r\n\r\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvar primitive = primitives[ i ];\r\n\r\n\t\t\t\t// See if we've already created this geometry\r\n\t\t\t\tvar cached = getCachedGeometry( cache, primitive );\r\n\r\n\t\t\t\tif ( cached ) {\r\n\r\n\t\t\t\t\t// Use the cached geometry if it exists\r\n\t\t\t\t\tpending.push( cached );\r\n\r\n\t\t\t\t} else if ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\r\n\r\n\t\t\t\t\t// Use DRACO geometry if available\r\n\t\t\t\t\tvar geometryPromise = extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\r\n\t\t\t\t\t\t.decodePrimitive( primitive, parser )\r\n\t\t\t\t\t\t.then( function ( geometry ) {\r\n\r\n\t\t\t\t\t\t\taddPrimitiveAttributes( geometry, primitive, accessors );\r\n\r\n\t\t\t\t\t\t\treturn geometry;\r\n\r\n\t\t\t\t\t\t} );\r\n\r\n\t\t\t\t\tcache.push( { primitive: primitive, promise: geometryPromise } );\r\n\r\n\t\t\t\t\tpending.push( geometryPromise );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// Otherwise create a new geometry\r\n\t\t\t\t\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\t\t\t\t\taddPrimitiveAttributes( geometry, primitive, accessors );\r\n\r\n\t\t\t\t\tvar geometryPromise = Promise.resolve( geometry );\r\n\r\n\t\t\t\t\t// Cache this geometry\r\n\t\t\t\t\tcache.push( { primitive: primitive, promise: geometryPromise } );\r\n\r\n\t\t\t\t\tpending.push( geometryPromise );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.all( pending ).then( function ( geometries ) {\r\n\r\n\t\t\t\tif ( isMultiPass ) {\r\n\r\n\t\t\t\t\tvar baseGeometry = geometries[ 0 ];\r\n\r\n\t\t\t\t\t// See if we've already created this combined geometry\r\n\t\t\t\t\tvar cache = parser.multiPassGeometryCache;\r\n\t\t\t\t\tvar cached = getCachedMultiPassGeometry( cache, baseGeometry, originalPrimitives );\r\n\r\n\t\t\t\t\tif ( cached !== null ) return [ cached.geometry ];\r\n\r\n\t\t\t\t\t// Cloning geometry because of index override.\r\n\t\t\t\t\t// Attributes can be reused so cloning by myself here.\r\n\t\t\t\t\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\t\t\t\t\tgeometry.name = baseGeometry.name;\r\n\t\t\t\t\tgeometry.userData = baseGeometry.userData;\r\n\r\n\t\t\t\t\tfor ( var key in baseGeometry.attributes ) geometry.addAttribute( key, baseGeometry.attributes[ key ] );\r\n\t\t\t\t\tfor ( var key in baseGeometry.morphAttributes ) geometry.morphAttributes[ key ] = baseGeometry.morphAttributes[ key ];\r\n\r\n\t\t\t\t\tvar indices = [];\r\n\t\t\t\t\tvar offset = 0;\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = originalPrimitives.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvar accessor = accessors[ originalPrimitives[ i ].indices ];\r\n\r\n\t\t\t\t\t\tfor ( var j = 0, jl = accessor.count; j < jl; j ++ ) indices.push( accessor.array[ j ] );\r\n\r\n\t\t\t\t\t\tgeometry.addGroup( offset, accessor.count, i );\r\n\r\n\t\t\t\t\t\toffset += accessor.count;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgeometry.setIndex( indices );\r\n\r\n\t\t\t\t\tcache.push( { geometry: geometry, baseGeometry: baseGeometry, primitives: originalPrimitives } );\r\n\r\n\t\t\t\t\treturn [ geometry ];\r\n\r\n\t\t\t\t} else if ( geometries.length > 1 && THREE.BufferGeometryUtils !== undefined ) {\r\n\r\n\t\t\t\t\t// Tries to merge geometries with BufferGeometryUtils if possible\r\n\r\n\t\t\t\t\tfor ( var i = 1, il = primitives.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\t// can't merge if draw mode is different\r\n\t\t\t\t\t\tif ( primitives[ 0 ].mode !== primitives[ i ].mode ) return geometries;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// See if we've already created this combined geometry\r\n\t\t\t\t\tvar cache = parser.multiplePrimitivesCache;\r\n\t\t\t\t\tvar cached = getCachedCombinedGeometry( cache, geometries );\r\n\r\n\t\t\t\t\tif ( cached ) {\r\n\r\n\t\t\t\t\t\tif ( cached.geometry !== null ) return [ cached.geometry ];\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvar geometry = THREE.BufferGeometryUtils.mergeBufferGeometries( geometries, true );\r\n\r\n\t\t\t\t\t\tcache.push( { geometry: geometry, baseGeometries: geometries } );\r\n\r\n\t\t\t\t\t\tif ( geometry !== null ) return [ geometry ];\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn geometries;\r\n\r\n\t\t\t} );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\r\n\t * @param {number} meshIndex\r\n\t * @return {Promise<THREE.Group|THREE.Mesh|THREE.SkinnedMesh>}\r\n\t */\r\n\tGLTFParser.prototype.loadMesh = function ( meshIndex ) {\r\n\r\n\t\tvar scope = this;\r\n\t\tvar json = this.json;\r\n\t\tvar extensions = this.extensions;\r\n\r\n\t\tvar meshDef = this.json.meshes[ meshIndex ];\r\n\r\n\t\treturn this.getMultiDependencies( [\r\n\r\n\t\t\t'accessor',\r\n\t\t\t'material'\r\n\r\n\t\t] ).then( function ( dependencies ) {\r\n\r\n\t\t\tvar primitives = meshDef.primitives;\r\n\t\t\tvar originalMaterials = [];\r\n\r\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\r\n\r\n\t\t\t\toriginalMaterials[ i ] = primitives[ i ].material === undefined\r\n\t\t\t\t\t? createDefaultMaterial()\r\n\t\t\t\t\t: dependencies.materials[ primitives[ i ].material ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn scope.loadGeometries( primitives ).then( function ( geometries ) {\r\n\r\n\t\t\t\tvar isMultiMaterial = geometries.length === 1 && geometries[ 0 ].groups.length > 0;\r\n\r\n\t\t\t\tvar meshes = [];\r\n\r\n\t\t\t\tfor ( var i = 0, il = geometries.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tvar geometry = geometries[ i ];\r\n\t\t\t\t\tvar primitive = primitives[ i ];\r\n\r\n\t\t\t\t\t// 1. create Mesh\r\n\r\n\t\t\t\t\tvar mesh;\r\n\r\n\t\t\t\t\tvar material = isMultiMaterial ? originalMaterials : originalMaterials[ i ];\r\n\r\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\r\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\r\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\r\n\t\t\t\t\t\tprimitive.mode === undefined ) {\r\n\r\n\t\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See .markDefs()\r\n\t\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\r\n\t\t\t\t\t\t\t? new THREE.SkinnedMesh( geometry, material )\r\n\t\t\t\t\t\t\t: new THREE.Mesh( geometry, material );\r\n\r\n\t\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\r\n\r\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleStripDrawMode;\r\n\r\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\r\n\r\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleFanDrawMode;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\r\n\r\n\t\t\t\t\t\tmesh = new THREE.LineSegments( geometry, material );\r\n\r\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\r\n\r\n\t\t\t\t\t\tmesh = new THREE.Line( geometry, material );\r\n\r\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\r\n\r\n\t\t\t\t\t\tmesh = new THREE.LineLoop( geometry, material );\r\n\r\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\r\n\r\n\t\t\t\t\t\tmesh = new THREE.Points( geometry, material );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\r\n\r\n\t\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmesh.name = meshDef.name || ( 'mesh_' + meshIndex );\r\n\r\n\t\t\t\t\tif ( geometries.length > 1 ) mesh.name += '_' + i;\r\n\r\n\t\t\t\t\tif ( meshDef.extras !== undefined ) mesh.userData = meshDef.extras;\r\n\r\n\t\t\t\t\tmeshes.push( mesh );\r\n\r\n\t\t\t\t\t// 2. update Material depending on Mesh and BufferGeometry\r\n\r\n\t\t\t\t\tvar materials = isMultiMaterial ? mesh.material : [ mesh.material ];\r\n\r\n\t\t\t\t\tvar useVertexColors = geometry.attributes.color !== undefined;\r\n\t\t\t\t\tvar useFlatShading = geometry.attributes.normal === undefined;\r\n\t\t\t\t\tvar useSkinning = mesh.isSkinnedMesh === true;\r\n\t\t\t\t\tvar useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;\r\n\t\t\t\t\tvar useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;\r\n\r\n\t\t\t\t\tfor ( var j = 0, jl = materials.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\t\tvar material = materials[ j ];\r\n\r\n\t\t\t\t\t\tif ( mesh.isPoints ) {\r\n\r\n\t\t\t\t\t\t\tvar cacheKey = 'PointsMaterial:' + material.uuid;\r\n\r\n\t\t\t\t\t\t\tvar pointsMaterial = scope.cache.get( cacheKey );\r\n\r\n\t\t\t\t\t\t\tif ( ! pointsMaterial ) {\r\n\r\n\t\t\t\t\t\t\t\tpointsMaterial = new THREE.PointsMaterial();\r\n\t\t\t\t\t\t\t\tTHREE.Material.prototype.copy.call( pointsMaterial, material );\r\n\t\t\t\t\t\t\t\tpointsMaterial.color.copy( material.color );\r\n\t\t\t\t\t\t\t\tpointsMaterial.map = material.map;\r\n\t\t\t\t\t\t\t\tpointsMaterial.lights = false; // PointsMaterial doesn't support lights yet\r\n\r\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, pointsMaterial );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tmaterial = pointsMaterial;\r\n\r\n\t\t\t\t\t\t} else if ( mesh.isLine ) {\r\n\r\n\t\t\t\t\t\t\tvar cacheKey = 'LineBasicMaterial:' + material.uuid;\r\n\r\n\t\t\t\t\t\t\tvar lineMaterial = scope.cache.get( cacheKey );\r\n\r\n\t\t\t\t\t\t\tif ( ! lineMaterial ) {\r\n\r\n\t\t\t\t\t\t\t\tlineMaterial = new THREE.LineBasicMaterial();\r\n\t\t\t\t\t\t\t\tTHREE.Material.prototype.copy.call( lineMaterial, material );\r\n\t\t\t\t\t\t\t\tlineMaterial.color.copy( material.color );\r\n\t\t\t\t\t\t\t\tlineMaterial.lights = false; // LineBasicMaterial doesn't support lights yet\r\n\r\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, lineMaterial );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tmaterial = lineMaterial;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Clone the material if it will be modified\r\n\t\t\t\t\t\tif ( useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {\r\n\r\n\t\t\t\t\t\t\tvar cacheKey = 'ClonedMaterial:' + material.uuid + ':';\r\n\r\n\t\t\t\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\r\n\t\t\t\t\t\t\tif ( useSkinning ) cacheKey += 'skinning:';\r\n\t\t\t\t\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\r\n\t\t\t\t\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\r\n\t\t\t\t\t\t\tif ( useMorphTargets ) cacheKey += 'morph-targets:';\r\n\t\t\t\t\t\t\tif ( useMorphNormals ) cacheKey += 'morph-normals:';\r\n\r\n\t\t\t\t\t\t\tvar cachedMaterial = scope.cache.get( cacheKey );\r\n\r\n\t\t\t\t\t\t\tif ( ! cachedMaterial ) {\r\n\r\n\t\t\t\t\t\t\t\tcachedMaterial = material.isGLTFSpecularGlossinessMaterial\r\n\t\t\t\t\t\t\t\t\t? extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].cloneMaterial( material )\r\n\t\t\t\t\t\t\t\t\t: material.clone();\r\n\r\n\t\t\t\t\t\t\t\tif ( useSkinning ) cachedMaterial.skinning = true;\r\n\t\t\t\t\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = THREE.VertexColors;\r\n\t\t\t\t\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\r\n\t\t\t\t\t\t\t\tif ( useMorphTargets ) cachedMaterial.morphTargets = true;\r\n\t\t\t\t\t\t\t\tif ( useMorphNormals ) cachedMaterial.morphNormals = true;\r\n\r\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, cachedMaterial );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tmaterial = cachedMaterial;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tmaterials[ j ] = material;\r\n\r\n\t\t\t\t\t\t// workarounds for mesh and geometry\r\n\r\n\t\t\t\t\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\r\n\r\n\t\t\t\t\t\t\tconsole.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' );\r\n\t\t\t\t\t\t\tgeometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) {\r\n\r\n\t\t\t\t\t\t\t// for GLTFSpecularGlossinessMaterial(ShaderMaterial) uniforms runtime update\r\n\t\t\t\t\t\t\tmesh.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms;\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\tmesh.material = isMultiMaterial ? materials : materials[ 0 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( meshes.length === 1 ) {\r\n\r\n\t\t\t\t\treturn meshes[ 0 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar group = new THREE.Group();\r\n\r\n\t\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tgroup.add( meshes[ i ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn group;\r\n\r\n\t\t\t} );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\r\n\t * @param {number} cameraIndex\r\n\t * @return {Promise<THREE.Camera>}\r\n\t */\r\n\tGLTFParser.prototype.loadCamera = function ( cameraIndex ) {\r\n\r\n\t\tvar camera;\r\n\t\tvar cameraDef = this.json.cameras[ cameraIndex ];\r\n\t\tvar params = cameraDef[ cameraDef.type ];\r\n\r\n\t\tif ( ! params ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tif ( cameraDef.type === 'perspective' ) {\r\n\r\n\t\t\tcamera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\r\n\r\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\r\n\r\n\t\t\tcamera = new THREE.OrthographicCamera( params.xmag / - 2, params.xmag / 2, params.ymag / 2, params.ymag / - 2, params.znear, params.zfar );\r\n\r\n\t\t}\r\n\r\n\t\tif ( cameraDef.name !== undefined ) camera.name = cameraDef.name;\r\n\t\tif ( cameraDef.extras ) camera.userData = cameraDef.extras;\r\n\r\n\t\treturn Promise.resolve( camera );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\r\n\t * @param {number} skinIndex\r\n\t * @return {Promise<Object>}\r\n\t */\r\n\tGLTFParser.prototype.loadSkin = function ( skinIndex ) {\r\n\r\n\t\tvar skinDef = this.json.skins[ skinIndex ];\r\n\r\n\t\tvar skinEntry = { joints: skinDef.joints };\r\n\r\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\r\n\r\n\t\t\treturn Promise.resolve( skinEntry );\r\n\r\n\t\t}\r\n\r\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\r\n\r\n\t\t\tskinEntry.inverseBindMatrices = accessor;\r\n\r\n\t\t\treturn skinEntry;\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\r\n\t * @param {number} animationIndex\r\n\t * @return {Promise<THREE.AnimationClip>}\r\n\t */\r\n\tGLTFParser.prototype.loadAnimation = function ( animationIndex ) {\r\n\r\n\t\tvar json = this.json;\r\n\r\n\t\tvar animationDef = this.json.animations[ animationIndex ];\r\n\r\n\t\treturn this.getMultiDependencies( [\r\n\r\n\t\t\t'accessor',\r\n\t\t\t'node'\r\n\r\n\t\t] ).then( function ( dependencies ) {\r\n\r\n\t\t\tvar tracks = [];\r\n\r\n\t\t\tfor ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvar channel = animationDef.channels[ i ];\r\n\t\t\t\tvar sampler = animationDef.samplers[ channel.sampler ];\r\n\r\n\t\t\t\tif ( sampler ) {\r\n\r\n\t\t\t\t\tvar target = channel.target;\r\n\t\t\t\t\tvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\r\n\t\t\t\t\tvar input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\r\n\t\t\t\t\tvar output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\r\n\r\n\t\t\t\t\tvar inputAccessor = dependencies.accessors[ input ];\r\n\t\t\t\t\tvar outputAccessor = dependencies.accessors[ output ];\r\n\r\n\t\t\t\t\tvar node = dependencies.nodes[ name ];\r\n\r\n\t\t\t\t\tif ( node ) {\r\n\r\n\t\t\t\t\t\tnode.updateMatrix();\r\n\t\t\t\t\t\tnode.matrixAutoUpdate = true;\r\n\r\n\t\t\t\t\t\tvar TypedKeyframeTrack;\r\n\r\n\t\t\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\r\n\r\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.weights:\r\n\r\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.NumberKeyframeTrack;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.rotation:\r\n\r\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.QuaternionKeyframeTrack;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.position:\r\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.scale:\r\n\t\t\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.VectorKeyframeTrack;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar targetName = node.name ? node.name : node.uuid;\r\n\r\n\t\t\t\t\t\tvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear;\r\n\r\n\t\t\t\t\t\tvar targetNames = [];\r\n\r\n\t\t\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\r\n\r\n\t\t\t\t\t\t\t// node can be THREE.Group here but\r\n\t\t\t\t\t\t\t// PATH_PROPERTIES.weights(morphTargetInfluences) should be\r\n\t\t\t\t\t\t\t// the property of a mesh object under group.\r\n\r\n\t\t\t\t\t\t\tnode.traverse( function ( object ) {\r\n\r\n\t\t\t\t\t\t\t\tif ( object.isMesh === true && object.morphTargetInfluences ) {\r\n\r\n\t\t\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t} );\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\ttargetNames.push( targetName );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// KeyframeTrack.optimize() will modify given 'times' and 'values'\r\n\t\t\t\t\t\t// buffers before creating a truncated copy to keep. Because buffers may\r\n\t\t\t\t\t\t// be reused by other tracks, make copies here.\r\n\t\t\t\t\t\tfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\t\t\tvar track = new TypedKeyframeTrack(\r\n\t\t\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\r\n\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),\r\n\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),\r\n\t\t\t\t\t\t\t\tinterpolation\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t// Here is the trick to enable custom interpolation.\r\n\t\t\t\t\t\t\t// Overrides .createInterpolant in a factory method which creates custom interpolation.\r\n\t\t\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\r\n\r\n\t\t\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\r\n\r\n\t\t\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\r\n\t\t\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\r\n\t\t\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\r\n\r\n\t\t\t\t\t\t\t\t\treturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );\r\n\r\n\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t// Workaround, provide an alternate way to know if the interpolant type is cubis spline to track.\r\n\t\t\t\t\t\t\t\t// track.getInterpolation() doesn't return valid value for custom interpolant.\r\n\t\t\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttracks.push( track );\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\tvar name = animationDef.name !== undefined ? animationDef.name : 'animation_' + animationIndex;\r\n\r\n\t\t\treturn new THREE.AnimationClip( name, undefined, tracks );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\r\n\t * @param {number} nodeIndex\r\n\t * @return {Promise<THREE.Object3D>}\r\n\t */\r\n\tGLTFParser.prototype.loadNode = function ( nodeIndex ) {\r\n\r\n\t\tvar json = this.json;\r\n\t\tvar extensions = this.extensions;\r\n\r\n\t\tvar meshReferences = this.json.meshReferences;\r\n\t\tvar meshUses = this.json.meshUses;\r\n\r\n\t\tvar nodeDef = this.json.nodes[ nodeIndex ];\r\n\r\n\t\treturn this.getMultiDependencies( [\r\n\r\n\t\t\t'mesh',\r\n\t\t\t'skin',\r\n\t\t\t'camera',\r\n\t\t\t'light'\r\n\r\n\t\t] ).then( function ( dependencies ) {\r\n\r\n\t\t\tvar node;\r\n\r\n\t\t\t// .isBone isn't in glTF spec. See .markDefs\r\n\t\t\tif ( nodeDef.isBone === true ) {\r\n\r\n\t\t\t\tnode = new THREE.Bone();\r\n\r\n\t\t\t} else if ( nodeDef.mesh !== undefined ) {\r\n\r\n\t\t\t\tvar mesh = dependencies.meshes[ nodeDef.mesh ];\r\n\r\n\t\t\t\tnode = mesh.clone();\r\n\r\n\t\t\t\t// for Specular-Glossiness\r\n\t\t\t\tif ( mesh.isGroup === true ) {\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = mesh.children.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvar child = mesh.children[ i ];\r\n\r\n\t\t\t\t\t\tif ( child.material && child.material.isGLTFSpecularGlossinessMaterial === true ) {\r\n\r\n\t\t\t\t\t\t\tnode.children[ i ].onBeforeRender = child.onBeforeRender;\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} else {\r\n\r\n\t\t\t\t\tif ( mesh.material && mesh.material.isGLTFSpecularGlossinessMaterial === true ) {\r\n\r\n\t\t\t\t\t\tnode.onBeforeRender = mesh.onBeforeRender;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( meshReferences[ nodeDef.mesh ] > 1 ) {\r\n\r\n\t\t\t\t\tnode.name += '_instance_' + meshUses[ nodeDef.mesh ] ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( nodeDef.camera !== undefined ) {\r\n\r\n\t\t\t\tnode = dependencies.cameras[ nodeDef.camera ];\r\n\r\n\t\t\t} else if ( nodeDef.extensions\r\n\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ]\r\n\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\r\n\r\n\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\r\n\t\t\t\tnode = lights[ nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tnode = new THREE.Object3D();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( nodeDef.name !== undefined ) {\r\n\r\n\t\t\t\tnode.name = THREE.PropertyBinding.sanitizeNodeName( nodeDef.name );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( nodeDef.extras ) node.userData = nodeDef.extras;\r\n\r\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\r\n\r\n\t\t\tif ( nodeDef.matrix !== undefined ) {\r\n\r\n\t\t\t\tvar matrix = new THREE.Matrix4();\r\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\r\n\t\t\t\tnode.applyMatrix( matrix );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\r\n\r\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\r\n\r\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\r\n\r\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn node;\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\r\n\t * @param {number} sceneIndex\r\n\t * @return {Promise<THREE.Scene>}\r\n\t */\r\n\tGLTFParser.prototype.loadScene = function () {\r\n\r\n\t\t// scene node hierachy builder\r\n\r\n\t\tfunction buildNodeHierachy( nodeId, parentObject, json, allNodes, skins ) {\r\n\r\n\t\t\tvar node = allNodes[ nodeId ];\r\n\t\t\tvar nodeDef = json.nodes[ nodeId ];\r\n\r\n\t\t\t// build skeleton here as well\r\n\r\n\t\t\tif ( nodeDef.skin !== undefined ) {\r\n\r\n\t\t\t\tvar meshes = node.isGroup === true ? node.children : [ node ];\r\n\r\n\t\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tvar mesh = meshes[ i ];\r\n\t\t\t\t\tvar skinEntry = skins[ nodeDef.skin ];\r\n\r\n\t\t\t\t\tvar bones = [];\r\n\t\t\t\t\tvar boneInverses = [];\r\n\r\n\t\t\t\t\tfor ( var j = 0, jl = skinEntry.joints.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\t\tvar jointId = skinEntry.joints[ j ];\r\n\t\t\t\t\t\tvar jointNode = allNodes[ jointId ];\r\n\r\n\t\t\t\t\t\tif ( jointNode ) {\r\n\r\n\t\t\t\t\t\t\tbones.push( jointNode );\r\n\r\n\t\t\t\t\t\t\tvar mat = new THREE.Matrix4();\r\n\r\n\t\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\r\n\r\n\t\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tboneInverses.push( mat );\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', jointId );\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\tmesh.bind( new THREE.Skeleton( bones, boneInverses ), mesh.matrixWorld );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// build node hierachy\r\n\r\n\t\t\tparentObject.add( node );\r\n\r\n\t\t\tif ( nodeDef.children ) {\r\n\r\n\t\t\t\tvar children = nodeDef.children;\r\n\r\n\t\t\t\tfor ( var i = 0, il = children.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tvar child = children[ i ];\r\n\t\t\t\t\tbuildNodeHierachy( child, node, json, allNodes, skins );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn function loadScene( sceneIndex ) {\r\n\r\n\t\t\tvar json = this.json;\r\n\t\t\tvar extensions = this.extensions;\r\n\t\t\tvar sceneDef = this.json.scenes[ sceneIndex ];\r\n\r\n\t\t\treturn this.getMultiDependencies( [\r\n\r\n\t\t\t\t'node',\r\n\t\t\t\t'skin'\r\n\r\n\t\t\t] ).then( function ( dependencies ) {\r\n\r\n\t\t\t\tvar scene = new THREE.Scene();\r\n\t\t\t\tif ( sceneDef.name !== undefined ) scene.name = sceneDef.name;\r\n\r\n\t\t\t\tif ( sceneDef.extras ) scene.userData = sceneDef.extras;\r\n\r\n\t\t\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\r\n\r\n\t\t\t\tvar nodeIds = sceneDef.nodes || [];\r\n\r\n\t\t\t\tfor ( var i = 0, il = nodeIds.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tbuildNodeHierachy( nodeIds[ i ], scene, json, dependencies.nodes, dependencies.skins );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Ambient lighting, if present, is always attached to the scene root.\r\n\t\t\t\tif ( sceneDef.extensions\r\n\t\t\t\t\t\t && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ]\r\n\t\t\t\t\t\t && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\r\n\r\n\t\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\r\n\t\t\t\t\tscene.add( lights[ sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn scene;\r\n\r\n\t\t\t} );\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\treturn GLTFLoader;\r\n\r\n} )();","Date.prototype.plus = function(unit, value) {\r\n\r\n  const _unit = unit!==undefined?unit:'h';\r\n\r\n  switch(_unit){\r\n    case 'h':\r\n      this.setHours(this.getHours() + value);\r\n    break;\r\n    case 'm':\r\n      this.setMinutes(this.getMinutes() + value);\r\n    break;\r\n    case 's':\r\n      this.setSeconds(this.getSeconds() + value);\r\n    break;\r\n    case 'ms':\r\n      this.setMilliseconds(this.getMilliseconds() + value);\r\n    break;\r\n  }\r\n\r\n  return this;\r\n\r\n};\r\nDate.prototype.minus = function(unit, value) {\r\n\r\n  const _unit = unit!==undefined?unit:'h';\r\n\r\n  switch(_unit){\r\n    case 'h':\r\n      this.setHours(this.getHours() - value);\r\n    break;\r\n    case 'm':\r\n      this.setMinutes(this.getMinutes() - value);\r\n    break;\r\n    case 's':\r\n      this.setSeconds(this.getSeconds() - value);\r\n    break;\r\n    case 'ms':\r\n      this.setMilliseconds(this.getMilliseconds() - value);\r\n    break;\r\n  }\r\n\r\n  return this;\r\n\r\n};\r\n\r\n/** This class represents a Meta's existence.\r\n*\r\n* @example\r\n* new Meta({\r\n*  existence: new Existence({\r\n*   start: new Date().plus('m', 1),\r\n*   end: new Date().plus('m', 2),\r\n*  }),\r\n*  graphics: new Graphics({\r\n*    geometry: new Cube(true)\r\n*  }, true)\r\n* });\r\n*\r\n* @constructor\r\n* @param {Object} props\r\n* @param {String} props.start Start of the existence (Date object).\r\n* @param {String} props.end End of the existence (Date object).\r\n*/\r\n\r\nexport default class Existence {\r\n\r\n  constructor(props){\r\n\r\n    /**\r\n     * Existence has started. (Current date is higher than start date)\r\n     * @param {Boolean}\r\n    */\r\n    this.started = false;\r\n\r\n    /**\r\n     * Existence has ended. (Current date is lower than start date)\r\n     * @param {Boolean}\r\n    */\r\n    this.ended = false;\r\n\r\n    /**\r\n     * Start date of existence.\r\n     * @param {Date} start\r\n    */\r\n    this.start = props!==undefined&&props.start!==undefined?props.start:null;\r\n\r\n    /**\r\n     * End date of existence.\r\n     * @param {Date} end\r\n    */\r\n    this.end = props!==undefined&&props.end!==undefined?props.end:null;\r\n\r\n    // //console.log('[Existence] - Start:'+this.start)\r\n    // //console.log('[Existence] - End:'+this.end)\r\n\r\n  }\r\n}\r\n","// 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","import config from '../../../config';\r\n\r\nimport log from '../../Utilities/log';\r\n\r\nimport {CubeGeometry,\r\n        MeshBasicMaterial,\r\n        Mesh,\r\n        Box3} from 'three';\r\n\r\nimport Space    from '../Space';\r\n// import Physics  from '../Physics/Physics';\r\n\r\nimport Graphics  from './Graphics/Graphics';\r\nimport Existence from './Existence/Existence';\r\n\r\nimport * as OIMO  from 'oimo';\r\n\r\nconst name = 'Meta';\r\n\r\nlet scope;\r\n\r\nlet world = new OIMO.World();\r\nlet bodies = [];\r\n\r\n/** This class represents a Meta object.\r\n* @constructor\r\n* @param {Object} props\r\n* @param {String} props.life Represents the Meta object's lifecycle.\r\n* @param {String} props.graphics Represents the Meta object's visual appearance.\r\n* @param {String} props.physics Represents the Meta object's physics body.\r\n* @param {Array} lifes Includes the Meta object's lifes.\r\n* @param {Array} events  Includes the Meta object's events.\r\n*/\r\nexport default class Meta {\r\n\r\n  constructor(props){\r\n\r\n      scope = this;\r\n\r\n      this.name = 'Meta';\r\n\r\n      //lifes\r\n      this.lifes = [];\r\n\r\n      //events\r\n      this.events = [];\r\n\r\n      //states (TODO: merge into {state})\r\n      this._entered = null;\r\n      this._touched = false;\r\n\r\n      //props\r\n      this.rotation = {x:0,y:0,z:0};\r\n      this.position = {x:0,y:0,z:0};\r\n\r\n      //e,g,p (existence, graphics, physics)\r\n      this.existence = props!==undefined&&props.existence!==undefined?props.existence:new Existence();\r\n      \r\n      this.graphics  = props!==undefined&&props.graphics!==undefined?props.graphics:new Graphics();\r\n\r\n      this.physics   = props!==undefined&&props.physics!==undefined?props.physics:true;\r\n\r\n      //Set existence\r\n      this.setExistence();\r\n\r\n      //Set graphics\r\n      //this.setGraphics();\r\n\r\n      //Set physics\r\n      //this.setPhysics();\r\n\r\n      //Start Presence\r\n      this.setPresence();\r\n\r\n\r\n      return this;\r\n  }\r\n\r\n  setExistence(){\r\n    if(this.existence.start===null&&this.existence.end===null)\r\n    Space.get().start(scope);\r\n  }\r\n\r\n  setPresence(){\r\n    Space.get().add(this);\r\n  }\r\n\r\n  o(eventName, callback){\r\n    return this.on(eventName, callback)\r\n  }\r\n  on(eventName, callback){\r\n    if(typeof(eventName)==\"function\"){\r\n      callback  = eventName;\r\n      eventName = 'p';\r\n    }\r\n\r\n    if(eventName=='t')\r\n       eventName='touch';\r\n    if(eventName=='r')\r\n       eventName='release';\r\n    if(eventName=='p')\r\n       eventName='point';\r\n\r\n    if(this.events[eventName]){\r\n      this.events[eventName].push(callback);\r\n    }else{\r\n      this.events[eventName] = [callback];\r\n    }\r\n    return this;\r\n  }\r\n\r\n  go(eventName, ...rest){\r\n    if(this.events[eventName]){\r\n      this.events[eventName].forEach(cb =>{\r\n        cb(...rest, this);\r\n      })\r\n    }\r\n    return this;\r\n  }\r\n\r\n  m(direction, amount){\r\n    return(this.move(direction, amount))\r\n  }\r\n  move(direction, amount){\r\n\r\n    switch (direction) {\r\n      default:\r\n       case 0: case 'f': case 'forward': case 'forwards':\r\n        this.setPosition({x:this.position.x,y:this.position.y,z:this.position.z+amount})\r\n        break;\r\n       case 1: case 'b': case 'backward': case 'backwards':\r\n        this.setPosition({x:this.position.x,y:this.position.y,z:this.position.z-amount})\r\n        break;\r\n       case 2: case 'l': case 'left':\r\n         this.setPosition({x:this.position.x-amount,y:this.position.y,z:this.position.z})\r\n        break;\r\n       case 3: case 'r': case 'right':\r\n         this.setPosition({x:this.position.x+amount,y:this.position.y,z:this.position.z})\r\n        break;\r\n       case 4: case 'd': case 'down':\r\n        this.setPosition({x:this.position.x,y:this.position.y-amount,z:this.position.z})\r\n        break;\r\n       case 5: case 'u': case 'up':\r\n        this.setPosition({x:this.position.x,y:this.position.y+amount,z:this.position.z})  \r\n        break;\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n  s(props){\r\n    return this.set(props)\r\n  }\r\n  set(position){\r\n\r\n    this.setPosition(position);\r\n\r\n    return this;\r\n  }\r\n\r\n  setPosition(position){ \r\n\r\n    this.graphics.setPosition(position)\r\n\r\n    this.position = {\r\n      x: this.graphics.mesh.position.x,\r\n      y: this.graphics.mesh.position.y,\r\n      z: this.graphics.mesh.position.z\r\n    }\r\n\r\n   log('[this.position]'+this.position)\r\n   return this;\r\n  }\r\n\r\n\r\n  r(direction, amount){\r\n    return this.rotate(direction, amount);\r\n  }\r\n  rotate(direction, amount){\r\n\r\n    switch (direction) {\r\n      default:\r\n       case 0: case 'f': case 'forward': case 'forwards':\r\n          this.setRotation({x:this.rotation.x+amount, y:0, z:0});\r\n        break;\r\n       case 1: case 'b': case 'backward': case 'backwards':\r\n          this.setRotation({x:this.rotation.x-amount, y:0, z:0});\r\n        break;\r\n       case 2: case 'l': case 'left':\r\n          this.setRotation({x:0, y:this.rotation.y-amount, z:0});\r\n        break;\r\n       case 3: case 'r': case 'right':\r\n          this.setRotation({x:0, y:this.rotation.y+amount, z:0});\r\n        break;\r\n       case 4: case 'd': case 'down':\r\n          this.setRotation({x:0, y: 0, z:this.rotation.z+amount});\r\n        break;\r\n       case 5: case 'u': case 'up':\r\n          this.setRotation({x:0, y: 0, z:this.rotation.z-amount});\r\n        break;\r\n    }\r\n\r\n    return this;\r\n  }\r\n  setRotation(rotation){\r\n\r\n    this.graphics.setRotation(rotation)\r\n\r\n    this.rotation = {\r\n      x: this.graphics.mesh.rotation.x,\r\n      y: this.graphics.mesh.rotation.y,\r\n      z: this.graphics.mesh.rotation.z\r\n    }\r\n\r\n    log(JSON.stringify(this.rotation), name)\r\n    return this;\r\n  }\r\n\r\n  setSize(){\r\n\r\n\r\n    //Define Meta's Size According To Graphic's Dimensions\r\n    let box3 = new Box3().setFromObject(this.graphics.mesh);\r\n\r\n    let x = box3.max.x - box3.min.x;\r\n    let y = box3.max.y - box3.min.y;\r\n    let z = box3.max.z - box3.min.z;\r\n\r\n    switch(this.graphics.type){\r\n      case 'box':\r\n        this.size = [x,y,z]\r\n      break;\r\n      case 'sphere':\r\n        this.size = [x/2]\r\n      break;\r\n      case 'cylinder':\r\n        this.size = [x/2,y,z/2]\r\n      break;\r\n    }\r\n\r\n    //console.log('[Size]'+this.size);\r\n\r\n  }\r\n\r\n\r\n  p(m){\r\n    return this.setPhysics(m);\r\n  }\r\n  setPhysics(physics){\r\n\r\n    this.setSize();\r\n\r\n    //If physics have been set already and the same parameter was passed leave directly\r\n    if(this.body!==undefined&&physics===this.physics) return;\r\n\r\n    physics = physics!==undefined?physics:this.physics;\r\n\r\n    if(physics===null){\r\n      this.physics = null;\r\n      return this;\r\n    }\r\n\r\n    let mode = physics;\r\n\r\n    //Meaning it had physics before, which were stopped setting physics to false.\r\n    if(this.body!==undefined){\r\n      this.body.remove();\r\n      ////console.log('[Meta].physics() - Already have a body, so set this.body = null to get a new one]')\r\n    }\r\n\r\n    // console.log('[Meta].physics()-this.physics:'+this.physics);\r\n    // console.log('[Meta].physics()-_mode:'+mode);\r\n\r\n    //alert(this.rotation.y)\r\n\r\n    const body = {\r\n\r\n      type: this.graphics.type,\r\n\r\n      size: this.size,\r\n\r\n      pos: [this.position.x,this.position.y,this.position.z],\r\n      rot: [this.rotation.x,this.rotation.y,this.rotation.z],\r\n      \r\n      move: mode,\r\n      density: mode!==undefined&&mode.density!==undefined?mode.density:1,\r\n      friction: mode!==undefined&&mode.friction!==undefined?mode.friction:.5,\r\n      restitution: mode!==undefined&&mode.restitution!==undefined?mode.restitution:.5,\r\n      belongsTo: mode!==undefined&&mode.belongsTo!==undefined?mode.belongsTo:1,\r\n      collidesWith: mode!==undefined&&mode.collidesWith!==undefined?mode.collidesWith:0xffffffff,\r\n    \r\n    }\r\n\r\n    //log(body, name);\r\n\r\n    //@todo Should be: Physics.add(body);\r\n    this.body = world.add(body); //CLUE: This constantly add the current body position into this.body\r\n\r\n    //IMPORTANT: Save the new state!\r\n    this.physics = physics;\r\n    return this;\r\n  }\r\n\r\n  //Add life to Meta's life.\r\n  l(mode = 'on', life){\r\n    return this.live(mode = 'on', life);\r\n  }\r\n  live(mode = 'on', life){\r\n\r\n    switch(mode) {\r\n      case 'on': case 'o': case 1:\r\n        this.lifes.push(life);\r\n      break;\r\n      case 'again': case 'a': case 0:\r\n        this.lifes = [];\r\n        this.lifes.push(life);\r\n      break;\r\n    }\r\n   \r\n    return this;\r\n  }\r\n\r\n  appear(){return this.end()}\r\n  start(){\r\n    Space.get().start(this);\r\n    this.existence.started = true;\r\n  }\r\n\r\n  die(){return this.end()}\r\n  disappear(){return this.end()}\r\n  end(){\r\n    Space.get().end(this);\r\n    this.existence.ended = true;\r\n  }\r\n\r\n  //A Meta's Life\r\n  life(){\r\n\r\n    //Run ([E]existence, [G]raphics, [P]hysics)\r\n\r\n    //Run Existence\r\n    //start\r\n    if(this.existence.start!==null)\r\n      if(new Date(this.existence.start)<new Date()){\r\n        if(!this.existence.started)\r\n          this.start()\r\n      }\r\n\r\n    //end\r\n    if(this.existence.end!==null)\r\n    if(new Date()>new Date(this.existence.start)){\r\n        if(new Date()>new Date(this.existence.end)){\r\n          if(!this.existence.ended)\r\n            this.end();\r\n        }\r\n    }\r\n\r\n  }\r\n\r\n  /*\r\n    Color (set)\r\n  */\r\n  c(color){return this.color(color);}\r\n  color(color = Math.random()*0xffffff ){\r\n\r\n      switch(color){\r\n        case 0: case 'g': case 'gold':\r\n        color = 0xffd700;\r\n        break;\r\n        case 1: case 'r': case 'red':\r\n        color = 0xff0000;\r\n        break;\r\n        case 2: case 'g': case 'green':\r\n        color = 0x00ff00;\r\n        break;\r\n        case 3: case 'b': case 'blue':\r\n        color = 0x0000ff;\r\n        break;\r\n        case 4: case 'y': case 'yellow':\r\n        color = 0xffff00;\r\n        break;\r\n        case 5: case 'w': case 'white':\r\n        color = 0xffffff;\r\n        break;\r\n      }\r\n\r\n    this.graphics.color(color);\r\n    this._color = color;\r\n\r\n    return this;\r\n  }\r\n \r\n  add(instance){\r\n    this.graphics = instance;\r\n  }\r\n\r\n  i(ms,f){return this.in(ms,f)}\r\n  in(ms,f){\r\n    setTimeout(()=>{\r\n      f();\r\n    },ms)\r\n  }\r\n\r\n  e(ms,f){return this.every(ms,f)}\r\n  ev(ms,f){return this.every(ms,f)}\r\n  every(ms,f){\r\n    f();\r\n    setInterval(()=>{\r\n      f();\r\n    },ms)\r\n  }\r\n\r\n\r\n  static getWorld(){\r\n    return world;\r\n  }\r\n\r\n  static getBodies(){\r\n    return bodies;\r\n  }\r\n\r\n  static clear (){\r\n    bodies = [];\r\n    world = new OIMO.World();\r\n  }\r\n}\r\n","import * as THREE from 'three'\r\n\r\nimport './three/examples/js/loaders/GLTFLoader'\r\n\r\nimport {CubeGeometry,\r\n  MeshPhongMaterial,\r\n  Mesh,\r\n  DoubleSide} from 'three';\r\n\r\nimport Meta from '../Meta';\r\n\r\nconst _DEFAULT = {\r\nTYPE: 'box' // typ for physics\r\n}\r\n\r\n//console.log(new THREE.GLTFLoader())\r\n\r\nlet scope;\r\n\r\nexport default class Graphics {\r\n\r\nconstructor(props, stop = false){\r\n\r\n  scope = this\r\n\r\n  this.geometry = props!==undefined&&props.geometry!==undefined&&props.geometry!==true?props.geometry:new CubeGeometry();\r\n  this.material = props!==undefined&&props.material!==undefined&&props.material!==true?props.material:new MeshPhongMaterial({color:Math.random()*0xffffff, side: DoubleSide});\r\n\r\n  this.type = props!==undefined&&props.type!==undefined&&props.type!==true?props.type:_DEFAULT.TYPE;\r\n\r\n  this.mesh = props!==undefined&&props.mesh!==undefined&&props.mesh!==true?props.mesh:new Mesh(this.geometry, this.material);\r\n\r\n  this.model = props.model!==undefined?props.model:undefined;\r\n\r\n  this.loader = undefined;\r\n\r\n  if(this.model !== undefined){\r\n\r\n  //Add models default directory\r\n  this.model = 'models/'+this.model\r\n\r\n  this.mesh = new THREE.Object3D();\r\n\r\n  const extentions = [\r\n    'gltf'\r\n  ]\r\n  const loaders = [\r\n    'new THREE.GLTFLoader()'\r\n  ]\r\n\r\n  //Check for provided file extention\r\n  if(this.model.includes(\".\")){\r\n\r\n    //Auto-detect loader by provided model file extension\r\n    let fileExtention;\r\n    \r\n    const pattern = /\\.([0-9a-z]+)(?:[\\?#]|$)/i;\r\n\r\n    const result = this.model.match(pattern);\r\n\r\n    fileExtention = result[1]\r\n\r\n    scope.loader = eval(loaders[extentions.indexOf(fileExtention)])\r\n\r\n    loadModel(scope.loader)\r\n\r\n    return\r\n  }\r\n\r\n  //Auto-detect loader by testing model file extension\r\n  extentions.forEach((extention) => {\r\n    if(scope.loader!==undefined) return;\r\n    fetch(this.model+extention)\r\n    .then(function(response) {\r\n      if(response.status===200){\r\n        scope.loader = eval(loaders[extentions.indexOf(extention)])\r\n        //Add extentions to model file path\r\n        scope.model = scope.model+'.'+extention\r\n        //load model\r\n        loadModel(scope.loader)\r\n      }\r\n    })\r\n    .catch(error => console.error(error));\r\n  })\r\n\r\n  function loadModel(loader){\r\n    loader.load( scope.model, ( gltf ) => {\r\n      scope.mesh.add( gltf.scene );\r\n    });\r\n  }\r\n\r\n\r\n}\r\n\r\nthis.physics = true;\r\n\r\nif(props.p!==undefined)\r\nthis.physics  = props.p;\r\n\r\nif(props.physics!==undefined)\r\nthis.physics  = props.physics;\r\n\r\n//Stop the recursion if stop is set\r\nif(stop)\r\nreturn this;\r\n\r\n//console.log('[Graphics] - Has no caller, so go to Meta first')\r\n\r\nreturn new Meta({graphics: this, physics: this.physics});\r\n\r\n}\r\n\r\nsetPosition(position){\r\nthis.mesh.position.copy(position)\r\nreturn this;\r\n}\r\n\r\nsetRotation(rotation){\r\n  this.mesh.rotation.x = rotation.x\r\n  this.mesh.rotation.y = rotation.y\r\n  this.mesh.rotation.z = rotation.z\r\n\r\n  return this;\r\n}\r\n\r\ncolor(color){\r\n//this.mesh.material.color.set(color);\r\nreturn this;\r\n}\r\n\r\nadd(instance){\r\nthis.geometry = instance;\r\n}\r\n\r\n}\r\n","import {CubeGeometry} from 'three';\r\n\r\nimport Graphics from '../Graphics';\r\n\r\nimport Space from '../../../Space';\r\n\r\nconst _DEFAULT = {\r\n  WIDTH: 1,\r\n  HEIGHT: 1,\r\n  LENGTH: 1,\r\n  SCALE: .5\r\n};\r\n\r\nexport default class Cube {\r\n\r\n  constructor(props = {}, stop = false){\r\n\r\n    let scale = _DEFAULT.SCALE;\r\n\r\n    if(typeof(props)==='boolean') stop = props;\r\n\r\n    let _width  = props.w||props.width||_DEFAULT.WIDTH;\r\n    let _height = props.h||props.height||_DEFAULT.HEIGHT;\r\n    let _length = props.l||props.length||_DEFAULT.LENGTH;\r\n\r\n    if(typeof(props)==='number') _width = _height = _length = props;\r\n\r\n    _width = _width * scale\r\n    _height = _height * scale;\r\n    _length = _length * scale;\r\n\r\n    this.geometry = new CubeGeometry( _width, _height, _length );\r\n    this.type     = 'box'; //This is for the physics. Doesnt really belong in here.\r\n\r\n    //Go recursive if stop is not set\r\n    return stop?this.geometry:new Graphics(this);\r\n\r\n  }\r\n\r\n}\r\n","import config from '../../../../config';\r\nimport log from '../../../Utilities/log';\r\n\r\nimport {Vector3,\r\n\t\tTextureLoader,\r\n\t\tMesh,\r\n\t\tIcosahedronGeometry,\r\n\t\tSphereGeometry,\r\n\t\tBox3,\r\n\t\tMeshBasicMaterial} from 'three';\r\n\r\nimport {ViveController} from './Controls/ViveController';\r\n\r\nimport OBJLoader from './Loaders/OBJLoader';\r\n\r\nimport Cube from '../../Meta/Graphics/Geometries/Cube';\r\n\r\nimport Space from '../../../Space/Space';\r\n\r\n\r\nlet hints;\r\n\r\nlet scope;\r\n\r\nlet touch1 = false;\r\nlet touch2 = false;\r\n\r\nlet _touch0 = false;\r\nlet _touch1 = false;\r\n\r\nlet _release0 = false;\r\n\r\nlet _touch = {\r\n\t0:false,\r\n\t1:false\r\n}\r\n\r\nlet keys = {\r\n\tesc: false,\r\n\tenter:false,\r\n\tspace:false\r\n}\r\n\r\nconst _DEFAULT = {\r\n  FOG: {\r\n    FAR: 6.25\r\n  },\r\n  LOG: false\r\n}\r\n\r\nlet touchedMeta1 = false;\r\nlet touchedMetaData1 = false;\r\n\r\nlet touchedMeta2 = false;\r\nlet touchedMetaData2 = false;\r\n\r\nlet intersected = [];\r\n\r\n/** This class represents a HMD(Head Mounted Display) Controller.\r\n* @constructor\r\n* @param {Object} space The space instance\r\n*/\r\nexport default class HeadMountedDisplay {\r\n\r\n\tconstructor(space){\r\n\r\n\t\tscope = this;\r\n\r\n\t\tthis.name = 'HeadMountedDisplay';\r\n\r\n\t\tthis.space = space;\r\n\r\n\t\tnavigator.getVRDisplays()\r\n\r\n\t\t\t.then( function ( displays ) {\r\n\r\n\t\t\t\tif ( displays.length > 0 ) {\r\n\r\n\t\t\t\t\tconst display = displays[ 0 ];\r\n\r\n\t\t\t\t\tspace.renderer.vr.setDevice( display );\r\n\t\t\t\t\tspace.renderer.vr.enabled = true;\r\n\r\n\t\t\t\t\tspace.scene.fog.far = _DEFAULT.FOG.FAR;\r\n\r\n\t\t\t\t\t//Important!\r\n\t\t\t\t\tspace.device = scope;\r\n\r\n\t\t\t\t\tlog(`[${scope.name}] - Press (Space) + (Enter) to enter VR`, scope.name, true) \r\n\r\n\t\t\t\t\tdocument.addEventListener('dblclick', (event) => {\r\n\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tdisplay.isPresenting ? display.exitPresent() : display.requestPresent( [ { source: space.renderer.domElement } ] );\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\taddEventListener('dblclick', (event) => {\r\n\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tdisplay.isPresenting ? display.exitPresent() : display.requestPresent( [ { source: space.renderer.domElement } ] );\t\t\t\t\t\t\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\tdocument.addEventListener( 'keydown', (event) => {\r\n\r\n\t\t\t\t\t\tswitch ( event.keyCode ) {\r\n\t\t\t\t\t\t\tcase 13: //enter\r\n\t\t\t\t\t\t\t\tkeys.enter = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\t\t\t\t\tcase 27: //escape\r\n\t\t\t\t\t\t\t\tkeys.esc = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\t\t\t\t\tcase 32: //space\r\n\t\t\t\t\t\t\t\tkeys.space = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\t\t\tif(keys.enter&&keys.space){\r\n\r\n\t\t\t\t\t\t\tlog(`[${scope.name}] - ${!display.isPresenting?'Entered':'Exited'} VR`, scope.name, true)\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tdisplay.isPresenting ? display.exitPresent() : display.requestPresent( [ { source: space.renderer.domElement } ] );\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\t\t}, false );\r\n\t\t\t\r\n\t\t\t\t\tdocument.addEventListener( 'keyup', (event) => {\r\n\t\t\t\r\n\t\t\t\t\t\tswitch ( event.keyCode ) {\r\n\t\t\t\r\n\t\t\t\t\t\t\tcase 13: //enter\r\n\t\t\t\t\t\t\t\tkeys.enter = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\t\t\t\t\tcase 27: //escape\r\n\t\t\t\t\t\t\t\tkeys.esc = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\t\t\t\t\tcase 32: //space\r\n\t\t\t\t\t\t\t\tkeys.space = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\t\t}, false );\r\n\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t//No VR\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} );\r\n\r\n\r\n\r\n\r\n \r\n\t\tfunction onThumbpadDown0(){\r\n\r\n\t\t\tconsole.log(this.name+' - onThumbpadDown0')\r\n\r\n\t\t}\r\n\t\tfunction onThumbpadUp0(){\r\n\r\n\t\t\tconsole.log('onThumbpadUp0')\r\n\r\n\t\t}\r\n\t\tfunction onMenuDown0(){\r\n\r\n\t\t\tconsole.log('onMenuDown0')\r\n\r\n\t\t}\r\n\t\tfunction onMenuUp0(){\r\n\r\n\t\t\tconsole.log('onMenuUp0')\r\n\r\n\t\t}\r\n\t\tfunction onGripsDown0(){\r\n\r\n\t\t\tconsole.log('onGripsDown0')\r\n\r\n\t\t}\r\n\t\tfunction onGripsUp0(){\r\n\r\n\t\t\tconsole.log('onGripsUp0')\r\n\r\n\t\t}\r\n\r\n\t\tthis.controller1 = new ViveController( 0 );\r\n\t\tthis.controller1.standingMatrix = scope.space.renderer.vr.getStandingMatrix();\r\n\r\n\t\t//console.log(scope.space.renderer.vr.getStandingMatrix())\r\n\r\n\t\tthis.controller1.addEventListener( 'triggerdown', scope.onTriggerDown1 );\r\n\t\tthis.controller1.addEventListener( 'triggerup', scope.onTriggerUp1);\r\n\r\n\t\tthis.controller1.addEventListener( 'thumbpaddown', onThumbpadDown0 );\r\n\t\tthis.controller1.addEventListener( 'thumbpadup', onThumbpadUp0 );\r\n\r\n\t\tthis.controller1.addEventListener( 'menudown', onMenuDown0 );\r\n\t\tthis.controller1.addEventListener( 'menuup', ()=>{Space.clear({events:false})} );\r\n\r\n\t\tthis.controller1.addEventListener( 'gripsdown', onGripsDown0 );\r\n\t\tthis.controller1.addEventListener( 'gripsup', onGripsUp0 );\r\n\r\n\t\tscope.space.scene.add(scope.controller1);\r\n\r\n\t\tthis.controller2 = new ViveController( 1 );\r\n\t\tthis.controller2.standingMatrix = scope.space.renderer.vr.getStandingMatrix();\r\n\r\n\t\tthis.controller2.addEventListener( 'triggerdown', scope.onTriggerDown2 );\r\n\t\tthis.controller2.addEventListener( 'triggerup', scope.onTriggerUp2);\r\n\r\n\t\tthis.controller2.addEventListener( 'thumbpaddown', onThumbpadDown0 );\r\n\t\tthis.controller2.addEventListener( 'thumbpadup', onThumbpadUp0 );\r\n\r\n\t\tthis.controller2.addEventListener( 'menudown', onMenuDown0 );\r\n\t\tthis.controller2.addEventListener( 'menuup', ()=>{Space.clear({events:false})} );\r\n\r\n\t\tthis.controller2.addEventListener( 'gripsdown', onGripsDown0 );\r\n\t\tthis.controller2.addEventListener( 'gripsup', onGripsUp0 );\r\n\r\n\t\tscope.space.scene.add(scope.controller2);\r\n\r\n\t\tif(config.device.headMountedDisplay.controllerModels){\r\n\r\n\t\t\tvar loader = new OBJLoader();\r\n\t\t\tloader.setPath( '/static/models/vive-controller/' );\r\n\r\n\t\t\tloader.load( 'vr_controller_vive_1_5.obj', function ( object ) {\r\n\r\n\t\t\t\tvar loader = new TextureLoader();\r\n\t\t\t\tloader.setPath( '/static/models/vive-controller/' );\r\n\t\t\t\tvar controller = object.children[ 0 ];\r\n\t\t\t\tcontroller.material.map = loader.load( 'onepointfive_texture.png' );\r\n\t\t\t\tcontroller.material.specularMap = loader.load( 'onepointfive_spec.png' );\r\n\t\t\t\tcontroller.castShadow = true;\r\n\t\t\t\tcontroller.receiveShadow = true;\r\n\r\n\t\t\t\tvar pivot = new Mesh( new IcosahedronGeometry( 0.01, 2 ) );\r\n\t\t\t\tpivot.name = 'pivot';\r\n\t\t\t\tpivot.position.y = -0.016;\r\n\t\t\t\tpivot.position.z = -0.043;\r\n\t\t\t\tpivot.rotation.x = Math.PI / 5.5;\r\n\r\n\t\t\t\tcontroller.add( pivot );\r\n\t\t\t\tpivot.material = pivot.material.clone();\r\n\r\n\t\t\t\tscope.controller1.add( controller.clone() );\r\n\t\t\t\tscope.controller2.add( controller.clone() );\r\n\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\r\n\t\t\tvar pivot = new Mesh( new SphereGeometry( .025, 2, 2 ), new MeshBasicMaterial({color:0x0000ff}) );\r\n\t\t\tpivot.name = 'pivot';\r\n\r\n\t\t\tscope.controller1.add( pivot );\r\n\t\t\tscope.controller2.add( pivot.clone() );\r\n\t\t\t\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\r\n\tonTriggerDown2(controller){\r\n\t\r\n\t\tlet data = [{\r\n\t\t\tposition : new Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)\r\n\t\t}];\r\n\t\t\r\n\t\tif(scope.controller2)\r\n\t\tdata.push(\r\n\t\t\t{\r\n\t\t\t\tposition : new Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(touchedMeta2){\r\n\t\t\ttouchedMeta2.go('touch', data, touchedMeta2);\r\n\t\t}else{\r\n\t\t\tscope.space.go('touch', data[0], scope.space);\r\n\t\t}\r\n\r\n\t}\r\n\t\r\n\tonTriggerUp2(controller){\r\n\r\n\t\tlet data = [{\r\n\t\t\tposition : new Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)\r\n\t\t}];\r\n\t\t\r\n\t\tif(scope.controller2)\r\n\t\tdata.push(\r\n\t\t\t{\r\n\t\t\t\tposition : new Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(touchedMeta2){\r\n\t\t\ttouchedMeta2.go('release', data, touchedMeta2);\r\n\t\t}else{\r\n\t\t\tscope.space.go('release', data[0], scope.space);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tonTriggerDown1(){\r\n\r\n\t\tlet\tposition = new Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)\r\n\r\n\t\tlet data = [{\r\n\t\t\tposition: position\r\n\t\t}];\r\n\t\t\r\n\t\tif(scope.controller2)\r\n\t\tdata.push(\r\n\t\t\t{\r\n\t\t\t\tposition : new Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(touchedMeta1){\r\n\t\t\ttouchedMeta1.go('touch', data, touchedMeta1);\r\n\t\t}else{\r\n\t\t\tscope.space.go('touch', data[0], scope.space);\r\n\t\t}\r\n\r\n\t}\r\n\t\t\t\r\n\tonTriggerUp1(mode = true){\r\n\r\n\t\tlet data = [{\r\n\t\t\tposition : new Vector3().setFromMatrixPosition(scope.controller1.matrixWorld)\r\n\t\t}];\r\n\t\t\r\n\t\tif(scope.controller2)\r\n\t\tdata.push(\r\n\t\t\t{\r\n\t\t\t\tposition : new Vector3().setFromMatrixPosition(scope.controller2.matrixWorld)\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(touchedMeta1){\r\n\t\t\ttouchedMeta1.go('release', data, touchedMeta1);\r\n\t\t}else{\r\n\t\t\tscope.space.go('release', data[0], scope.space);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tintersect1(){\r\n\r\n\t   scope.space.Meta.forEach((Meta) => {\r\n\r\n\t\t\tlet point = new Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);\r\n\t\t\tlet box = new Box3().setFromObject(Meta.graphics.mesh);\r\n\t\t\tlet distance = box.distanceToPoint(point);\r\n\r\n\t\t\tconst data = [{\r\n\t\t\t\thand:0,\r\n\t\t\t\tdistance: distance,\r\n\t\t\t\tposition: point\r\n\t\t\t}]\r\n\r\n\t\t\tif(scope.controller2){\r\n\r\n\t\t\t\tlet point = new Vector3().setFromMatrixPosition(scope.controller2.matrixWorld);\r\n\t\t\t\tlet box = new Box3().setFromObject(Meta.graphics.mesh);\r\n\t\t\t\tlet distance = box.distanceToPoint(point);\r\n\t\t\t\t\r\n\t\t\t\tdata.push({\r\n\t\t\t\t\thand:1,\r\n\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\tposition: point\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(distance<=0){\r\n\r\n\t\t\t\ttouchedMeta1 = Meta;\r\n\t\t\t\ttouchedMetaData1 = data;\r\n\r\n\t\t\t\tif(!Meta._entered1){\r\n\t\t\t\t\tMeta.go('touch', data, Meta)\r\n\t\t\t\t\tMeta.go('enter', data, Meta)\r\n\t\t\t\t\tMeta._entered1 = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\t\r\n\r\n\t\t\t\tif(Meta._entered1){\r\n\r\n\t\t\t\t\ttouchedMeta1 = false;\r\n\t\t\t\t\ttouchedMetaData1 = data;\r\n\r\n\t\t\t\t\tMeta.go('leave', data, Meta)\r\n\t\t\t\t\tMeta._entered1 = false;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\r\n\t\t\t}\r\n\r\n\r\n\t\t});\r\n\r\n\t}\r\n\r\n\r\n\tintersect2(){\r\n\r\n\t\tscope.space.Meta.forEach((Meta) => {\r\n\r\n\t\t\tlet point = new Vector3().setFromMatrixPosition(scope.controller2.matrixWorld);\r\n\t\t\tlet box = new Box3().setFromObject(Meta.graphics.mesh);\r\n\t\t\tlet distance = box.distanceToPoint(point);\r\n\r\n\t\t\tconst data = [{\r\n\t\t\t\tdistance: distance,\r\n\t\t\t\tposition: point\r\n\t\t\t}]\r\n\r\n\t\t\tif(scope.controller2){\r\n\r\n\t\t\t\tlet point = new Vector3().setFromMatrixPosition(scope.controller1.matrixWorld);\r\n\t\t\t\tlet box = new Box3().setFromObject(Meta.graphics.mesh);\r\n\t\t\t\tlet distance = box.distanceToPoint(point);\r\n\t\t\t\t\r\n\t\t\t\tdata.push({\r\n\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\tposition: point\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(distance<=0){\r\n\r\n\t\t\t\ttouchedMeta2 = Meta;\r\n\t\t\t\ttouchedMetaData2 = data;\r\n\r\n\t\t\t\tif(!Meta._entered2){\r\n\t\t\t\t\tMeta.go('enter', data, Meta)\r\n\t\t\t\t\tMeta._entered2= true;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\t\r\n\r\n\t\t\t\tif(Meta._entered2){\r\n\r\n\t\t\t\t\ttouchedMeta2 = false;\r\n\t\t\t\t\ttouchedMetaData2 = data;\r\n\r\n\t\t\t\t\tMeta.go('leave', data, Meta)\r\n\t\t\t\t\tMeta._entered2 = false;\r\n\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\trender(){\r\n\r\n\t\tscope.controller1.update();\r\n\t\tscope.controller2.update();\r\n\r\n\t\tif(scope.controller1)\r\n\t\t\tscope.intersect1();\r\n\t\t\r\n\t\tif(scope.controller2)\r\n\t\t\tscope.intersect2();\r\n\r\n\t}\r\n\r\n}","import log from '../../Utilities/log';\r\nimport isMobile from '../../Utilities/isMobile';\r\n\r\nimport DesktopDeviceController from './Desktop/DesktopDeviceController';\r\nimport MobileDeviceController from './Mobile/MobileDeviceController';\r\nimport HeadMountedDisplay from './HeadMountedDisplay/HeadMountedDisplay';\r\n\r\nlet instance = null;\r\n\r\nexport default class Device {\r\n\r\n  constructor(space){\r\n\r\n    this.name = `DeviceManager`\r\n\r\n    if ( navigator.getVRDisplays !== undefined ) {\r\n\r\n      navigator.getVRDisplays().then((displays) => {\r\n\r\n        if(displays.length>0){\r\n\r\n          log(`Detected: Desktop, VR: true`, this.name, true)\r\n\r\n          instance = new HeadMountedDisplay(space);\r\n    \r\n          return instance;\r\n\r\n        }else{\r\n\r\n          if(isMobile.any()){\r\n\r\n            log(`Detected: Mobile, VR: false`, this.name, true);\r\n    \r\n            return new MobileDeviceController(space)\r\n    \r\n          }else{\r\n    \r\n            log(`Detected: Desktop, VR: false`, this.name, true);\r\n            \r\n            instance = new DesktopDeviceController(space);\r\n    \r\n            return instance;\r\n    \r\n          }\r\n\r\n        }\r\n      \r\n      })\r\n\r\n\r\n    } else {\r\n\r\n       if(isMobile.any()){\r\n\r\n           log(`Detected: Mobile, VR: false`, this.name, true);\r\n    \r\n            return new MobileDeviceController(space);\r\n    \r\n          }else{\r\n\r\n            log(`Detected: Desktop, VR: false`, this.name, true);\r\n    \r\n            instance = new DesktopDeviceController(space);\r\n    \r\n            return instance;\r\n    \r\n          }\r\n      \r\n    }\r\n\r\n  }\r\n\r\n  static get(){\r\n    return instance;\r\n  }\r\n\r\n}\r\n","import config from '../../config';\r\n\r\nimport {WebGLRenderer,\r\n        Scene,\r\n        Fog,\r\n        PerspectiveCamera,\r\n        AmbientLight,\r\n        DirectionalLight,\r\n        Mesh,\r\n        Object3D,\r\n        Vector3,\r\n        GridHelper,\r\n        Clock} from 'three';\r\n\r\nimport Device   from './Device/Device';\r\n\r\nimport Meta   from './Meta/Meta';\r\nimport Graphics from './Meta/Graphics/Graphics';\r\nimport Cube     from './Meta/Graphics/Geometries/Cube';\r\n\r\nlet scope;\r\n\r\nlet renderer, scene, camera, controls, container;\r\n\r\nlet animate;\r\n\r\nlet stop = false;\r\n\r\nlet instance = false;\r\n\r\nlet clock;\r\n\r\nlet _default;\r\n\r\n/** This class represents a relative space.\r\n* @constructor\r\n* @param {Object} props\r\n* @param {String} props.color  The space's color.\r\n* @param {String} props.Meta   Meta that should come with the space.\r\n*/\r\n\r\nexport default class Space {\r\n\r\n  constructor(props){\r\n\r\n    _default = {\r\n      color: config.space.color\r\n    }\r\n\r\n    //Handle Props\r\n    const _Meta = props&&props.Meta!==undefined?props.Meta:false;\r\n    const _color = props&&props.color!==undefined?props.color:_default.color;\r\n\r\n    //Reset clock\r\n    clock = new Clock();\r\n\r\n    //If we already have a space just reassign the props\r\n    if(instance){\r\n      \r\n      Space.clear();\r\n\r\n      Space.get().renderer.setClearColor(_color);\r\n      Space.get().scene.fog = new Fog( _color, 0, 5 );\r\n\r\n      return Space.get();\r\n    }\r\n\r\n    scope = this;\r\n\r\n    instance = this;\r\n\r\n    /**\r\n    * Contains all Events in space.\r\n    */\r\n    this.events = [];\r\n\r\n    /**\r\n    * Contains all Meta in space.\r\n    */\r\n    this.Meta = [];\r\n\r\n\r\n    /**\r\n    * Contains all Intervals in space. (Should Go To Void later)\r\n    */\r\n    this.intervals = [];\r\n\r\n    /*\r\n    Init Renderer\r\n    */\r\n\r\n    document.body.style.margin = '0';\r\n\r\n    this.renderer = new WebGLRenderer({antialias: true});\r\n    this.renderer.setSize(innerWidth, innerHeight);\r\n    this.renderer.setViewport ( 0, 0, innerWidth, innerHeight );\r\n    this.renderer.setPixelRatio(window.devicePixelRatio);\r\n    this.renderer.setClearColor(_color);\r\n\r\n    this.renderer.gammaInput = true;\r\n    this.renderer.gammaOutput = true;\r\n\r\n    this.renderer.autoClear = true;\r\n\r\n    this.renderer.domElement.id = \"renderer\";\r\n    this.renderer.domElement.style.position = 'fixed';\r\n    this.renderer.domElement.style.zIndex = '0';\r\n    this.renderer.domElement.style.left = '0';\r\n    this.renderer.domElement.style.top = '0';\r\n\r\n    this.renderer.animate( scope.render );\r\n\r\n    document.body.appendChild(this.renderer.domElement);\r\n\r\n    this.scene = new Scene();\r\n    this.scene.fog = new Fog( _color, 0, 6.25 );\r\n\r\n    this.camera = new PerspectiveCamera(55, innerWidth / innerHeight, .01, 1000);\r\n    this.scene.add(this.camera);\r\n\r\n    let light = new AmbientLight(0xffffff, .5)\r\n        light.position.set(25,50,25);\r\n    this.scene.add(light);\r\n\r\n        light = new DirectionalLight(0xffffff, 1)\r\n        light.position.set(25,25,25);\r\n    this.scene.add(light);\r\n\r\n        light = new DirectionalLight(0xffffff, 1)\r\n        light.position.set(-25,25,-25);\r\n    this.scene.add(light);\r\n\r\n    addEventListener('resize', (event) => {\r\n      this.camera.aspect = window.innerWidth / window.innerHeight;\r\n      this.camera.updateProjectionMatrix();\r\n      this.renderer.setSize( window.innerWidth, window.innerHeight );\r\n    })\r\n\r\n    /*\r\n      Container\r\n      The container is adjusted buy this the specifix device controller\r\n      (Move everything down a little on desktop and mobile,\r\n      to hava a human point of view)\r\n    */\r\n\r\n    this.container = new Object3D();\r\n    this.scene.add(this.container);\r\n\r\n    /*\r\n     Detect and initialize device\r\n    */\r\n    this.device = new Device(this);\r\n\r\n    //Was any Meta already provided instantiating this space add it.\r\n    if(_Meta) this.add(_Meta)\r\n\r\n    //Run\r\n    this.render();\r\n\r\n    //Add to window object\r\n    window.__SPACE__ = this;\r\n\r\n    return this;\r\n\r\n  }\r\n\r\n  on(eventName, callback){\r\n    if(typeof(eventName)==\"function\"){\r\n      callback  = eventName;\r\n      eventName = 'p';\r\n    }\r\n\r\n    if(eventName=='t')\r\n       eventName='touch';\r\n    if(eventName=='r')\r\n       eventName='release';\r\n    if(eventName=='p')\r\n       eventName='point';\r\n\r\n    if(this.events[eventName]){\r\n      this.events[eventName].push(callback);\r\n    }else{\r\n      this.events[eventName] = [callback];\r\n    }\r\n    return this;\r\n  }\r\n\r\n  go(eventName, ...rest){\r\n    if(this.events[eventName]){\r\n        this.events[eventName].forEach(cb =>{\r\n          cb(...rest, this);\r\n        })\r\n    }\r\n    return this;\r\n  }\r\n\r\n  add(Meta){\r\n\r\n    /*\r\n      Handle Library Systems: (3rd, self - pattern: First handle 3rd party and self system\r\n    */\r\n\r\n    /*\r\n      Graphics (three.js)\r\n    */\r\n\r\n    /*\r\n      Physics (oimo.js) TODO This should happen in here! Not in Meta!\r\n    */\r\n\r\n    /*\r\n      Add to Meta System:\r\n    */\r\n\r\n    this.Meta.push(Meta);\r\n\r\n  }\r\n\r\n  start(Meta){\r\n    this.container.add(Meta.graphics.mesh);\r\n  }\r\n\r\n  remove(Meta){\r\n\r\n    /*\r\n      Handle Library Systems: (3rd, self - pattern: First handle 3rd party and self system\r\n    */\r\n    /*\r\n      Graphics (three.js)\r\n    */\r\n\r\n    /*\r\n      Physics (oimo.js) TODO This should happen in here! Not in Meta!\r\n    */\r\n\r\n    /*\r\n      Remove from Meta System:\r\n      @TODO IMPORTANT\r\n    */\r\n\r\n    // this.Meta.push(Meta);\r\n\r\n  }\r\n\r\n  end(Meta){\r\n    this.container.remove(Meta.graphics.mesh);\r\n  }\r\n\r\n\r\n  /**\r\n   * This is literally the space's lifecylce. Everything in here lives.\r\n   */\r\n  life(){\r\n\r\n    let time = clock.getElapsedTime()\r\n\r\n    this.Meta.forEach((Meta) => {\r\n\r\n      //Physics\r\n      if(Meta._physics!==null&&Meta.body!==undefined){\r\n        Meta.graphics.mesh.position.copy( Meta.body.getPosition() );\r\n        Meta.graphics.mesh.quaternion.copy( Meta.body.getQuaternion() );\r\n      }else{\r\n\r\n        //Lifes\r\n        Meta.lifes.map((life) => {\r\n          life(Meta,time);\r\n        })\r\n\r\n      }\r\n\r\n      //Existence\r\n      Meta.life();\r\n\r\n    });\r\n\r\n  }\r\n\r\n  render(){\r\n\r\n    if(stop) return;\r\n\r\n    //Run Life (everything affected by the two (all the Meta so far)\r\n    scope.life();\r\n\r\n    //Run Device Controller\r\n    if(scope!==undefined&&scope.device!==undefined&&scope.device.render!==undefined)\r\n    scope.device.render();\r\n\r\n    //Run physics system (oimo lybrary)\r\n    Meta.getWorld().step();\r\n\r\n    //Run graphics system (three.js libraray)\r\n    scope.renderer.render(scope.scene, scope.camera);\r\n    \r\n  }\r\n\r\n  static get(){\r\n\r\n    if(!instance) new Space();\r\n\r\n    return instance;\r\n\r\n  }\r\n\r\n  static clear(options){\r\n\r\n    /*\r\n      As always: Go by 3rd-self-pattern:\r\n      Handle 3rd party libraries first,\r\n      than your own code.\r\n    */\r\n\r\n    //If there hasn't been any space yet leave directly.\r\n    if(!instance) return;\r\n\r\n\r\n    const _Meta = options!==undefined&&options.Meta!==undefined?options.Meta:true;\r\n    const _events = options!==undefined&&options.events!==undefined?options.events:true;\r\n    const _intervals = options!==undefined&&options.intervals!==undefined?options.intervals:true;\r\n\r\n\r\n    /*\r\n      Handle Library Systems(3rd):\r\n    */\r\n\r\n    //Graphics (three)\r\n    //@todo should be Graphics.clear()\r\n    if(scope&&scope.container&&scope.container.children){\r\n      //console.log('[Space] - Clear() - Container children before: '+scope.container.children.length)\r\n      for (var i = scope.container.children.length - 1; i >= 0; i--) {\r\n        scope.container.remove(scope.container.children[i]);\r\n      }\r\n      //console.log('[Space] - Clear() - Container children after: '+scope.container.children.length)\r\n    }\r\n\r\n    //Physics (oimo)\r\n    //@todo should be Physics.clear()\r\n    Meta.clear();\r\n\r\n    /*\r\n      Handle Meta System (self):\r\n    */\r\n\r\n    //Drop all Meta\r\n     //@todo should be Meta.clear()\r\n    if(_Meta)\r\n    scope.Meta = [];\r\n    //Drop all events\r\n    if(_events)\r\n    scope.events = [];\r\n    //Drop all intervals\r\n    if(_intervals)\r\n    scope.intervals.forEach((interval)=>{\r\n      clearInterval(interval)\r\n    })\r\n    scope.intervals = [];\r\n  }\r\n\r\n  timer(fun, interval){\r\n    fun();\r\n    const _interval = setInterval(fun, interval);\r\n    this.intervals.push(_interval)\r\n  }\r\n\r\n}\r\n\r\nconst on = (eventName, callback) => {\r\n  return Space.get().on(eventName, callback);\r\n}\r\n\r\nconst timer = (fun, interval) => {\r\n  return Space.get().timer(fun, interval);\r\n}\r\n\r\nexport {on, timer};\r\n","import {SphereGeometry} from 'three';\r\n\r\nimport Graphics from '../Graphics';\r\n\r\nimport Space from '../../../Space';\r\n\r\nconst _DEFAULT = {\r\n  RADIUS: .5,\r\n  SEGMENTS: 32,\r\n  SCALE: 1\r\n}\r\n\r\nexport default class Sphere {\r\n\r\n  constructor(props = {}, stop = false){\r\n\r\n    if(typeof(props)==='boolean') stop = props;\r\n\r\n    let scale = _DEFAULT.SCALE;\r\n\r\n    let _radius = props.r||props.radius||_DEFAULT.RADIUS;\r\n\r\n    _radius *= scale;\r\n\r\n    if(typeof(props)==='number') _radius = props;\r\n\r\n    this.geometry = new SphereGeometry( _radius, _DEFAULT.SEGMENTS, _DEFAULT.SEGMENTS );\r\n    this.geometry.rotateX(-Math.PI/2);\r\n\r\n    this.type     = 'sphere'; //This is for the physiscs @todo Should go somewhere else.\r\n\r\n    //Go recursive if stop isnt set.\r\n    return stop?this.geometry:new Graphics(this);\r\n\r\n  }\r\n\r\n}\r\n","import {CylinderGeometry} from 'three';\r\n\r\nimport Graphics from '../Graphics';\r\n\r\nimport Space from '../../../Space';\r\n//import Desktop from '../../../Device/Desktop/Desktop';\r\n\r\nconst _DEFAULT = {\r\n  TOP: 0,\r\n  BOTTOM: 0.25,\r\n  HEIGHT: 1,\r\n\r\n  SEGMENTS: 32,\r\n  SCALE: 1\r\n}\r\n\r\nexport default class Cylinder {\r\n\r\n  constructor(props = {}, stop = false){\r\n\r\n    if(typeof(props)==='boolean') stop = props;\r\n\r\n    let scale = _DEFAULT.SCALE;\r\n\r\n    let _top    = props.t||props.top||_DEFAULT.TOP;\r\n    let _bottom = props.b||props.bottom||_DEFAULT.BOTTOM;\r\n    let _height = props.h||props.height||_DEFAULT.HEIGHT;\r\n\r\n    if(typeof(props)==='number') _top = _bottom = props/2;\r\n    if(typeof(props)==='number') _height = props;\r\n\r\n    _top *= scale;\r\n    _bottom *= scale;\r\n    _height *= scale;\r\n\r\n    this.geometry = new CylinderGeometry(_top, _bottom, _height, _DEFAULT.SEGMENTS );\r\n    this.type     = 'cylinder';\r\n\r\n   //Go recursive if stop isnt set.\r\n   return stop?this.geometry:new Graphics(this);\r\n\r\n  }\r\n\r\n}\r\n\r\n\r\n// if(radiusTop===undefined&&radiusBottom===undefined&&height===undefined){\r\n//   height = 5;\r\n//   radiusTop = height/2;\r\n//   radiusBottom= height/2;\r\n// }\r\n//\r\n// if(radiusBottom===undefined&&height===undefined){\r\n//   radiusTop = height/2;\r\n//   radiusBottom= height/2;\r\n// }\r\n//\r\n// if(height===undefined){\r\n//   height = radiusBottom*2;\r\n// }\r\n","import {PlaneGeometry} from 'three';\r\n\r\nimport Graphics from '../Graphics'\r\n\r\nconst _DEFAULT = {\r\n  WIDTH: 1,\r\n  LENGTH: 1\r\n}\r\n\r\nexport default class Plane {\r\n\r\n  constructor(props = {}, stop = false){\r\n\r\n    if(typeof(props)==='boolean') stop = props;\r\n\r\n    const _width = props.width||props.w||_DEFAULT.WIDTH;\r\n    const _length = props.length||props.l||_DEFAULT.LENGTH;\r\n\r\n    this.physics = true;\r\n\r\n    if(props.p!==undefined)\r\n      this.physics  = props.p;\r\n\r\n    if(props.physics!==undefined)\r\n      this.physics  = props.physics;\r\n\r\n    this.geometry = new PlaneGeometry( _width, _length );\r\n    this.geometry.rotateX(-Math.PI/2);\r\n    this.type     = 'box';\r\n\r\n    //Stop the recursion if stop is set\r\n    if(stop)\r\n      return this.geometry;\r\n\r\n    ////console.log('[Sphere] - Has no caller, so go recursive: to Graphics first!');\r\n\r\n    return new Graphics(this);\r\n\r\n  }\r\n\r\n}\r\n","/*\r\n\r\n  CUSTOM Meta\r\n\r\n  !IMPORTANT:\r\n\r\n  Custom Meta's properties must have a\r\n  false argument as a last property,\r\n  which stops the recursion instaniation.\r\n\r\n*/\r\n\r\nimport Meta   from '../Meta';\r\n\r\nimport Graphics from '../Graphics/Graphics';\r\n\r\nimport Cube    from '../Graphics/Geometries/Cube';\r\n\r\nconst _DEFAULT = {\r\n  COLOR: 0x898989\r\n};\r\n\r\nexport default class Ground {\r\n\r\n  constructor(props){\r\n\r\n    const _color = props!==undefined&&props.color!==undefined?props.color:_DEFAULT.COLOR;\r\n\r\n    return new Meta({\r\n\r\n      physics: false,\r\n\r\n      graphics: new Graphics(\r\n\r\n        {\r\n          geometry: new Cube(\r\n\r\n            {\r\n\r\n              width: 100,\r\n              height: 0.001,\r\n              length: 100\r\n\r\n            }, true) // !IMPORTANT : Stops the recursion!\r\n\r\n        }, true) // !IMPORTANT : Stops the recursion!\r\n\r\n    }).c(_color)\r\n\r\n  }\r\n\r\n}\r\n","/*\r\n\r\n  CUSTOM Meta\r\n\r\n  !IMPORTANT:\r\n\r\n  Custom Meta's properties must have a\r\n  false argument as a last property,\r\n  which stops the recursion instaniation.\r\n\r\n*/\r\n\r\nimport {GridHelper} from 'three';\r\n\r\nimport Meta   from '../Meta';\r\n\r\nimport Graphics from '../Graphics/Graphics';\r\n\r\nimport Plane    from '../Graphics/Geometries/Plane';\r\n\r\nconst _DEFAULT = {\r\n  COLOR: 0xf08e91\r\n};\r\n\r\nexport default class Grid {\r\n\r\n  constructor(props){\r\n\r\n    const _color = props!==undefined&&props.color!==undefined?props.color:_DEFAULT.COLOR;\r\n\r\n    return new Meta({\r\n\r\n      physics: null,\r\n\r\n      graphics: new Graphics(\r\n\r\n        {\r\n\r\n          mesh: new GridHelper(1000,1000,_color,_color).translateY(.001) // !IMPORTANT : Dpesn't need a stop flag, because it comes from three directly!\r\n\r\n        }, true )  // !IMPORTANT : Stops the recursion!\r\n\r\n    })\r\n\r\n  }\r\n\r\n}\r\n","/*\r\n\r\n  CUSTOM Meta\r\n\r\n  !IMPORTANT:\r\n\r\n  Custom Meta's properties must have a\r\n  false argument as a last property,\r\n  which stops the recursion instaniation.\r\n\r\n*/\r\n\r\nimport Meta   from '../Meta';\r\n\r\nimport Graphics from '../Graphics/Graphics';\r\n\r\nimport Cube    from '../Graphics/Geometries/Cube';\r\n\r\nconst _DEFAULT = {\r\n  COLOR: 0xc2b280\r\n}\r\n\r\nexport default class Brick {\r\n\r\n  constructor(){\r\n\r\n    return new Meta({\r\n\r\n      graphics: new Graphics(\r\n\r\n        {\r\n          geometry: new Cube(\r\n\r\n            {\r\n              width: 1,\r\n              height: 1,\r\n              length: 1\r\n\r\n            }, true) // !IMPORTANT : Stops the recursion!\r\n\r\n        }, true) // !IMPORTANT : Stops the recursion!\r\n\r\n    }).m('u', 5).p()\r\n\r\n  }\r\n\r\n}\r\n","import {Meta, Graphics} from '~/src';\r\n\r\nexport default class Model{\r\n\r\n    constructor(file){\r\n\r\n        return new Meta({\r\n\r\n            graphics: new Graphics({\r\n\r\n                model: file\r\n\r\n            }, true)\r\n\r\n        })\r\n\r\n    }\r\n\r\n}","import config from '../config';\r\n\r\nimport Space     from './Space/Space';\r\nimport {on,timer}from './Space/Space';\r\n\r\nimport Meta    from './Space/Meta/Meta';\r\n\r\nimport Graphics  from './Space/Meta/Graphics/Graphics';\r\nimport Existence from './Space/Meta/Existence/Existence';\r\n\r\nimport Cube      from './Space/Meta/Graphics/Geometries/Cube';\r\nimport Sphere    from './Space/Meta/Graphics/Geometries/Sphere';\r\nimport Cylinder  from './Space/Meta/Graphics/Geometries/Cylinder';\r\nimport Plane     from './Space/Meta/Graphics/Geometries/Plane';\r\n\r\nimport Ground    from './Space/Meta/Custom/Ground';\r\nimport Grid      from './Space/Meta/Custom/Grid';\r\nimport Brick     from './Space/Meta/Custom/Brick';\r\n\r\nimport Model     from './Space/Meta/Graphics/Model/Model';\r\n\r\nconst _DEFAULT = {\r\n\r\n  COLOR: {\r\n    PRIMARY: '#548adf',\r\n    SECONDARY: '#9aa9fe',\r\n    TEXT: '#ffffff'\r\n  }\r\n\r\n}\r\nconsole.log(`%c ◯ META.Client.${config.version}`, `background: linear-gradient(${_DEFAULT.COLOR.PRIMARY}, ${_DEFAULT.COLOR.SECONDARY});color: ${_DEFAULT.COLOR.TEXT};`);\r\n\r\nexport default class Void {\r\n\r\n  constructor(){\r\n\r\n      this.space = new Space();\r\n  \r\n    }\r\n\r\n}\r\n\r\n//random\r\nconst r = (min, max) => {\r\n  const _min = min!==undefined?min:10;\r\n  const _max = max!==undefined?max:0;\r\n  return (Math.random() * (_max - _min)) + _min;\r\n}\r\n\r\nexport {r};\r\nexport {r as random};\r\n\r\nexport {Meta,\r\n        Cube,\r\n        Sphere,\r\n        Cylinder,\r\n        Plane,\r\n        Model};\r\n\r\nexport {\r\n  Existence,\r\n  Graphics\r\n}\r\n\r\nexport {Space};\r\nexport {on as on};\r\nexport {timer as timer};\r\nexport {timer as ti}; //Naja...\r\n\r\nexport {Cube as C};\r\nexport {Sphere as S};\r\nexport {Cylinder as Y};\r\nexport {Plane as P};\r\n\r\nexport {Model as M};\r\n\r\n/*\r\n  Custom Meta\r\n*/\r\n\r\nexport {Ground};\r\nexport {Grid};\r\nexport {Brick};\r\n","\r\nimport * as THREE from 'three';\r\n\r\nimport {Model, M, Meta, Graphics, Ground, Cube, on} from './src/index';\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"]}