2019-08-08 10:52:06 +08:00
// threejs.org/license
2019-12-11 10:47:24 +08:00
( function ( k , Aa ) { "object" === typeof exports && "undefined" !== typeof module ? Aa ( exports ) : "function" === typeof define && define . amd ? define ( [ "exports" ] , Aa ) : ( k = k || self , Aa ( k . THREE = { } ) ) } ) ( this , function ( k ) { function Aa ( ) { } function B ( a , b ) { this . x = a || 0 ; this . y = b || 0 } function ua ( a , b , c , d ) { this . _x = a || 0 ; this . _y = b || 0 ; this . _z = c || 0 ; this . _w = void 0 !== d ? d : 1 } function n ( a , b , c ) { this . x = a || 0 ; this . y = b || 0 ; this . z = c || 0 } function ca ( ) { this . elements = [ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 ] ; 0 < arguments . length && console . error ( "THREE.Matrix3: the constructor no longer reads arguments. use .set() instead." ) }
function Y ( a , b , c , d , e , f , g , h , l , m ) { Object . defineProperty ( this , "id" , { value : Yi ++ } ) ; this . uuid = R . generateUUID ( ) ; this . name = "" ; this . image = void 0 !== a ? a : Y . DEFAULT _IMAGE ; this . mipmaps = [ ] ; this . mapping = void 0 !== b ? b : Y . DEFAULT _MAPPING ; this . wrapS = void 0 !== c ? c : 1001 ; this . wrapT = void 0 !== d ? d : 1001 ; this . magFilter = void 0 !== e ? e : 1006 ; this . minFilter = void 0 !== f ? f : 1008 ; this . anisotropy = void 0 !== l ? l : 1 ; this . format = void 0 !== g ? g : 1023 ; this . type = void 0 !== h ? h : 1009 ; this . offset = new B ( 0 , 0 ) ; this . repeat = new B ( 1 , 1 ) ; this . center = new B ( 0 , 0 ) ; this . rotation =
0 ; this . matrixAutoUpdate = ! 0 ; this . matrix = new ca ; this . generateMipmaps = ! 0 ; this . premultiplyAlpha = ! 1 ; this . flipY = ! 0 ; this . unpackAlignment = 4 ; this . encoding = void 0 !== m ? m : 3E3 ; this . version = 0 ; this . onUpdate = null } function ba ( a , b , c , d ) { this . x = a || 0 ; this . y = b || 0 ; this . z = c || 0 ; this . w = void 0 !== d ? d : 1 } function la ( a , b , c ) { this . width = a ; this . height = b ; this . scissor = new ba ( 0 , 0 , a , b ) ; this . scissorTest = ! 1 ; this . viewport = new ba ( 0 , 0 , a , b ) ; c = c || { } ; this . texture = new Y ( void 0 , void 0 , c . wrapS , c . wrapT , c . magFilter , c . minFilter , c . format , c . type , c . anisotropy ,
c . encoding ) ; this . texture . image = { } ; this . texture . image . width = a ; this . texture . image . height = b ; this . texture . generateMipmaps = void 0 !== c . generateMipmaps ? c . generateMipmaps : ! 1 ; this . texture . minFilter = void 0 !== c . minFilter ? c . minFilter : 1006 ; this . depthBuffer = void 0 !== c . depthBuffer ? c . depthBuffer : ! 0 ; this . stencilBuffer = void 0 !== c . stencilBuffer ? c . stencilBuffer : ! 0 ; this . depthTexture = void 0 !== c . depthTexture ? c . depthTexture : null } function Zf ( a , b , c ) { la . call ( this , a , b , c ) ; this . samples = 4 } function S ( ) { this . elements = [ 1 , 0 , 0 , 0 , 0 ,
1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 ] ; 0 < arguments . length && console . error ( "THREE.Matrix4: the constructor no longer reads arguments. use .set() instead." ) } function Pb ( a , b , c , d ) { this . _x = a || 0 ; this . _y = b || 0 ; this . _z = c || 0 ; this . _order = d || Pb . DefaultOrder } function $f ( ) { this . mask = 1 } function y ( ) { Object . defineProperty ( this , "id" , { value : Zi ++ } ) ; this . uuid = R . generateUUID ( ) ; this . name = "" ; this . type = "Object3D" ; this . parent = null ; this . children = [ ] ; this . up = y . DefaultUp . clone ( ) ; var a = new n , b = new Pb , c = new ua , d = new n ( 1 , 1 , 1 ) ; b . _onChange ( function ( ) { c . setFromEuler ( b ,
! 1 ) } ) ; c . _onChange ( function ( ) { b . setFromQuaternion ( c , void 0 , ! 1 ) } ) ; Object . defineProperties ( this , { position : { configurable : ! 0 , enumerable : ! 0 , value : a } , rotation : { configurable : ! 0 , enumerable : ! 0 , value : b } , quaternion : { configurable : ! 0 , enumerable : ! 0 , value : c } , scale : { configurable : ! 0 , enumerable : ! 0 , value : d } , modelViewMatrix : { value : new S } , normalMatrix : { value : new ca } } ) ; this . matrix = new S ; this . matrixWorld = new S ; this . matrixAutoUpdate = y . DefaultMatrixAutoUpdate ; this . matrixWorldNeedsUpdate = ! 1 ; this . layers = new $f ; this . visible =
! 0 ; this . receiveShadow = this . castShadow = ! 1 ; this . frustumCulled = ! 0 ; this . renderOrder = 0 ; this . userData = { } } function wd ( ) { y . call ( this ) ; this . type = "Scene" ; this . overrideMaterial = this . fog = this . background = null ; this . autoUpdate = ! 0 ; "undefined" !== typeof _ _THREE _DEVTOOLS _ _ && _ _THREE _DEVTOOLS _ _ . dispatchEvent ( new CustomEvent ( "observe" , { detail : this } ) ) } function Qa ( a , b ) { this . min = void 0 !== a ? a : new n ( Infinity , Infinity , Infinity ) ; this . max = void 0 !== b ? b : new n ( - Infinity , - Infinity , - Infinity ) } function ag ( a , b , c , d , e ) { var f ; var g = 0 ; for ( f =
a . length - 3 ; g <= f ; g += 3 ) { Qb . fromArray ( a , g ) ; var h = e . x * Math . abs ( Qb . x ) + e . y * Math . abs ( Qb . y ) + e . z * Math . abs ( Qb . z ) , l = b . dot ( Qb ) , m = c . dot ( Qb ) , r = d . dot ( Qb ) ; if ( Math . max ( - Math . max ( l , m , r ) , Math . min ( l , m , r ) ) > h ) return ! 1 } return ! 0 } function mb ( a , b ) { this . center = void 0 !== a ? a : new n ; this . radius = void 0 !== b ? b : 0 } function Rb ( a , b ) { this . origin = void 0 !== a ? a : new n ; this . direction = void 0 !== b ? b : new n ( 0 , 0 , - 1 ) } function Ra ( a , b ) { this . normal = void 0 !== a ? a : new n ( 1 , 0 , 0 ) ; this . constant = void 0 !== b ? b : 0 } function ma ( a , b , c ) { this . a = void 0 !== a ? a : new n ; this . b =
void 0 !== b ? b : new n ; this . c = void 0 !== c ? c : new n } function H ( a , b , c ) { return void 0 === b && void 0 === c ? this . set ( a ) : this . setRGB ( a , b , c ) } function bg ( a , b , c ) { 0 > c && ( c += 1 ) ; 1 < c && -- c ; return c < 1 / 6 ? a + 6 * ( b - a ) * c : . 5 > c ? b : c < 2 / 3 ? a + 6 * ( b - a ) * ( 2 / 3 - c ) : a } function cg ( a ) { return . 04045 > a ? . 0773993808 * a : Math . pow ( . 9478672986 * a + . 0521327014 , 2.4 ) } function dg ( a ) { return . 0031308 > a ? 12.92 * a : 1.055 * Math . pow ( a , . 41666 ) - . 055 } function wc ( a , b , c , d , e , f ) { this . a = a ; this . b = b ; this . c = c ; this . normal = d && d . isVector3 ? d : new n ; this . vertexNormals = Array . isArray ( d ) ? d :
[ ] ; this . color = e && e . isColor ? e : new H ; this . vertexColors = Array . isArray ( e ) ? e : [ ] ; this . materialIndex = void 0 !== f ? f : 0 } function C ( ) { Object . defineProperty ( this , "id" , { value : $i ++ } ) ; this . uuid = R . generateUUID ( ) ; this . name = "" ; this . type = "Material" ; this . fog = ! 0 ; this . blending = 1 ; this . side = 0 ; this . vertexTangents = this . flatShading = ! 1 ; this . vertexColors = 0 ; this . opacity = 1 ; this . transparent = ! 1 ; this . blendSrc = 204 ; this . blendDst = 205 ; this . blendEquation = 100 ; this . blendEquationAlpha = this . blendDstAlpha = this . blendSrcAlpha = null ; this . depthFunc =
3 ; this . depthWrite = this . depthTest = ! 0 ; this . stencilWriteMask = 255 ; this . stencilFunc = 519 ; this . stencilRef = 0 ; this . stencilFuncMask = 255 ; this . stencilZPass = this . stencilZFail = this . stencilFail = 7680 ; this . stencilWrite = ! 1 ; this . clippingPlanes = null ; this . clipShadows = this . clipIntersection = ! 1 ; this . shadowSide = null ; this . colorWrite = ! 0 ; this . precision = null ; this . polygonOffset = ! 1 ; this . polygonOffsetUnits = this . polygonOffsetFactor = 0 ; this . dithering = ! 1 ; this . alphaTest = 0 ; this . premultipliedAlpha = ! 1 ; this . toneMapped = this . visible = ! 0 ; this . userData =
{ } ; this . version = 0 } function Ga ( a ) { C . call ( this ) ; this . type = "MeshBasicMaterial" ; this . color = new H ( 16777215 ) ; this . lightMap = this . map = null ; this . lightMapIntensity = 1 ; this . aoMap = null ; this . aoMapIntensity = 1 ; this . envMap = this . alphaMap = this . specularMap = null ; this . combine = 0 ; this . reflectivity = 1 ; this . refractionRatio = . 98 ; this . wireframe = ! 1 ; this . wireframeLinewidth = 1 ; this . wireframeLinejoin = this . wireframeLinecap = "round" ; this . morphTargets = this . skinning = ! 1 ; this . setValues ( a ) } function N ( a , b , c ) { if ( Array . isArray ( a ) ) throw new TypeError ( "THREE.BufferAttribute: array should be a Typed Array." ) ;
this . name = "" ; this . array = a ; this . itemSize = b ; this . count = void 0 !== a ? a . length / b : 0 ; this . normalized = ! 0 === c ; this . usage = 35044 ; this . updateRange = { offset : 0 , count : - 1 } ; this . version = 0 } function xd ( a , b , c ) { N . call ( this , new Int8Array ( a ) , b , c ) } function yd ( a , b , c ) { N . call ( this , new Uint8Array ( a ) , b , c ) } function zd ( a , b , c ) { N . call ( this , new Uint8ClampedArray ( a ) , b , c ) } function Ad ( a , b , c ) { N . call ( this , new Int16Array ( a ) , b , c ) } function Sb ( a , b , c ) { N . call ( this , new Uint16Array ( a ) , b , c ) } function Bd ( a , b , c ) { N . call ( this , new Int32Array ( a ) , b , c ) } function Tb ( a ,
b , c ) { N . call ( this , new Uint32Array ( a ) , b , c ) } function D ( a , b , c ) { N . call ( this , new Float32Array ( a ) , b , c ) } function Cd ( a , b , c ) { N . call ( this , new Float64Array ( a ) , b , c ) } function ph ( ) { this . vertices = [ ] ; this . normals = [ ] ; this . colors = [ ] ; this . uvs = [ ] ; this . uvs2 = [ ] ; this . groups = [ ] ; this . morphTargets = { } ; this . skinWeights = [ ] ; this . skinIndices = [ ] ; this . boundingSphere = this . boundingBox = null ; this . groupsNeedUpdate = this . uvsNeedUpdate = this . colorsNeedUpdate = this . normalsNeedUpdate = this . verticesNeedUpdate = ! 1 } function qh ( a ) { if ( 0 === a . length ) return - Infinity ;
for ( var b = a [ 0 ] , c = 1 , d = a . length ; c < d ; ++ c ) a [ c ] > b && ( b = a [ c ] ) ; return b } function E ( ) { Object . defineProperty ( this , "id" , { value : aj += 2 } ) ; this . uuid = R . generateUUID ( ) ; this . name = "" ; this . type = "BufferGeometry" ; this . index = null ; this . attributes = { } ; this . morphAttributes = { } ; this . morphTargetsRelative = ! 1 ; this . groups = [ ] ; this . boundingSphere = this . boundingBox = null ; this . drawRange = { start : 0 , count : Infinity } ; this . userData = { } } function ja ( a , b ) { y . call ( this ) ; this . type = "Mesh" ; this . geometry = void 0 !== a ? a : new E ; this . material = void 0 !== b ? b : new Ga ( { color : 16777215 *
Math . random ( ) } ) ; this . drawMode = 0 ; this . updateMorphTargets ( ) } function rh ( a , b , c , d , e , f , g , h ) { if ( null === ( 1 === b . side ? d . intersectTriangle ( g , f , e , ! 0 , h ) : d . intersectTriangle ( e , f , g , 2 !== b . side , h ) ) ) return null ; Ie . copy ( h ) ; Ie . applyMatrix4 ( a . matrixWorld ) ; b = c . ray . origin . distanceTo ( Ie ) ; return b < c . near || b > c . far ? null : { distance : b , point : Ie . clone ( ) , object : a } } function Je ( a , b , c , d , e , f , g , h , l , m , r , p ) { Ub . fromBufferAttribute ( e , m ) ; Vb . fromBufferAttribute ( e , r ) ; Wb . fromBufferAttribute ( e , p ) ; e = a . morphTargetInfluences ; if ( b . morphTargets &&
f && e ) { Ke . set ( 0 , 0 , 0 ) ; Le . set ( 0 , 0 , 0 ) ; Me . set ( 0 , 0 , 0 ) ; for ( var t = 0 , u = f . length ; t < u ; t ++ ) { var k = e [ t ] , v = f [ t ] ; 0 !== k && ( eg . fromBufferAttribute ( v , m ) , fg . fromBufferAttribute ( v , r ) , gg . fromBufferAttribute ( v , p ) , g ? ( Ke . addScaledVector ( eg , k ) , Le . addScaledVector ( fg , k ) , Me . addScaledVector ( gg , k ) ) : ( Ke . addScaledVector ( eg . sub ( Ub ) , k ) , Le . addScaledVector ( fg . sub ( Vb ) , k ) , Me . addScaledVector ( gg . sub ( Wb ) , k ) ) ) } Ub . add ( Ke ) ; Vb . add ( Le ) ; Wb . add ( Me ) } if ( a = rh ( a , b , c , d , Ub , Vb , Wb , Dd ) ) h && ( xc . fromBufferAttribute ( h , m ) , yc . fromBufferAttribute ( h , r ) , zc . fromBufferAttribute ( h ,
p ) , a . uv = ma . getUV ( Dd , Ub , Vb , Wb , xc , yc , zc , new B ) ) , l && ( xc . fromBufferAttribute ( l , m ) , yc . fromBufferAttribute ( l , r ) , zc . fromBufferAttribute ( l , p ) , a . uv2 = ma . getUV ( Dd , Ub , Vb , Wb , xc , yc , zc , new B ) ) , h = new wc ( m , r , p ) , ma . getNormal ( Ub , Vb , Wb , h . normal ) , a . face = h ; return a } function O ( ) { Object . defineProperty ( this , "id" , { value : bj += 2 } ) ; this . uuid = R . generateUUID ( ) ; this . name = "" ; this . type = "Geometry" ; this . vertices = [ ] ; this . colors = [ ] ; this . faces = [ ] ; this . faceVertexUvs = [ [ ] ] ; this . morphTargets = [ ] ; this . morphNormals = [ ] ; this . skinWeights = [ ] ; this . skinIndices =
[ ] ; this . lineDistances = [ ] ; this . boundingSphere = this . boundingBox = null ; this . groupsNeedUpdate = this . lineDistancesNeedUpdate = this . colorsNeedUpdate = this . normalsNeedUpdate = this . uvsNeedUpdate = this . verticesNeedUpdate = this . elementsNeedUpdate = ! 1 } function Xb ( a ) { var b = { } , c ; for ( c in a ) { b [ c ] = { } ; for ( var d in a [ c ] ) { var e = a [ c ] [ d ] ; e && ( e . isColor || e . isMatrix3 || e . isMatrix4 || e . isVector2 || e . isVector3 || e . isVector4 || e . isTexture ) ? b [ c ] [ d ] = e . clone ( ) : Array . isArray ( e ) ? b [ c ] [ d ] = e . slice ( ) : b [ c ] [ d ] = e } } return b } function Da ( a ) { for ( var b =
{ } , c = 0 ; c < a . length ; c ++ ) { var d = Xb ( a [ c ] ) , e ; for ( e in d ) b [ e ] = d [ e ] } return b } function na ( a ) { C . call ( this ) ; this . type = "ShaderMaterial" ; this . defines = { } ; this . uniforms = { } ; this . vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}" ; this . fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}" ; this . linewidth = 1 ; this . wireframe = ! 1 ; this . wireframeLinewidth = 1 ; this . morphNormals = this . morphTargets = this . skinning = this . clipping = this . lights = this . fog =
! 1 ; this . extensions = { derivatives : ! 1 , fragDepth : ! 1 , drawBuffers : ! 1 , shaderTextureLOD : ! 1 } ; this . defaultAttributeValues = { color : [ 1 , 1 , 1 ] , uv : [ 0 , 0 ] , uv2 : [ 0 , 0 ] } ; this . index0AttributeName = void 0 ; this . uniformsNeedUpdate = ! 1 ; void 0 !== a && ( void 0 !== a . attributes && console . error ( "THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead." ) , this . setValues ( a ) ) } function cb ( ) { y . call ( this ) ; this . type = "Camera" ; this . matrixWorldInverse = new S ; this . projectionMatrix = new S ; this . projectionMatrixInverse = new S }
function da ( a , b , c , d ) { cb . call ( this ) ; this . type = "PerspectiveCamera" ; this . fov = void 0 !== a ? a : 50 ; this . zoom = 1 ; this . near = void 0 !== c ? c : . 1 ; this . far = void 0 !== d ? d : 2E3 ; this . focus = 10 ; this . aspect = void 0 !== b ? b : 1 ; this . view = null ; this . filmGauge = 35 ; this . filmOffset = 0 ; this . updateProjectionMatrix ( ) } function Ac ( a , b , c , d ) { y . call ( this ) ; this . type = "CubeCamera" ; var e = new da ( 90 , 1 , a , b ) ; e . up . set ( 0 , - 1 , 0 ) ; e . lookAt ( new n ( 1 , 0 , 0 ) ) ; this . add ( e ) ; var f = new da ( 90 , 1 , a , b ) ; f . up . set ( 0 , - 1 , 0 ) ; f . lookAt ( new n ( - 1 , 0 , 0 ) ) ; this . add ( f ) ; var g = new da ( 90 , 1 ,
a , b ) ; g . up . set ( 0 , 0 , 1 ) ; g . lookAt ( new n ( 0 , 1 , 0 ) ) ; this . add ( g ) ; var h = new da ( 90 , 1 , a , b ) ; h . up . set ( 0 , 0 , - 1 ) ; h . lookAt ( new n ( 0 , - 1 , 0 ) ) ; this . add ( h ) ; var l = new da ( 90 , 1 , a , b ) ; l . up . set ( 0 , - 1 , 0 ) ; l . lookAt ( new n ( 0 , 0 , 1 ) ) ; this . add ( l ) ; var m = new da ( 90 , 1 , a , b ) ; m . up . set ( 0 , - 1 , 0 ) ; m . lookAt ( new n ( 0 , 0 , - 1 ) ) ; this . add ( m ) ; d = d || { format : 1022 , magFilter : 1006 , minFilter : 1006 } ; this . renderTarget = new Bb ( c , c , d ) ; this . renderTarget . texture . name = "CubeCamera" ; this . update = function ( a , b ) { null === this . parent && this . updateMatrixWorld ( ) ; var c = a . getRenderTarget ( ) ,
d = this . renderTarget , r = d . texture . generateMipmaps ; d . texture . generateMipmaps = ! 1 ; a . setRenderTarget ( d , 0 ) ; a . render ( b , e ) ; a . setRenderTarget ( d , 1 ) ; a . render ( b , f ) ; a . setRenderTarget ( d , 2 ) ; a . render ( b , g ) ; a . setRenderTarget ( d , 3 ) ; a . render ( b , h ) ; a . setRenderTarget ( d , 4 ) ; a . render ( b , l ) ; d . texture . generateMipmaps = r ; a . setRenderTarget ( d , 5 ) ; a . render ( b , m ) ; a . setRenderTarget ( c ) } ; this . clear = function ( a , b , c , d ) { for ( var e = a . getRenderTarget ( ) , f = this . renderTarget , g = 0 ; 6 > g ; g ++ ) a . setRenderTarget ( f , g ) , a . clear ( b , c , d ) ; a . setRenderTarget ( e ) } } function Bb ( a ,
b , c ) { la . call ( this , a , b , c ) } function Yb ( a , b , c , d , e , f , g , h , l , m , r , p ) { Y . call ( this , null , f , g , h , l , m , d , e , r , p ) ; this . image = { data : a || null , width : b || 1 , height : c || 1 } ; this . magFilter = void 0 !== l ? l : 1003 ; this . minFilter = void 0 !== m ? m : 1003 ; this . flipY = this . generateMipmaps = ! 1 ; this . unpackAlignment = 1 ; this . needsUpdate = ! 0 } function Ed ( a , b , c , d , e , f ) { this . planes = [ void 0 !== a ? a : new Ra , void 0 !== b ? b : new Ra , void 0 !== c ? c : new Ra , void 0 !== d ? d : new Ra , void 0 !== e ? e : new Ra , void 0 !== f ? f : new Ra ] } function hg ( ) { function a ( e , f ) { ! 1 !== c && ( d ( e , f ) , b . requestAnimationFrame ( a ) ) }
var b = null , c = ! 1 , d = null ; return { start : function ( ) { ! 0 !== c && null !== d && ( b . requestAnimationFrame ( a ) , c = ! 0 ) } , stop : function ( ) { c = ! 1 } , setAnimationLoop : function ( a ) { d = a } , setContext : function ( a ) { b = a } } } function cj ( a ) { function b ( b , c ) { var d = b . array , e = b . usage , h = a . createBuffer ( ) ; a . bindBuffer ( c , h ) ; a . bufferData ( c , d , e ) ; b . onUploadCallback ( ) ; c = 5126 ; d instanceof Float32Array ? c = 5126 : d instanceof Float64Array ? console . warn ( "THREE.WebGLAttributes: Unsupported data buffer format: Float64Array." ) : d instanceof Uint16Array ? c = 5123 :
d instanceof Int16Array ? c = 5122 : d instanceof Uint32Array ? c = 5125 : d instanceof Int32Array ? c = 5124 : d instanceof Int8Array ? c = 5120 : d instanceof Uint8Array && ( c = 5121 ) ; return { buffer : h , type : c , bytesPerElement : d . BYTES _PER _ELEMENT , version : b . version } } var c = new WeakMap ; return { get : function ( a ) { a . isInterleavedBufferAttribute && ( a = a . data ) ; return c . get ( a ) } , remove : function ( b ) { b . isInterleavedBufferAttribute && ( b = b . data ) ; var d = c . get ( b ) ; d && ( a . deleteBuffer ( d . buffer ) , c . delete ( b ) ) } , update : function ( d , e ) { d . isInterleavedBufferAttribute &&
( d = d . data ) ; var f = c . get ( d ) ; if ( void 0 === f ) c . set ( d , b ( d , e ) ) ; else if ( f . version < d . version ) { var g = d . array , h = d . updateRange ; a . bindBuffer ( e , f . buffer ) ; - 1 === h . count ? a . bufferSubData ( e , 0 , g ) : ( a . bufferSubData ( e , h . offset * g . BYTES _PER _ELEMENT , g . subarray ( h . offset , h . offset + h . count ) ) , h . count = - 1 ) ; f . version = d . version } } } } function Fd ( a , b , c , d ) { O . call ( this ) ; this . type = "PlaneGeometry" ; this . parameters = { width : a , height : b , widthSegments : c , heightSegments : d } ; this . fromBufferGeometry ( new Zb ( a , b , c , d ) ) ; this . mergeVertices ( ) } function Zb ( a ,
b , c , d ) { E . call ( this ) ; this . type = "PlaneBufferGeometry" ; this . parameters = { width : a , height : b , widthSegments : c , heightSegments : d } ; a = a || 1 ; b = b || 1 ; var e = a / 2 , f = b / 2 ; c = Math . floor ( c ) || 1 ; d = Math . floor ( d ) || 1 ; var g = c + 1 , h = d + 1 , l = a / c , m = b / d , r = [ ] , p = [ ] , t = [ ] , k = [ ] ; for ( a = 0 ; a < h ; a ++ ) { var q = a * m - f ; for ( b = 0 ; b < g ; b ++ ) p . push ( b * l - e , - q , 0 ) , t . push ( 0 , 0 , 1 ) , k . push ( b / c ) , k . push ( 1 - a / d ) } for ( a = 0 ; a < d ; a ++ ) for ( b = 0 ; b < c ; b ++ ) e = b + g * ( a + 1 ) , f = b + 1 + g * ( a + 1 ) , h = b + 1 + g * a , r . push ( b + g * a , e , h ) , r . push ( e , f , h ) ; this . setIndex ( r ) ; this . setAttribute ( "position" , new D ( p , 3 ) ) ; this . setAttribute ( "normal" ,
new D ( t , 3 ) ) ; this . setAttribute ( "uv" , new D ( k , 2 ) ) } function dj ( a , b , c , d ) { function e ( a , c ) { b . buffers . color . setClear ( a . r , a . g , a . b , c , d ) } var f = new H ( 0 ) , g = 0 , h , l , m = null , r = 0 ; return { getClearColor : function ( ) { return f } , setClearColor : function ( a , b ) { f . set ( a ) ; g = void 0 !== b ? b : 1 ; e ( f , g ) } , getClearAlpha : function ( ) { return g } , setClearAlpha : function ( a ) { g = a ; e ( f , g ) } , render : function ( b , d , k , q ) { d = d . background ; k = a . vr ; ( k = k . getSession && k . getSession ( ) ) && "additive" === k . environmentBlendMode && ( d = null ) ; null === d ? ( e ( f , g ) , m = null , r = 0 ) : d && d . isColor &&
( e ( d , 1 ) , q = ! 0 , m = null , r = 0 ) ; ( a . autoClear || q ) && a . clear ( a . autoClearColor , a . autoClearDepth , a . autoClearStencil ) ; if ( d && ( d . isCubeTexture || d . isWebGLRenderTargetCube ) ) { void 0 === l && ( l = new ja ( new Gd ( 1 , 1 , 1 ) , new na ( { type : "BackgroundCubeMaterial" , uniforms : Xb ( db . cube . uniforms ) , vertexShader : db . cube . vertexShader , fragmentShader : db . cube . fragmentShader , side : 1 , depthTest : ! 1 , depthWrite : ! 1 , fog : ! 1 } ) ) , l . geometry . deleteAttribute ( "normal" ) , l . geometry . deleteAttribute ( "uv" ) , l . onBeforeRender = function ( a , b , c ) { this . matrixWorld . copyPosition ( c . matrixWorld ) } ,
Object . defineProperty ( l . material , "map" , { get : function ( ) { return this . uniforms . tCube . value } } ) , c . update ( l ) ) ; q = d . isWebGLRenderTargetCube ? d . texture : d ; l . material . uniforms . tCube . value = q ; l . material . uniforms . tFlip . value = d . isWebGLRenderTargetCube ? 1 : - 1 ; if ( m !== d || r !== q . version ) l . material . needsUpdate = ! 0 , m = d , r = q . version ; b . unshift ( l , l . geometry , l . material , 0 , 0 , null ) } else if ( d && d . isTexture ) { void 0 === h && ( h = new ja ( new Zb ( 2 , 2 ) , new na ( { type : "BackgroundMaterial" , uniforms : Xb ( db . background . uniforms ) , vertexShader : db . background . vertexShader ,
fragmentShader : db . background . fragmentShader , side : 0 , depthTest : ! 1 , depthWrite : ! 1 , fog : ! 1 } ) ) , h . geometry . deleteAttribute ( "normal" ) , Object . defineProperty ( h . material , "map" , { get : function ( ) { return this . uniforms . t2D . value } } ) , c . update ( h ) ) ; h . material . uniforms . t2D . value = d ; ! 0 === d . matrixAutoUpdate && d . updateMatrix ( ) ; h . material . uniforms . uvTransform . value . copy ( d . matrix ) ; if ( m !== d || r !== d . version ) h . material . needsUpdate = ! 0 , m = d , r = d . version ; b . unshift ( h , h . geometry , h . material , 0 , 0 , null ) } } } } function ej ( a , b , c , d ) { var e = d . isWebGL2 ,
f ; this . setMode = function ( a ) { f = a } ; this . render = function ( b , d ) { a . drawArrays ( f , b , d ) ; c . update ( d , f ) } ; this . renderInstances = function ( d , h , l , m ) { if ( 0 !== m ) { if ( e ) { d = a ; var g = "drawArraysInstanced" } else if ( d = b . get ( "ANGLE_instanced_arrays" ) , g = "drawArraysInstancedANGLE" , null === d ) { console . error ( "THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays." ) ; return } d [ g ] ( f , h , l , m ) ; c . update ( l , f , m ) } } } function fj ( a , b , c ) { function d ( b ) { if ( "highp" === b ) { if ( 0 < a . getShaderPrecisionFormat ( 35633 ,
36338 ) . precision && 0 < a . getShaderPrecisionFormat ( 35632 , 36338 ) . precision ) return "highp" ; b = "mediump" } return "mediump" === b && 0 < a . getShaderPrecisionFormat ( 35633 , 36337 ) . precision && 0 < a . getShaderPrecisionFormat ( 35632 , 36337 ) . precision ? "mediump" : "lowp" } var e , f = "undefined" !== typeof WebGL2RenderingContext && a instanceof WebGL2RenderingContext || "undefined" !== typeof WebGL2ComputeRenderingContext && a instanceof WebGL2ComputeRenderingContext , g = void 0 !== c . precision ? c . precision : "highp" , h = d ( g ) ; h !== g && ( console . warn ( "THREE.WebGLRenderer:" ,
g , "not supported, using" , h , "instead." ) , g = h ) ; c = ! 0 === c . logarithmicDepthBuffer ; h = a . getParameter ( 34930 ) ; var l = a . getParameter ( 35660 ) , m = a . getParameter ( 3379 ) , r = a . getParameter ( 34076 ) , p = a . getParameter ( 34921 ) , t = a . getParameter ( 36347 ) , k = a . getParameter ( 36348 ) , q = a . getParameter ( 36349 ) , v = 0 < l , n = f || ! ! b . get ( "OES_texture_float" ) , w = v && n , x = f ? a . getParameter ( 36183 ) : 0 ; return { isWebGL2 : f , getMaxAnisotropy : function ( ) { if ( void 0 !== e ) return e ; var c = b . get ( "EXT_texture_filter_anisotropic" ) ; return e = null !== c ? a . getParameter ( c . MAX _TEXTURE _MAX _ANISOTROPY _EXT ) :
0 } , getMaxPrecision : d , precision : g , logarithmicDepthBuffer : c , maxTextures : h , maxVertexTextures : l , maxTextureSize : m , maxCubemapSize : r , maxAttributes : p , maxVertexUniforms : t , maxVaryings : k , maxFragmentUniforms : q , vertexTextures : v , floatFragmentTextures : n , floatVertexTextures : w , maxSamples : x } } function gj ( ) { function a ( ) { m . value !== d && ( m . value = d , m . needsUpdate = 0 < e ) ; c . numPlanes = e ; c . numIntersection = 0 } function b ( a , b , d , e ) { var f = null !== a ? a . length : 0 , g = null ; if ( 0 !== f ) { g = m . value ; if ( ! 0 !== e || null === g ) { e = d + 4 * f ; b = b . matrixWorldInverse ;
l . getNormalMatrix ( b ) ; if ( null === g || g . length < e ) g = new Float32Array ( e ) ; for ( e = 0 ; e !== f ; ++ e , d += 4 ) h . copy ( a [ e ] ) . applyMatrix4 ( b , l ) , h . normal . toArray ( g , d ) , g [ d + 3 ] = h . constant } m . value = g ; m . needsUpdate = ! 0 } c . numPlanes = f ; return g } var c = this , d = null , e = 0 , f = ! 1 , g = ! 1 , h = new Ra , l = new ca , m = { value : null , needsUpdate : ! 1 } ; this . uniform = m ; this . numIntersection = this . numPlanes = 0 ; this . init = function ( a , c , g ) { var h = 0 !== a . length || c || 0 !== e || f ; f = c ; d = b ( a , g , 0 ) ; e = a . length ; return h } ; this . beginShadows = function ( ) { g = ! 0 ; b ( null ) } ; this . endShadows = function ( ) { g =
! 1 ; a ( ) } ; this . setState = function ( c , h , l , k , q , v ) { if ( ! f || null === c || 0 === c . length || g && ! l ) g ? b ( null ) : a ( ) ; else { l = g ? 0 : e ; var r = 4 * l , p = q . clippingState || null ; m . value = p ; p = b ( c , k , r , v ) ; for ( c = 0 ; c !== r ; ++ c ) p [ c ] = d [ c ] ; q . clippingState = p ; this . numIntersection = h ? this . numPlanes : 0 ; this . numPlanes += l } } } function hj ( a ) { var b = { } ; return { get : function ( c ) { if ( void 0 !== b [ c ] ) return b [ c ] ; switch ( c ) { case "WEBGL_depth_texture" : var d = a . getExtension ( "WEBGL_depth_texture" ) || a . getExtension ( "MOZ_WEBGL_depth_texture" ) || a . getExtension ( "WEBKIT_WEBGL_depth_texture" ) ;
break ; case "EXT_texture_filter_anisotropic" : d = a . getExtension ( "EXT_texture_filter_anisotropic" ) || a . getExtension ( "MOZ_EXT_texture_filter_anisotropic" ) || a . getExtension ( "WEBKIT_EXT_texture_filter_anisotropic" ) ; break ; case "WEBGL_compressed_texture_s3tc" : d = a . getExtension ( "WEBGL_compressed_texture_s3tc" ) || a . getExtension ( "MOZ_WEBGL_compressed_texture_s3tc" ) || a . getExtension ( "WEBKIT_WEBGL_compressed_texture_s3tc" ) ; break ; case "WEBGL_compressed_texture_pvrtc" : d = a . getExtension ( "WEBGL_compressed_texture_pvrtc" ) ||
a . getExtension ( "WEBKIT_WEBGL_compressed_texture_pvrtc" ) ; break ; default : d = a . getExtension ( c ) } null === d && console . warn ( "THREE.WebGLRenderer: " + c + " extension not supported." ) ; return b [ c ] = d } } } function ij ( a , b , c ) { function d ( a ) { var e = a . target ; a = f . get ( e ) ; null !== a . index && b . remove ( a . index ) ; for ( var h in a . attributes ) b . remove ( a . attributes [ h ] ) ; e . removeEventListener ( "dispose" , d ) ; f . delete ( e ) ; if ( h = g . get ( a ) ) b . remove ( h ) , g . delete ( a ) ; c . memory . geometries -- } function e ( a ) { var c = [ ] , d = a . index , e = a . attributes . position ; if ( null !==
d ) { var f = d . array ; d = d . version ; e = 0 ; for ( var h = f . length ; e < h ; e += 3 ) { var k = f [ e + 0 ] , q = f [ e + 1 ] , v = f [ e + 2 ] ; c . push ( k , q , q , v , v , k ) } } else for ( f = e . array , d = e . version , e = 0 , h = f . length / 3 - 1 ; e < h ; e += 3 ) k = e + 0 , q = e + 1 , v = e + 2 , c . push ( k , q , q , v , v , k ) ; c = new ( 65535 < qh ( c ) ? Tb : Sb ) ( c , 1 ) ; c . version = d ; b . update ( c , 34963 ) ; ( f = g . get ( a ) ) && b . remove ( f ) ; g . set ( a , c ) } var f = new WeakMap , g = new WeakMap ; return { get : function ( a , b ) { var e = f . get ( b ) ; if ( e ) return e ; b . addEventListener ( "dispose" , d ) ; b . isBufferGeometry ? e = b : b . isGeometry && ( void 0 === b . _bufferGeometry && ( b . _bufferGeometry =
( new E ) . setFromObject ( a ) ) , e = b . _bufferGeometry ) ; f . set ( b , e ) ; c . memory . geometries ++ ; return e } , update : function ( a ) { var c = a . index , d = a . attributes ; null !== c && b . update ( c , 34963 ) ; for ( var e in d ) b . update ( d [ e ] , 34962 ) ; a = a . morphAttributes ; for ( e in a ) { c = a [ e ] ; d = 0 ; for ( var f = c . length ; d < f ; d ++ ) b . update ( c [ d ] , 34962 ) } } , getWireframeAttribute : function ( a ) { var b = g . get ( a ) ; if ( b ) { var c = a . index ; null !== c && b . version < c . version && e ( a ) } else e ( a ) ; return g . get ( a ) } } } function jj ( a , b , c , d ) { var e = d . isWebGL2 , f , g , h ; this . setMode = function ( a ) { f = a } ;
this . setIndex = function ( a ) { g = a . type ; h = a . bytesPerElement } ; this . render = function ( b , d ) { a . drawElements ( f , d , g , b * h ) ; c . update ( d , f ) } ; this . renderInstances = function ( d , m , r , p ) { if ( 0 !== p ) { if ( e ) { d = a ; var l = "drawElementsInstanced" } else if ( d = b . get ( "ANGLE_instanced_arrays" ) , l = "drawElementsInstancedANGLE" , null === d ) { console . error ( "THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays." ) ; return } d [ l ] ( f , r , g , m * h , p ) ; c . update ( r , f , p ) } } } function kj ( a ) { var b =
{ frame : 0 , calls : 0 , triangles : 0 , points : 0 , lines : 0 } ; return { memory : { geometries : 0 , textures : 0 } , render : b , programs : null , autoReset : ! 0 , reset : function ( ) { b . frame ++ ; b . calls = 0 ; b . triangles = 0 ; b . points = 0 ; b . lines = 0 } , update : function ( a , d , e ) { e = e || 1 ; b . calls ++ ; switch ( d ) { case 4 : b . triangles += a / 3 * e ; break ; case 5 : case 6 : b . triangles += e * ( a - 2 ) ; break ; case 1 : b . lines += a / 2 * e ; break ; case 3 : b . lines += e * ( a - 1 ) ; break ; case 2 : b . lines += e * a ; break ; case 0 : b . points += e * a ; break ; default : console . error ( "THREE.WebGLInfo: Unknown draw mode:" , d ) } } } } function lj ( a ,
b ) { return Math . abs ( b [ 1 ] ) - Math . abs ( a [ 1 ] ) } function mj ( a ) { var b = { } , c = new Float32Array ( 8 ) ; return { update : function ( d , e , f , g ) { var h = d . morphTargetInfluences , l = h . length ; d = b [ e . id ] ; if ( void 0 === d ) { d = [ ] ; for ( var m = 0 ; m < l ; m ++ ) d [ m ] = [ m , 0 ] ; b [ e . id ] = d } var r = f . morphTargets && e . morphAttributes . position ; f = f . morphNormals && e . morphAttributes . normal ; for ( m = 0 ; m < l ; m ++ ) { var p = d [ m ] ; 0 !== p [ 1 ] && ( r && e . deleteAttribute ( "morphTarget" + m ) , f && e . deleteAttribute ( "morphNormal" + m ) ) } for ( m = 0 ; m < l ; m ++ ) p = d [ m ] , p [ 0 ] = m , p [ 1 ] = h [ m ] ; d . sort ( lj ) ; for ( m = h = 0 ; 8 >
m ; m ++ ) { if ( p = d [ m ] ) if ( l = p [ 0 ] , p = p [ 1 ] ) { r && e . setAttribute ( "morphTarget" + m , r [ l ] ) ; f && e . setAttribute ( "morphNormal" + m , f [ l ] ) ; c [ m ] = p ; h += p ; continue } c [ m ] = 0 } e = e . morphTargetsRelative ? 1 : 1 - h ; g . getUniforms ( ) . setValue ( a , "morphTargetBaseInfluence" , e ) ; g . getUniforms ( ) . setValue ( a , "morphTargetInfluences" , c ) } } } function nj ( a , b , c , d ) { var e = { } ; return { update : function ( a ) { var f = d . render . frame , h = a . geometry , l = b . get ( a , h ) ; e [ l . id ] !== f && ( h . isGeometry && l . updateFromObject ( a ) , b . update ( l ) , e [ l . id ] = f ) ; a . isInstancedMesh && c . update ( a . instanceMatrix ,
34962 ) ; return l } , dispose : function ( ) { e = { } } } } function nb ( a , b , c , d , e , f , g , h , l , m ) { a = void 0 !== a ? a : [ ] ; Y . call ( this , a , void 0 !== b ? b : 301 , c , d , e , f , void 0 !== g ? g : 1022 , h , l , m ) ; this . flipY = ! 1 } function Bc ( a , b , c , d ) { Y . call ( this , null ) ; this . image = { data : a || null , width : b || 1 , height : c || 1 , depth : d || 1 } ; this . minFilter = this . magFilter = 1003 ; this . wrapR = 1001 ; this . flipY = this . generateMipmaps = ! 1 ; this . needsUpdate = ! 0 } function Cc ( a , b , c , d ) { Y . call ( this , null ) ; this . image = { data : a || null , width : b || 1 , height : c || 1 , depth : d || 1 } ; this . minFilter = this . magFilter =
1003 ; this . wrapR = 1001 ; this . flipY = this . generateMipmaps = ! 1 ; this . needsUpdate = ! 0 } function Dc ( a , b , c ) { var d = a [ 0 ] ; if ( 0 >= d || 0 < d ) return a ; var e = b * c , f = sh [ e ] ; void 0 === f && ( f = new Float32Array ( e ) , sh [ e ] = f ) ; if ( 0 !== b ) for ( d . toArray ( f , 0 ) , d = 1 , e = 0 ; d !== b ; ++ d ) e += c , a [ d ] . toArray ( f , e ) ; return f } function Ma ( a , b ) { if ( a . length !== b . length ) return ! 1 ; for ( var c = 0 , d = a . length ; c < d ; c ++ ) if ( a [ c ] !== b [ c ] ) return ! 1 ; return ! 0 } function Ha ( a , b ) { for ( var c = 0 , d = b . length ; c < d ; c ++ ) a [ c ] = b [ c ] } function th ( a , b ) { var c = uh [ b ] ; void 0 === c && ( c = new Int32Array ( b ) ,
uh [ b ] = c ) ; for ( var d = 0 ; d !== b ; ++ d ) c [ d ] = a . allocateTextureUnit ( ) ; return c } function oj ( a , b ) { var c = this . cache ; c [ 0 ] !== b && ( a . uniform1f ( this . addr , b ) , c [ 0 ] = b ) } function pj ( a , b ) { var c = this . cache ; if ( void 0 !== b . x ) { if ( c [ 0 ] !== b . x || c [ 1 ] !== b . y ) a . uniform2f ( this . addr , b . x , b . y ) , c [ 0 ] = b . x , c [ 1 ] = b . y } else Ma ( c , b ) || ( a . uniform2fv ( this . addr , b ) , Ha ( c , b ) ) } function qj ( a , b ) { var c = this . cache ; if ( void 0 !== b . x ) { if ( c [ 0 ] !== b . x || c [ 1 ] !== b . y || c [ 2 ] !== b . z ) a . uniform3f ( this . addr , b . x , b . y , b . z ) , c [ 0 ] = b . x , c [ 1 ] = b . y , c [ 2 ] = b . z } else if ( void 0 !== b . r ) { if ( c [ 0 ] !==
b . r || c [ 1 ] !== b . g || c [ 2 ] !== b . b ) a . uniform3f ( this . addr , b . r , b . g , b . b ) , c [ 0 ] = b . r , c [ 1 ] = b . g , c [ 2 ] = b . b } else Ma ( c , b ) || ( a . uniform3fv ( this . addr , b ) , Ha ( c , b ) ) } function rj ( a , b ) { var c = this . cache ; if ( void 0 !== b . x ) { if ( c [ 0 ] !== b . x || c [ 1 ] !== b . y || c [ 2 ] !== b . z || c [ 3 ] !== b . w ) a . uniform4f ( this . addr , b . x , b . y , b . z , b . w ) , c [ 0 ] = b . x , c [ 1 ] = b . y , c [ 2 ] = b . z , c [ 3 ] = b . w } else Ma ( c , b ) || ( a . uniform4fv ( this . addr , b ) , Ha ( c , b ) ) } function sj ( a , b ) { var c = this . cache , d = b . elements ; void 0 === d ? Ma ( c , b ) || ( a . uniformMatrix2fv ( this . addr , ! 1 , b ) , Ha ( c , b ) ) : Ma ( c , d ) || ( vh . set ( d ) , a . uniformMatrix2fv ( this . addr ,
! 1 , vh ) , Ha ( c , d ) ) } function tj ( a , b ) { var c = this . cache , d = b . elements ; void 0 === d ? Ma ( c , b ) || ( a . uniformMatrix3fv ( this . addr , ! 1 , b ) , Ha ( c , b ) ) : Ma ( c , d ) || ( wh . set ( d ) , a . uniformMatrix3fv ( this . addr , ! 1 , wh ) , Ha ( c , d ) ) } function uj ( a , b ) { var c = this . cache , d = b . elements ; void 0 === d ? Ma ( c , b ) || ( a . uniformMatrix4fv ( this . addr , ! 1 , b ) , Ha ( c , b ) ) : Ma ( c , d ) || ( xh . set ( d ) , a . uniformMatrix4fv ( this . addr , ! 1 , xh ) , Ha ( c , d ) ) } function vj ( a , b , c ) { var d = this . cache , e = c . allocateTextureUnit ( ) ; d [ 0 ] !== e && ( a . uniform1i ( this . addr , e ) , d [ 0 ] = e ) ; c . safeSetTexture2D ( b || yh ,
e ) } function wj ( a , b , c ) { var d = this . cache , e = c . allocateTextureUnit ( ) ; d [ 0 ] !== e && ( a . uniform1i ( this . addr , e ) , d [ 0 ] = e ) ; c . setTexture2DArray ( b || xj , e ) } function yj ( a , b , c ) { var d = this . cache , e = c . allocateTextureUnit ( ) ; d [ 0 ] !== e && ( a . uniform1i ( this . addr , e ) , d [ 0 ] = e ) ; c . setTexture3D ( b || zj , e ) } function Aj ( a , b , c ) { var d = this . cache , e = c . allocateTextureUnit ( ) ; d [ 0 ] !== e && ( a . uniform1i ( this . addr , e ) , d [ 0 ] = e ) ; c . safeSetTextureCube ( b || zh , e ) } function Bj ( a , b ) { var c = this . cache ; c [ 0 ] !== b && ( a . uniform1i ( this . addr , b ) , c [ 0 ] = b ) } function Cj ( a , b ) { var c =
this . cache ; Ma ( c , b ) || ( a . uniform2iv ( this . addr , b ) , Ha ( c , b ) ) } function Dj ( a , b ) { var c = this . cache ; Ma ( c , b ) || ( a . uniform3iv ( this . addr , b ) , Ha ( c , b ) ) } function Ej ( a , b ) { var c = this . cache ; Ma ( c , b ) || ( a . uniform4iv ( this . addr , b ) , Ha ( c , b ) ) } function Fj ( a ) { switch ( a ) { case 5126 : return oj ; case 35664 : return pj ; case 35665 : return qj ; case 35666 : return rj ; case 35674 : return sj ; case 35675 : return tj ; case 35676 : return uj ; case 35678 : case 36198 : return vj ; case 35679 : return yj ; case 35680 : return Aj ; case 36289 : return wj ; case 5124 : case 35670 : return Bj ;
case 35667 : case 35671 : return Cj ; case 35668 : case 35672 : return Dj ; case 35669 : case 35673 : return Ej } } function Gj ( a , b ) { a . uniform1fv ( this . addr , b ) } function Hj ( a , b ) { a . uniform1iv ( this . addr , b ) } function Ij ( a , b ) { a . uniform2iv ( this . addr , b ) } function Jj ( a , b ) { a . uniform3iv ( this . addr , b ) } function Kj ( a , b ) { a . uniform4iv ( this . addr , b ) } function Lj ( a , b ) { b = Dc ( b , this . size , 2 ) ; a . uniform2fv ( this . addr , b ) } function Mj ( a , b ) { b = Dc ( b , this . size , 3 ) ; a . uniform3fv ( this . addr , b ) } function Nj ( a , b ) { b = Dc ( b , this . size , 4 ) ; a . uniform4fv ( this . addr , b ) }
function Oj ( a , b ) { b = Dc ( b , this . size , 4 ) ; a . uniformMatrix2fv ( this . addr , ! 1 , b ) } function Pj ( a , b ) { b = Dc ( b , this . size , 9 ) ; a . uniformMatrix3fv ( this . addr , ! 1 , b ) } function Qj ( a , b ) { b = Dc ( b , this . size , 16 ) ; a . uniformMatrix4fv ( this . addr , ! 1 , b ) } function Rj ( a , b , c ) { var d = b . length , e = th ( c , d ) ; a . uniform1iv ( this . addr , e ) ; for ( a = 0 ; a !== d ; ++ a ) c . safeSetTexture2D ( b [ a ] || yh , e [ a ] ) } function Sj ( a , b , c ) { var d = b . length , e = th ( c , d ) ; a . uniform1iv ( this . addr , e ) ; for ( a = 0 ; a !== d ; ++ a ) c . safeSetTextureCube ( b [ a ] || zh , e [ a ] ) } function Tj ( a ) { switch ( a ) { case 5126 : return Gj ;
case 35664 : return Lj ; case 35665 : return Mj ; case 35666 : return Nj ; case 35674 : return Oj ; case 35675 : return Pj ; case 35676 : return Qj ; case 35678 : return Rj ; case 35680 : return Sj ; case 5124 : case 35670 : return Hj ; case 35667 : case 35671 : return Ij ; case 35668 : case 35672 : return Jj ; case 35669 : case 35673 : return Kj } } function Uj ( a , b , c ) { this . id = a ; this . addr = c ; this . cache = [ ] ; this . setValue = Fj ( b . type ) } function Ah ( a , b , c ) { this . id = a ; this . addr = c ; this . cache = [ ] ; this . size = b . size ; this . setValue = Tj ( b . type ) } function Bh ( a ) { this . id = a ; this . seq =
[ ] ; this . map = { } } function Cb ( a , b ) { this . seq = [ ] ; this . map = { } ; for ( var c = a . getProgramParameter ( b , 35718 ) , d = 0 ; d < c ; ++ d ) { var e = a . getActiveUniform ( b , d ) , f = a . getUniformLocation ( b , e . name ) , g = this , h = e . name , l = h . length ; for ( ig . lastIndex = 0 ; ; ) { var m = ig . exec ( h ) , r = ig . lastIndex , p = m [ 1 ] , k = m [ 3 ] ; "]" === m [ 2 ] && ( p |= 0 ) ; if ( void 0 === k || "[" === k && r + 2 === l ) { h = g ; e = void 0 === k ? new Uj ( p , e , f ) : new Ah ( p , e , f ) ; h . seq . push ( e ) ; h . map [ e . id ] = e ; break } else k = g . map [ p ] , void 0 === k && ( k = new Bh ( p ) , p = g , g = k , p . seq . push ( g ) , p . map [ g . id ] = g ) , g = k } } } function Ch ( a , b , c ) { b =
a . createShader ( b ) ; a . shaderSource ( b , c ) ; a . compileShader ( b ) ; return b } function Dh ( a ) { switch ( a ) { case 3E3 : return [ "Linear" , "( value )" ] ; case 3001 : return [ "sRGB" , "( value )" ] ; case 3002 : return [ "RGBE" , "( value )" ] ; case 3004 : return [ "RGBM" , "( value, 7.0 )" ] ; case 3005 : return [ "RGBM" , "( value, 16.0 )" ] ; case 3006 : return [ "RGBD" , "( value, 256.0 )" ] ; case 3007 : return [ "Gamma" , "( value, float( GAMMA_FACTOR ) )" ] ; case 3003 : return [ "LogLuv" , "( value )" ] ; default : throw Error ( "unsupported encoding: " + a ) ; } } function Eh ( a , b , c ) { var d =
a . getShaderParameter ( b , 35713 ) , e = a . getShaderInfoLog ( b ) . trim ( ) ; if ( d && "" === e ) return "" ; a = a . getShaderSource ( b ) . split ( "\n" ) ; for ( b = 0 ; b < a . length ; b ++ ) a [ b ] = b + 1 + ": " + a [ b ] ; a = a . join ( "\n" ) ; return "THREE.WebGLShader: gl.getShaderInfoLog() " + c + "\n" + e + a } function Ne ( a , b ) { b = Dh ( b ) ; return "vec4 " + a + "( vec4 value ) { return " + b [ 0 ] + "ToLinear" + b [ 1 ] + "; }" } function Vj ( a , b ) { b = Dh ( b ) ; return "vec4 " + a + "( vec4 value ) { return LinearTo" + b [ 0 ] + b [ 1 ] + "; }" } function Wj ( a , b ) { switch ( b ) { case 1 : b = "Linear" ; break ; case 2 : b = "Reinhard" ; break ; case 3 : b =
"Uncharted2" ; break ; case 4 : b = "OptimizedCineon" ; break ; case 5 : b = "ACESFilmic" ; break ; default : throw Error ( "unsupported toneMapping: " + b ) ; } return "vec3 " + a + "( vec3 color ) { return " + b + "ToneMapping( color ); }" } function Xj ( a , b , c ) { a = a || { } ; return [ a . derivatives || b . envMapCubeUV || b . bumpMap || b . tangentSpaceNormalMap || b . clearcoatNormalMap || b . flatShading ? "#extension GL_OES_standard_derivatives : enable" : "" , ( a . fragDepth || b . logarithmicDepthBuffer ) && c . get ( "EXT_frag_depth" ) ? "#extension GL_EXT_frag_depth : enable" : "" ,
a . drawBuffers && c . get ( "WEBGL_draw_buffers" ) ? "#extension GL_EXT_draw_buffers : require" : "" , ( a . shaderTextureLOD || b . envMap ) && c . get ( "EXT_shader_texture_lod" ) ? "#extension GL_EXT_shader_texture_lod : enable" : "" ] . filter ( Hd ) . join ( "\n" ) } function Yj ( a ) { var b = [ ] , c ; for ( c in a ) { var d = a [ c ] ; ! 1 !== d && b . push ( "#define " + c + " " + d ) } return b . join ( "\n" ) } function Hd ( a ) { return "" !== a } function Fh ( a , b ) { return a . replace ( /NUM_DIR_LIGHTS/g , b . numDirLights ) . replace ( /NUM_SPOT_LIGHTS/g , b . numSpotLights ) . replace ( /NUM_RECT_AREA_LIGHTS/g ,
b . numRectAreaLights ) . replace ( /NUM_POINT_LIGHTS/g , b . numPointLights ) . replace ( /NUM_HEMI_LIGHTS/g , b . numHemiLights ) . replace ( /NUM_DIR_LIGHT_SHADOWS/g , b . numDirLightShadows ) . replace ( /NUM_SPOT_LIGHT_SHADOWS/g , b . numSpotLightShadows ) . replace ( /NUM_POINT_LIGHT_SHADOWS/g , b . numPointLightShadows ) } function Gh ( a , b ) { return a . replace ( /NUM_CLIPPING_PLANES/g , b . numClippingPlanes ) . replace ( /UNION_CLIPPING_PLANES/g , b . numClippingPlanes - b . numClipIntersection ) } function jg ( a , b ) { a = Q [ b ] ; if ( void 0 === a ) throw Error ( "Can not resolve #include <" +
b + ">" ) ; return a . replace ( kg , jg ) } function Hh ( a , b , c , d ) { a = "" ; for ( b = parseInt ( b ) ; b < parseInt ( c ) ; b ++ ) a += d . replace ( /\[ i \]/g , "[ " + b + " ]" ) . replace ( /UNROLLED_LOOP_INDEX/g , b ) ; return a } function Ih ( a ) { var b = "precision " + a . precision + " float;\nprecision " + a . precision + " int;" ; "highp" === a . precision ? b += "\n#define HIGH_PRECISION" : "mediump" === a . precision ? b += "\n#define MEDIUM_PRECISION" : "lowp" === a . precision && ( b += "\n#define LOW_PRECISION" ) ; return b } function Zj ( a ) { var b = "SHADOWMAP_TYPE_BASIC" ; 1 === a . shadowMapType ? b = "SHADOWMAP_TYPE_PCF" :
2 === a . shadowMapType ? b = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === a . shadowMapType && ( b = "SHADOWMAP_TYPE_VSM" ) ; return b } function ak ( a ) { var b = "ENVMAP_TYPE_CUBE" ; if ( a . envMap ) switch ( a . envMapMode ) { case 301 : case 302 : b = "ENVMAP_TYPE_CUBE" ; break ; case 306 : case 307 : b = "ENVMAP_TYPE_CUBE_UV" ; break ; case 303 : case 304 : b = "ENVMAP_TYPE_EQUIREC" ; break ; case 305 : b = "ENVMAP_TYPE_SPHERE" } return b } function bk ( a ) { var b = "ENVMAP_MODE_REFLECTION" ; if ( a . envMap ) switch ( a . envMapMode ) { case 302 : case 304 : b = "ENVMAP_MODE_REFRACTION" } return b } function ck ( a ) { var b =
"ENVMAP_BLENDING_MULTIPLY" ; if ( a . envMap ) switch ( a . combine ) { case 0 : b = "ENVMAP_BLENDING_MULTIPLY" ; break ; case 1 : b = "ENVMAP_BLENDING_MIX" ; break ; case 2 : b = "ENVMAP_BLENDING_ADD" } return b } function dk ( a , b , c , d , e , f ) { var g = a . getContext ( ) , h = d . defines , l = e . vertexShader , m = e . fragmentShader , r = Zj ( f ) , p = ak ( f ) , k = bk ( f ) , u = ck ( f ) , q = 0 < a . gammaFactor ? a . gammaFactor : 1 , v = f . isWebGL2 ? "" : Xj ( d . extensions , f , b ) , n = Yj ( h ) , w = g . createProgram ( ) , x = f . numMultiviewViews ; d . isRawShaderMaterial ? ( h = [ n ] . filter ( Hd ) . join ( "\n" ) , 0 < h . length && ( h += "\n" ) , b = [ v ,
n ] . filter ( Hd ) . join ( "\n" ) , 0 < b . length && ( b += "\n" ) ) : ( h = [ Ih ( f ) , "#define SHADER_NAME " + e . name , n , f . instancing ? "#define USE_INSTANCING" : "" , f . supportsVertexTextures ? "#define VERTEX_TEXTURES" : "" , "#define GAMMA_FACTOR " + q , "#define MAX_BONES " + f . maxBones , f . useFog && f . fog ? "#define USE_FOG" : "" , f . useFog && f . fogExp2 ? "#define FOG_EXP2" : "" , f . map ? "#define USE_MAP" : "" , f . envMap ? "#define USE_ENVMAP" : "" , f . envMap ? "#define " + k : "" , f . lightMap ? "#define USE_LIGHTMAP" : "" , f . aoMap ? "#define USE_AOMAP" : "" , f . emissiveMap ? "#define USE_EMISSIVEMAP" :
"" , f . bumpMap ? "#define USE_BUMPMAP" : "" , f . normalMap ? "#define USE_NORMALMAP" : "" , f . normalMap && f . objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "" , f . normalMap && f . tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "" , f . clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "" , f . displacementMap && f . supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "" , f . specularMap ? "#define USE_SPECULARMAP" : "" , f . roughnessMap ? "#define USE_ROUGHNESSMAP" : "" , f . metalnessMap ? "#define USE_METALNESSMAP" : "" , f . alphaMap ? "#define USE_ALPHAMAP" :
"" , f . vertexTangents ? "#define USE_TANGENT" : "" , f . vertexColors ? "#define USE_COLOR" : "" , f . vertexUvs ? "#define USE_UV" : "" , f . uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "" , f . flatShading ? "#define FLAT_SHADED" : "" , f . skinning ? "#define USE_SKINNING" : "" , f . useVertexTexture ? "#define BONE_TEXTURE" : "" , f . morphTargets ? "#define USE_MORPHTARGETS" : "" , f . morphNormals && ! 1 === f . flatShading ? "#define USE_MORPHNORMALS" : "" , f . doubleSided ? "#define DOUBLE_SIDED" : "" , f . flipSided ? "#define FLIP_SIDED" : "" , f . shadowMapEnabled ? "#define USE_SHADOWMAP" :
"" , f . shadowMapEnabled ? "#define " + r : "" , f . sizeAttenuation ? "#define USE_SIZEATTENUATION" : "" , f . logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "" , f . logarithmicDepthBuffer && ( f . isWebGL2 || b . get ( "EXT_frag_depth" ) ) ? "#define USE_LOGDEPTHBUF_EXT" : "" , "uniform mat4 modelMatrix;" , "uniform mat4 modelViewMatrix;" , "uniform mat4 projectionMatrix;" , "uniform mat4 viewMatrix;" , "uniform mat3 normalMatrix;" , "uniform vec3 cameraPosition;" , "uniform bool isOrthographic;" , "#ifdef USE_INSTANCING" , " attribute mat4 instanceMatrix;" ,
"#endif" , "attribute vec3 position;" , "attribute vec3 normal;" , "attribute vec2 uv;" , "#ifdef USE_TANGENT" , "\tattribute vec4 tangent;" , "#endif" , "#ifdef USE_COLOR" , "\tattribute vec3 color;" , "#endif" , "#ifdef USE_MORPHTARGETS" , "\tattribute vec3 morphTarget0;" , "\tattribute vec3 morphTarget1;" , "\tattribute vec3 morphTarget2;" , "\tattribute vec3 morphTarget3;" , "\t#ifdef USE_MORPHNORMALS" , "\t\tattribute vec3 morphNormal0;" , "\t\tattribute vec3 morphNormal1;" , "\t\tattribute vec3 morphNormal2;" , "\t\tattribute vec3 morphNormal3;" ,
"\t#else" , "\t\tattribute vec3 morphTarget4;" , "\t\tattribute vec3 morphTarget5;" , "\t\tattribute vec3 morphTarget6;" , "\t\tattribute vec3 morphTarget7;" , "\t#endif" , "#endif" , "#ifdef USE_SKINNING" , "\tattribute vec4 skinIndex;" , "\tattribute vec4 skinWeight;" , "#endif" , "\n" ] . filter ( Hd ) . join ( "\n" ) , b = [ v , Ih ( f ) , "#define SHADER_NAME " + e . name , n , f . alphaTest ? "#define ALPHATEST " + f . alphaTest + ( f . alphaTest % 1 ? "" : ".0" ) : "" , "#define GAMMA_FACTOR " + q , f . useFog && f . fog ? "#define USE_FOG" : "" , f . useFog && f . fogExp2 ? "#define FOG_EXP2" :
"" , f . map ? "#define USE_MAP" : "" , f . matcap ? "#define USE_MATCAP" : "" , f . envMap ? "#define USE_ENVMAP" : "" , f . envMap ? "#define " + p : "" , f . envMap ? "#define " + k : "" , f . envMap ? "#define " + u : "" , f . lightMap ? "#define USE_LIGHTMAP" : "" , f . aoMap ? "#define USE_AOMAP" : "" , f . emissiveMap ? "#define USE_EMISSIVEMAP" : "" , f . bumpMap ? "#define USE_BUMPMAP" : "" , f . normalMap ? "#define USE_NORMALMAP" : "" , f . normalMap && f . objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "" , f . normalMap && f . tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "" , f . clearcoatNormalMap ?
"#define USE_CLEARCOAT_NORMALMAP" : "" , f . specularMap ? "#define USE_SPECULARMAP" : "" , f . roughnessMap ? "#define USE_ROUGHNESSMAP" : "" , f . metalnessMap ? "#define USE_METALNESSMAP" : "" , f . alphaMap ? "#define USE_ALPHAMAP" : "" , f . sheen ? "#define USE_SHEEN" : "" , f . vertexTangents ? "#define USE_TANGENT" : "" , f . vertexColors ? "#define USE_COLOR" : "" , f . vertexUvs ? "#define USE_UV" : "" , f . uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "" , f . gradientMap ? "#define USE_GRADIENTMAP" : "" , f . flatShading ? "#define FLAT_SHADED" : "" , f . doubleSided ? "#define DOUBLE_SIDED" :
"" , f . flipSided ? "#define FLIP_SIDED" : "" , f . shadowMapEnabled ? "#define USE_SHADOWMAP" : "" , f . shadowMapEnabled ? "#define " + r : "" , f . premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "" , f . physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "" , f . logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "" , f . logarithmicDepthBuffer && ( f . isWebGL2 || b . get ( "EXT_frag_depth" ) ) ? "#define USE_LOGDEPTHBUF_EXT" : "" , ( d . extensions && d . extensions . shaderTextureLOD || f . envMap ) && ( f . isWebGL2 || b . get ( "EXT_shader_texture_lod" ) ) ? "#define TEXTURE_LOD_EXT" :
"" , "uniform mat4 viewMatrix;" , "uniform vec3 cameraPosition;" , "uniform bool isOrthographic;" , 0 !== f . toneMapping ? "#define TONE_MAPPING" : "" , 0 !== f . toneMapping ? Q . tonemapping _pars _fragment : "" , 0 !== f . toneMapping ? Wj ( "toneMapping" , f . toneMapping ) : "" , f . dithering ? "#define DITHERING" : "" , f . outputEncoding || f . mapEncoding || f . matcapEncoding || f . envMapEncoding || f . emissiveMapEncoding ? Q . encodings _pars _fragment : "" , f . mapEncoding ? Ne ( "mapTexelToLinear" , f . mapEncoding ) : "" , f . matcapEncoding ? Ne ( "matcapTexelToLinear" , f . matcapEncoding ) :
"" , f . envMapEncoding ? Ne ( "envMapTexelToLinear" , f . envMapEncoding ) : "" , f . emissiveMapEncoding ? Ne ( "emissiveMapTexelToLinear" , f . emissiveMapEncoding ) : "" , f . outputEncoding ? Vj ( "linearToOutputTexel" , f . outputEncoding ) : "" , f . depthPacking ? "#define DEPTH_PACKING " + d . depthPacking : "" , "\n" ] . filter ( Hd ) . join ( "\n" ) ) ; l = l . replace ( kg , jg ) ; l = Fh ( l , f ) ; l = Gh ( l , f ) ; m = m . replace ( kg , jg ) ; m = Fh ( m , f ) ; m = Gh ( m , f ) ; l = l . replace ( Jh , Hh ) ; m = m . replace ( Jh , Hh ) ; f . isWebGL2 && ! d . isRawShaderMaterial && ( r = ! 1 , p = /^\s*#version\s+300\s+es\s*\n/ , d . isShaderMaterial &&
null !== l . match ( p ) && null !== m . match ( p ) && ( r = ! 0 , l = l . replace ( p , "" ) , m = m . replace ( p , "" ) ) , h = "#version 300 es\n\n#define attribute in\n#define varying out\n#define texture2D texture\n" + h , b = [ "#version 300 es\n\n#define varying in" , r ? "" : "out highp vec4 pc_fragColor;" , r ? "" : "#define gl_FragColor pc_fragColor" , "#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad" ] . join ( "\n" ) +
"\n" + b , 0 < x && ( h = h . replace ( "#version 300 es\n" , [ "#version 300 es\n\n#extension GL_OVR_multiview2 : require" , "layout(num_views = " + x + ") in;" , "#define VIEW_ID gl_ViewID_OVR" ] . join ( "\n" ) ) , h = h . replace ( "uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;" , [ "uniform mat4 modelViewMatrices[" + x + "];" , "uniform mat4 projectionMatrices[" + x + "];" , "uniform mat4 viewMatrices[" + x + "];" , "uniform mat3 normalMatrices[" + x + "];" , "#define modelViewMatrix modelViewMatrices[VIEW_ID]\n#define projectionMatrix projectionMatrices[VIEW_ID]\n#define viewMatrix viewMatrices[VIEW_ID]\n#define normalMatrix normalMatrices[VIEW_ID]" ] . join ( "\n" ) ) ,
b = b . replace ( "#version 300 es\n" , "#version 300 es\n\n#extension GL_OVR_multiview2 : require\n#define VIEW_ID gl_ViewID_OVR" ) , b = b . replace ( "uniform mat4 viewMatrix;" , [ "uniform mat4 viewMatrices[" + x + "];" , "#define viewMatrix viewMatrices[VIEW_ID]" ] . join ( "\n" ) ) ) ) ; m = b + m ; l = Ch ( g , 35633 , h + l ) ; m = Ch ( g , 35632 , m ) ; g . attachShader ( w , l ) ; g . attachShader ( w , m ) ; void 0 !== d . index0AttributeName ? g . bindAttribLocation ( w , 0 , d . index0AttributeName ) : ! 0 === f . morphTargets && g . bindAttribLocation ( w , 0 , "position" ) ; g . linkProgram ( w ) ; if ( a . debug . checkShaderErrors ) { a =
g . getProgramInfoLog ( w ) . trim ( ) ; f = g . getShaderInfoLog ( l ) . trim ( ) ; r = g . getShaderInfoLog ( m ) . trim ( ) ; k = p = ! 0 ; if ( ! 1 === g . getProgramParameter ( w , 35714 ) ) p = ! 1 , u = Eh ( g , l , "vertex" ) , q = Eh ( g , m , "fragment" ) , console . error ( "THREE.WebGLProgram: shader error: " , g . getError ( ) , "35715" , g . getProgramParameter ( w , 35715 ) , "gl.getProgramInfoLog" , a , u , q ) ; else if ( "" !== a ) console . warn ( "THREE.WebGLProgram: gl.getProgramInfoLog()" , a ) ; else if ( "" === f || "" === r ) k = ! 1 ; k && ( this . diagnostics = { runnable : p , material : d , programLog : a , vertexShader : { log : f , prefix : h } ,
fragmentShader : { log : r , prefix : b } } ) } g . deleteShader ( l ) ; g . deleteShader ( m ) ; var I ; this . getUniforms = function ( ) { void 0 === I && ( I = new Cb ( g , w ) ) ; return I } ; var G ; this . getAttributes = function ( ) { if ( void 0 === G ) { for ( var a = { } , b = g . getProgramParameter ( w , 35721 ) , c = 0 ; c < b ; c ++ ) { var d = g . getActiveAttrib ( w , c ) . name ; a [ d ] = g . getAttribLocation ( w , d ) } G = a } return G } ; this . destroy = function ( ) { g . deleteProgram ( w ) ; this . program = void 0 } ; this . name = e . name ; this . id = ek ++ ; this . cacheKey = c ; this . usedTimes = 1 ; this . program = w ; this . vertexShader = l ; this . fragmentShader =
m ; this . numMultiviewViews = x ; return this } function fk ( a , b , c ) { function d ( a , b ) { if ( a ) a . isTexture ? c = a . encoding : a . isWebGLRenderTarget && ( console . warn ( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ) , c = a . texture . encoding ) ; else var c = 3E3 ; 3E3 === c && b && ( c = 3007 ) ; return c } var e = [ ] , f = c . isWebGL2 , g = c . logarithmicDepthBuffer , h = c . floatVertexTextures , l = c . precision , m = c . maxVertexUniforms , r = c . vertexTextures , p = { MeshDepthMaterial : "depth" , MeshDistanceMaterial : "distanceRGBA" ,
MeshNormalMaterial : "normal" , MeshBasicMaterial : "basic" , MeshLambertMaterial : "lambert" , MeshPhongMaterial : "phong" , MeshToonMaterial : "phong" , MeshStandardMaterial : "physical" , MeshPhysicalMaterial : "physical" , MeshMatcapMaterial : "matcap" , LineBasicMaterial : "basic" , LineDashedMaterial : "dashed" , PointsMaterial : "points" , ShadowMaterial : "shadow" , SpriteMaterial : "sprite" } , k = "precision isWebGL2 supportsVertexTextures outputEncoding instancing numMultiviewViews map mapEncoding matcap matcapEncoding envMap envMapMode envMapEncoding envMapCubeUV lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap objectSpaceNormalMap tangentSpaceNormalMap clearcoatNormalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors vertexTangents vertexUvs uvsVertexOnly fog useFog fogExp2 flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights numDirLightShadows numPointLightShadows numSpotLightShadows shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking dithering sheen" . split ( " " ) ;
this . getParameters = function ( b , e , k , t , n , x , I ) { var q = p [ b . type ] ; if ( I . isSkinnedMesh ) { var u = I . skeleton . bones ; if ( h ) u = 1024 ; else { var v = Math . min ( Math . floor ( ( m - 20 ) / 4 ) , u . length ) ; v < u . length ? ( console . warn ( "THREE.WebGLRenderer: Skeleton has " + u . length + " bones. This GPU supports " + v + "." ) , u = 0 ) : u = v } } else u = 0 ; null !== b . precision && ( l = c . getMaxPrecision ( b . precision ) , l !== b . precision && console . warn ( "THREE.WebGLProgram.getParameters:" , b . precision , "not supported, using" , l , "instead." ) ) ; v = a . getRenderTarget ( ) ; return { isWebGL2 : f ,
shaderID : q , precision : l , instancing : ! 0 === I . isInstancedMesh , supportsVertexTextures : r , numMultiviewViews : v && v . isWebGLMultiviewRenderTarget ? v . numViews : 0 , outputEncoding : d ( v ? v . texture : null , a . gammaOutput ) , map : ! ! b . map , mapEncoding : d ( b . map , a . gammaInput ) , matcap : ! ! b . matcap , matcapEncoding : d ( b . matcap , a . gammaInput ) , envMap : ! ! b . envMap , envMapMode : b . envMap && b . envMap . mapping , envMapEncoding : d ( b . envMap , a . gammaInput ) , envMapCubeUV : ! ! b . envMap && ( 306 === b . envMap . mapping || 307 === b . envMap . mapping ) , lightMap : ! ! b . lightMap , aoMap : ! ! b . aoMap ,
2019-10-25 18:42:56 +08:00
emissiveMap : ! ! b . emissiveMap , emissiveMapEncoding : d ( b . emissiveMap , a . gammaInput ) , bumpMap : ! ! b . bumpMap , normalMap : ! ! b . normalMap , objectSpaceNormalMap : 1 === b . normalMapType , tangentSpaceNormalMap : 0 === b . normalMapType , clearcoatNormalMap : ! ! b . clearcoatNormalMap , displacementMap : ! ! b . displacementMap , roughnessMap : ! ! b . roughnessMap , metalnessMap : ! ! b . metalnessMap , specularMap : ! ! b . specularMap , alphaMap : ! ! b . alphaMap , gradientMap : ! ! b . gradientMap , sheen : ! ! b . sheen , combine : b . combine , vertexTangents : b . normalMap && b . vertexTangents , vertexColors : b . vertexColors ,
2019-12-11 10:47:24 +08:00
vertexUvs : ! ! b . map || ! ! b . bumpMap || ! ! b . normalMap || ! ! b . specularMap || ! ! b . alphaMap || ! ! b . emissiveMap || ! ! b . roughnessMap || ! ! b . metalnessMap || ! ! b . clearcoatNormalMap || ! ! b . displacementMap , uvsVertexOnly : ! ( b . map || b . bumpMap || b . normalMap || b . specularMap || b . alphaMap || b . emissiveMap || b . roughnessMap || b . metalnessMap || b . clearcoatNormalMap ) && ! ! b . displacementMap , fog : ! ! t , useFog : b . fog , fogExp2 : t && t . isFogExp2 , flatShading : b . flatShading , sizeAttenuation : b . sizeAttenuation , logarithmicDepthBuffer : g , skinning : b . skinning && 0 < u , maxBones : u ,
useVertexTexture : h , morphTargets : b . morphTargets , morphNormals : b . morphNormals , maxMorphTargets : a . maxMorphTargets , maxMorphNormals : a . maxMorphNormals , numDirLights : e . directional . length , numPointLights : e . point . length , numSpotLights : e . spot . length , numRectAreaLights : e . rectArea . length , numHemiLights : e . hemi . length , numDirLightShadows : e . directionalShadowMap . length , numPointLightShadows : e . pointShadowMap . length , numSpotLightShadows : e . spotShadowMap . length , numClippingPlanes : n , numClipIntersection : x , dithering : b . dithering , shadowMapEnabled : a . shadowMap . enabled &&
0 < k . length , shadowMapType : a . shadowMap . type , toneMapping : b . toneMapped ? a . toneMapping : 0 , physicallyCorrectLights : a . physicallyCorrectLights , premultipliedAlpha : b . premultipliedAlpha , alphaTest : b . alphaTest , doubleSided : 2 === b . side , flipSided : 1 === b . side , depthPacking : void 0 !== b . depthPacking ? b . depthPacking : ! 1 } } ; this . getProgramCacheKey = function ( b , c ) { var d = [ ] ; c . shaderID ? d . push ( c . shaderID ) : ( d . push ( b . fragmentShader ) , d . push ( b . vertexShader ) ) ; if ( void 0 !== b . defines ) for ( var e in b . defines ) d . push ( e ) , d . push ( b . defines [ e ] ) ; for ( e =
0 ; e < k . length ; e ++ ) d . push ( c [ k [ e ] ] ) ; d . push ( b . onBeforeCompile . toString ( ) ) ; d . push ( a . gammaOutput ) ; d . push ( a . gammaFactor ) ; return d . join ( ) } ; this . acquireProgram = function ( c , d , f , g ) { for ( var h , l = 0 , m = e . length ; l < m ; l ++ ) { var r = e [ l ] ; if ( r . cacheKey === g ) { h = r ; ++ h . usedTimes ; break } } void 0 === h && ( h = new dk ( a , b , g , c , d , f ) , e . push ( h ) ) ; return h } ; this . releaseProgram = function ( a ) { if ( 0 === -- a . usedTimes ) { var b = e . indexOf ( a ) ; e [ b ] = e [ e . length - 1 ] ; e . pop ( ) ; a . destroy ( ) } } ; this . programs = e } function gk ( ) { var a = new WeakMap ; return { get : function ( b ) { var c =
a . get ( b ) ; void 0 === c && ( c = { } , a . set ( b , c ) ) ; return c } , remove : function ( b ) { a . delete ( b ) } , update : function ( b , c , d ) { a . get ( b ) [ c ] = d } , dispose : function ( ) { a = new WeakMap } } } function hk ( a , b ) { return a . groupOrder !== b . groupOrder ? a . groupOrder - b . groupOrder : a . renderOrder !== b . renderOrder ? a . renderOrder - b . renderOrder : a . program !== b . program ? a . program . id - b . program . id : a . material . id !== b . material . id ? a . material . id - b . material . id : a . z !== b . z ? a . z - b . z : a . id - b . id } function ik ( a , b ) { return a . groupOrder !== b . groupOrder ? a . groupOrder - b . groupOrder :
a . renderOrder !== b . renderOrder ? a . renderOrder - b . renderOrder : a . z !== b . z ? b . z - a . z : a . id - b . id } function Kh ( ) { function a ( a , d , e , m , r , p ) { var g = b [ c ] ; void 0 === g ? ( g = { id : a . id , object : a , geometry : d , material : e , program : e . program || f , groupOrder : m , renderOrder : a . renderOrder , z : r , group : p } , b [ c ] = g ) : ( g . id = a . id , g . object = a , g . geometry = d , g . material = e , g . program = e . program || f , g . groupOrder = m , g . renderOrder = a . renderOrder , g . z = r , g . group = p ) ; c ++ ; return g } var b = [ ] , c = 0 , d = [ ] , e = [ ] , f = { id : - 1 } ; return { opaque : d , transparent : e , init : function ( ) { c = 0 ; d . length =
0 ; e . length = 0 } , push : function ( b , c , f , m , r , p ) { b = a ( b , c , f , m , r , p ) ; ( ! 0 === f . transparent ? e : d ) . push ( b ) } , unshift : function ( b , c , f , m , r , p ) { b = a ( b , c , f , m , r , p ) ; ( ! 0 === f . transparent ? e : d ) . unshift ( b ) } , sort : function ( ) { 1 < d . length && d . sort ( hk ) ; 1 < e . length && e . sort ( ik ) } } } function jk ( ) { function a ( c ) { c = c . target ; c . removeEventListener ( "dispose" , a ) ; b . delete ( c ) } var b = new WeakMap ; return { get : function ( c , d ) { var e = b . get ( c ) ; if ( void 0 === e ) { var f = new Kh ; b . set ( c , new WeakMap ) ; b . get ( c ) . set ( d , f ) ; c . addEventListener ( "dispose" , a ) } else f = e . get ( d ) , void 0 ===
f && ( f = new Kh , e . set ( d , f ) ) ; return f } , dispose : function ( ) { b = new WeakMap } } } function kk ( ) { var a = { } ; return { get : function ( b ) { if ( void 0 !== a [ b . id ] ) return a [ b . id ] ; switch ( b . type ) { case "DirectionalLight" : var c = { direction : new n , color : new H , shadow : ! 1 , shadowBias : 0 , shadowRadius : 1 , shadowMapSize : new B } ; break ; case "SpotLight" : c = { position : new n , direction : new n , color : new H , distance : 0 , coneCos : 0 , penumbraCos : 0 , decay : 0 , shadow : ! 1 , shadowBias : 0 , shadowRadius : 1 , shadowMapSize : new B } ; break ; case "PointLight" : c = { position : new n , color : new H ,
distance : 0 , decay : 0 , shadow : ! 1 , shadowBias : 0 , shadowRadius : 1 , shadowMapSize : new B , shadowCameraNear : 1 , shadowCameraFar : 1E3 } ; break ; case "HemisphereLight" : c = { direction : new n , skyColor : new H , groundColor : new H } ; break ; case "RectAreaLight" : c = { color : new H , position : new n , halfWidth : new n , halfHeight : new n } } return a [ b . id ] = c } } } function lk ( a , b ) { return ( b . castShadow ? 1 : 0 ) - ( a . castShadow ? 1 : 0 ) } function mk ( ) { for ( var a = new kk , b = { version : 0 , hash : { directionalLength : - 1 , pointLength : - 1 , spotLength : - 1 , rectAreaLength : - 1 , hemiLength : - 1 ,
numDirectionalShadows : - 1 , numPointShadows : - 1 , numSpotShadows : - 1 } , ambient : [ 0 , 0 , 0 ] , probe : [ ] , directional : [ ] , directionalShadowMap : [ ] , directionalShadowMatrix : [ ] , spot : [ ] , spotShadowMap : [ ] , spotShadowMatrix : [ ] , rectArea : [ ] , point : [ ] , pointShadowMap : [ ] , pointShadowMatrix : [ ] , hemi : [ ] , numDirectionalShadows : - 1 , numPointShadows : - 1 , numSpotShadows : - 1 } , c = 0 ; 9 > c ; c ++ ) b . probe . push ( new n ) ; var d = new n , e = new S , f = new S ; return { setup : function ( c , h , l ) { for ( var g = 0 , r = 0 , p = 0 , k = 0 ; 9 > k ; k ++ ) b . probe [ k ] . set ( 0 , 0 , 0 ) ; var u = h = 0 , q = 0 , v = 0 , n = 0 , w = 0 , x =
0 , I = 0 ; l = l . matrixWorldInverse ; c . sort ( lk ) ; k = 0 ; for ( var G = c . length ; k < G ; k ++ ) { var z = c [ k ] , Ba = z . color , ka = z . intensity , B = z . distance , Na = z . shadow && z . shadow . map ? z . shadow . map . texture : null ; if ( z . isAmbientLight ) g += Ba . r * ka , r += Ba . g * ka , p += Ba . b * ka ; else if ( z . isLightProbe ) for ( Na = 0 ; 9 > Na ; Na ++ ) b . probe [ Na ] . addScaledVector ( z . sh . coefficients [ Na ] , ka ) ; else if ( z . isDirectionalLight ) { var L = a . get ( z ) ; L . color . copy ( z . color ) . multiplyScalar ( z . intensity ) ; L . direction . setFromMatrixPosition ( z . matrixWorld ) ; d . setFromMatrixPosition ( z . target . matrixWorld ) ;
L . direction . sub ( d ) ; L . direction . transformDirection ( l ) ; if ( L . shadow = z . castShadow ) ka = z . shadow , L . shadowBias = ka . bias , L . shadowRadius = ka . radius , L . shadowMapSize = ka . mapSize , b . directionalShadowMap [ h ] = Na , b . directionalShadowMatrix [ h ] = z . shadow . matrix , w ++ ; b . directional [ h ] = L ; h ++ } else if ( z . isSpotLight ) { L = a . get ( z ) ; L . position . setFromMatrixPosition ( z . matrixWorld ) ; L . position . applyMatrix4 ( l ) ; L . color . copy ( Ba ) . multiplyScalar ( ka ) ; L . distance = B ; L . direction . setFromMatrixPosition ( z . matrixWorld ) ; d . setFromMatrixPosition ( z . target . matrixWorld ) ;
L . direction . sub ( d ) ; L . direction . transformDirection ( l ) ; L . coneCos = Math . cos ( z . angle ) ; L . penumbraCos = Math . cos ( z . angle * ( 1 - z . penumbra ) ) ; L . decay = z . decay ; if ( L . shadow = z . castShadow ) ka = z . shadow , L . shadowBias = ka . bias , L . shadowRadius = ka . radius , L . shadowMapSize = ka . mapSize , b . spotShadowMap [ q ] = Na , b . spotShadowMatrix [ q ] = z . shadow . matrix , I ++ ; b . spot [ q ] = L ; q ++ } else if ( z . isRectAreaLight ) L = a . get ( z ) , L . color . copy ( Ba ) . multiplyScalar ( ka ) , L . position . setFromMatrixPosition ( z . matrixWorld ) , L . position . applyMatrix4 ( l ) , f . identity ( ) , e . copy ( z . matrixWorld ) ,
e . premultiply ( l ) , f . extractRotation ( e ) , L . halfWidth . set ( . 5 * z . width , 0 , 0 ) , L . halfHeight . set ( 0 , . 5 * z . height , 0 ) , L . halfWidth . applyMatrix4 ( f ) , L . halfHeight . applyMatrix4 ( f ) , b . rectArea [ v ] = L , v ++ ; else if ( z . isPointLight ) { L = a . get ( z ) ; L . position . setFromMatrixPosition ( z . matrixWorld ) ; L . position . applyMatrix4 ( l ) ; L . color . copy ( z . color ) . multiplyScalar ( z . intensity ) ; L . distance = z . distance ; L . decay = z . decay ; if ( L . shadow = z . castShadow ) ka = z . shadow , L . shadowBias = ka . bias , L . shadowRadius = ka . radius , L . shadowMapSize = ka . mapSize , L . shadowCameraNear =
ka . camera . near , L . shadowCameraFar = ka . camera . far , b . pointShadowMap [ u ] = Na , b . pointShadowMatrix [ u ] = z . shadow . matrix , x ++ ; b . point [ u ] = L ; u ++ } else z . isHemisphereLight && ( L = a . get ( z ) , L . direction . setFromMatrixPosition ( z . matrixWorld ) , L . direction . transformDirection ( l ) , L . direction . normalize ( ) , L . skyColor . copy ( z . color ) . multiplyScalar ( ka ) , L . groundColor . copy ( z . groundColor ) . multiplyScalar ( ka ) , b . hemi [ n ] = L , n ++ ) } b . ambient [ 0 ] = g ; b . ambient [ 1 ] = r ; b . ambient [ 2 ] = p ; c = b . hash ; if ( c . directionalLength !== h || c . pointLength !== u || c . spotLength !==
q || c . rectAreaLength !== v || c . hemiLength !== n || c . numDirectionalShadows !== w || c . numPointShadows !== x || c . numSpotShadows !== I ) b . directional . length = h , b . spot . length = q , b . rectArea . length = v , b . point . length = u , b . hemi . length = n , b . directionalShadowMap . length = w , b . pointShadowMap . length = x , b . spotShadowMap . length = I , b . directionalShadowMatrix . length = w , b . pointShadowMatrix . length = x , b . spotShadowMatrix . length = I , c . directionalLength = h , c . pointLength = u , c . spotLength = q , c . rectAreaLength = v , c . hemiLength = n , c . numDirectionalShadows = w , c . numPointShadows =
x , c . numSpotShadows = I , b . version = nk ++ } , state : b } } function Lh ( ) { var a = new mk , b = [ ] , c = [ ] ; return { init : function ( ) { b . length = 0 ; c . length = 0 } , state : { lightsArray : b , shadowsArray : c , lights : a } , setupLights : function ( d ) { a . setup ( b , c , d ) } , pushLight : function ( a ) { b . push ( a ) } , pushShadow : function ( a ) { c . push ( a ) } } } function ok ( ) { function a ( c ) { c = c . target ; c . removeEventListener ( "dispose" , a ) ; b . delete ( c ) } var b = new WeakMap ; return { get : function ( c , d ) { if ( ! 1 === b . has ( c ) ) { var e = new Lh ; b . set ( c , new WeakMap ) ; b . get ( c ) . set ( d , e ) ; c . addEventListener ( "dispose" ,
a ) } else ! 1 === b . get ( c ) . has ( d ) ? ( e = new Lh , b . get ( c ) . set ( d , e ) ) : e = b . get ( c ) . get ( d ) ; return e } , dispose : function ( ) { b = new WeakMap } } } function Db ( a ) { C . call ( this ) ; this . type = "MeshDepthMaterial" ; this . depthPacking = 3200 ; this . morphTargets = this . skinning = ! 1 ; this . displacementMap = this . alphaMap = this . map = null ; this . displacementScale = 1 ; this . displacementBias = 0 ; this . wireframe = ! 1 ; this . wireframeLinewidth = 1 ; this . fog = ! 1 ; this . setValues ( a ) } function Eb ( a ) { C . call ( this ) ; this . type = "MeshDistanceMaterial" ; this . referencePosition = new n ; this . nearDistance =
1 ; this . farDistance = 1E3 ; this . morphTargets = this . skinning = ! 1 ; this . displacementMap = this . alphaMap = this . map = null ; this . displacementScale = 1 ; this . displacementBias = 0 ; this . fog = ! 1 ; this . setValues ( a ) } function Mh ( a , b , c ) { function d ( a , b , c ) { c = a << 0 | b << 1 | c << 2 ; var d = p [ c ] ; void 0 === d && ( d = new Db ( { depthPacking : 3201 , morphTargets : a , skinning : b } ) , p [ c ] = d ) ; return d } function e ( a , b , c ) { c = a << 0 | b << 1 | c << 2 ; var d = k [ c ] ; void 0 === d && ( d = new Eb ( { morphTargets : a , skinning : b } ) , k [ c ] = d ) ; return d } function f ( b , c , f , g , h , l ) { var m = b . geometry , r = d , p = b . customDepthMaterial ;
! 0 === f . isPointLight && ( r = e , p = b . customDistanceMaterial ) ; void 0 === p ? ( p = ! 1 , ! 0 === c . morphTargets && ( ! 0 === m . isBufferGeometry ? p = m . morphAttributes && m . morphAttributes . position && 0 < m . morphAttributes . position . length : ! 0 === m . isGeometry && ( p = m . morphTargets && 0 < m . morphTargets . length ) ) , m = ! 1 , ! 0 === b . isSkinnedMesh && ( ! 0 === c . skinning ? m = ! 0 : console . warn ( "THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:" , b ) ) , b = r ( p , m , ! 0 === b . isInstancedMesh ) ) : b = p ; a . localClippingEnabled && ! 0 === c . clipShadows && 0 !== c . clippingPlanes . length &&
( p = b . uuid , r = c . uuid , m = u [ p ] , void 0 === m && ( m = { } , u [ p ] = m ) , p = m [ r ] , void 0 === p && ( p = b . clone ( ) , m [ r ] = p ) , b = p ) ; b . visible = c . visible ; b . wireframe = c . wireframe ; b . side = 3 === l ? null !== c . shadowSide ? c . shadowSide : c . side : null !== c . shadowSide ? c . shadowSide : q [ c . side ] ; b . clipShadows = c . clipShadows ; b . clippingPlanes = c . clippingPlanes ; b . clipIntersection = c . clipIntersection ; b . wireframeLinewidth = c . wireframeLinewidth ; b . linewidth = c . linewidth ; ! 0 === f . isPointLight && ! 0 === b . isMeshDistanceMaterial && ( b . referencePosition . setFromMatrixPosition ( f . matrixWorld ) ,
b . nearDistance = g , b . farDistance = h ) ; return b } function g ( c , d , e , l , m ) { if ( ! 1 !== c . visible ) { if ( c . layers . test ( d . layers ) && ( c . isMesh || c . isLine || c . isPoints ) && ( c . castShadow || c . receiveShadow && 3 === m ) && ( ! c . frustumCulled || h . intersectsObject ( c ) ) ) { c . modelViewMatrix . multiplyMatrices ( e . matrixWorldInverse , c . matrixWorld ) ; var r = b . update ( c ) , p = c . material ; if ( Array . isArray ( p ) ) for ( var k = r . groups , t = 0 , q = k . length ; t < q ; t ++ ) { var u = k [ t ] , v = p [ u . materialIndex ] ; v && v . visible && ( v = f ( c , v , l , e . near , e . far , m ) , a . renderBufferDirect ( e , null , r , v , c ,
u ) ) } else p . visible && ( v = f ( c , p , l , e . near , e . far , m ) , a . renderBufferDirect ( e , null , r , v , c , null ) ) } c = c . children ; r = 0 ; for ( p = c . length ; r < p ; r ++ ) g ( c [ r ] , d , e , l , m ) } } var h = new Ed , l = new B , m = new B , r = new ba , p = [ ] , k = [ ] , u = { } , q = { 0 : 1 , 1 : 0 , 2 : 2 } , v = new na ( { defines : { SAMPLE _RATE : . 25 , HALF _SAMPLE _RATE : . 125 } , uniforms : { shadow _pass : { value : null } , resolution : { value : new B } , radius : { value : 4 } } , vertexShader : "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}" , fragmentShader : "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpack2HalfToRGBA ( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" } ) ,
n = v . clone ( ) ; n . defines . HORIZONAL _PASS = 1 ; var w = new E ; w . setAttribute ( "position" , new N ( new Float32Array ( [ - 1 , - 1 , . 5 , 3 , - 1 , . 5 , - 1 , 3 , . 5 ] ) , 3 ) ) ; var x = new ja ( w , v ) , I = this ; this . enabled = ! 1 ; this . autoUpdate = ! 0 ; this . needsUpdate = ! 1 ; this . type = 1 ; this . render = function ( d , e , f ) { if ( ! 1 !== I . enabled && ( ! 1 !== I . autoUpdate || ! 1 !== I . needsUpdate ) && 0 !== d . length ) { var p = a . getRenderTarget ( ) , k = a . getActiveCubeFace ( ) , t = a . getActiveMipmapLevel ( ) , q = a . state ; q . setBlending ( 0 ) ; q . buffers . color . setClear ( 1 , 1 , 1 , 1 ) ; q . buffers . depth . setTest ( ! 0 ) ; q . setScissorTest ( ! 1 ) ;
for ( var u = 0 , A = d . length ; u < A ; u ++ ) { var w = d [ u ] , z = w . shadow ; if ( void 0 === z ) console . warn ( "THREE.WebGLShadowMap:" , w , "has no shadow." ) ; else { l . copy ( z . mapSize ) ; var G = z . getFrameExtents ( ) ; l . multiply ( G ) ; m . copy ( z . mapSize ) ; if ( l . x > c || l . y > c ) console . warn ( "THREE.WebGLShadowMap:" , w , "has shadow exceeding max texture size, reducing" ) , l . x > c && ( m . x = Math . floor ( c / G . x ) , l . x = m . x * G . x , z . mapSize . x = m . x ) , l . y > c && ( m . y = Math . floor ( c / G . y ) , l . y = m . y * G . y , z . mapSize . y = m . y ) ; null !== z . map || z . isPointLightShadow || 3 !== this . type || ( G = { minFilter : 1006 , magFilter : 1006 ,
format : 1023 } , z . map = new la ( l . x , l . y , G ) , z . map . texture . name = w . name + ".shadowMap" , z . mapPass = new la ( l . x , l . y , G ) , z . camera . updateProjectionMatrix ( ) ) ; null === z . map && ( G = { minFilter : 1003 , magFilter : 1003 , format : 1023 } , z . map = new la ( l . x , l . y , G ) , z . map . texture . name = w . name + ".shadowMap" , z . camera . updateProjectionMatrix ( ) ) ; a . setRenderTarget ( z . map ) ; a . clear ( ) ; G = z . getViewportCount ( ) ; for ( var Ba = 0 ; Ba < G ; Ba ++ ) { var B = z . getViewport ( Ba ) ; r . set ( m . x * B . x , m . y * B . y , m . x * B . z , m . y * B . w ) ; q . viewport ( r ) ; z . updateMatrices ( w , Ba ) ; h = z . getFrustum ( ) ; g ( e ,
f , z . camera , w , this . type ) } z . isPointLightShadow || 3 !== this . type || ( w = z , z = f , G = b . update ( x ) , v . uniforms . shadow _pass . value = w . map . texture , v . uniforms . resolution . value = w . mapSize , v . uniforms . radius . value = w . radius , a . setRenderTarget ( w . mapPass ) , a . clear ( ) , a . renderBufferDirect ( z , null , G , v , x , null ) , n . uniforms . shadow _pass . value = w . mapPass . texture , n . uniforms . resolution . value = w . mapSize , n . uniforms . radius . value = w . radius , a . setRenderTarget ( w . map ) , a . clear ( ) , a . renderBufferDirect ( z , null , G , n , x , null ) ) } } I . needsUpdate = ! 1 ; a . setRenderTarget ( p ,
k , t ) } } } function pk ( a , b , c ) { function d ( b , c , d ) { var e = new Uint8Array ( 4 ) , f = a . createTexture ( ) ; a . bindTexture ( b , f ) ; a . texParameteri ( b , 10241 , 9728 ) ; a . texParameteri ( b , 10240 , 9728 ) ; for ( b = 0 ; b < d ; b ++ ) a . texImage2D ( c + b , 0 , 6408 , 1 , 1 , 0 , 6408 , 5121 , e ) ; return f } function e ( c , d ) { n [ c ] = 1 ; 0 === w [ c ] && ( a . enableVertexAttribArray ( c ) , w [ c ] = 1 ) ; x [ c ] !== d && ( ( k ? a : b . get ( "ANGLE_instanced_arrays" ) ) [ k ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE" ] ( c , d ) , x [ c ] = d ) } function f ( b ) { ! 0 !== I [ b ] && ( a . enable ( b ) , I [ b ] = ! 0 ) } function g ( b ) { ! 1 !== I [ b ] && ( a . disable ( b ) ,
I [ b ] = ! 1 ) } function h ( b , c , d , e , h , l , m , r ) { if ( 0 === b ) z && ( g ( 3042 ) , z = ! 1 ) ; else if ( z || ( f ( 3042 ) , z = ! 0 ) , 5 !== b ) { if ( b !== Ba || r !== y ) { if ( 100 !== B || 100 !== L ) a . blendEquation ( 32774 ) , L = B = 100 ; if ( r ) switch ( b ) { case 1 : a . blendFuncSeparate ( 1 , 771 , 1 , 771 ) ; break ; case 2 : a . blendFunc ( 1 , 1 ) ; break ; case 3 : a . blendFuncSeparate ( 0 , 0 , 769 , 771 ) ; break ; case 4 : a . blendFuncSeparate ( 0 , 768 , 0 , 770 ) ; break ; default : console . error ( "THREE.WebGLState: Invalid blending: " , b ) } else switch ( b ) { case 1 : a . blendFuncSeparate ( 770 , 771 , 1 , 771 ) ; break ; case 2 : a . blendFunc ( 770 , 1 ) ;
break ; case 3 : a . blendFunc ( 0 , 769 ) ; break ; case 4 : a . blendFunc ( 0 , 768 ) ; break ; default : console . error ( "THREE.WebGLState: Invalid blending: " , b ) } lg = Id = Na = D = null ; Ba = b ; y = r } } else { h = h || c ; l = l || d ; m = m || e ; if ( c !== B || h !== L ) a . blendEquationSeparate ( Ec [ c ] , Ec [ h ] ) , B = c , L = h ; if ( d !== D || e !== Na || l !== Id || m !== lg ) a . blendFuncSeparate ( M [ d ] , M [ e ] , M [ l ] , M [ m ] ) , D = d , Na = e , Id = l , lg = m ; Ba = b ; y = null } } function l ( b ) { E !== b && ( b ? a . frontFace ( 2304 ) : a . frontFace ( 2305 ) , E = b ) } function m ( b ) { 0 !== b ? ( f ( 2884 ) , b !== H && ( 1 === b ? a . cullFace ( 1029 ) : 2 === b ? a . cullFace ( 1028 ) :
a . cullFace ( 1032 ) ) ) : g ( 2884 ) ; H = b } function r ( b , c , d ) { if ( b ) { if ( f ( 32823 ) , F !== c || O !== d ) a . polygonOffset ( c , d ) , F = c , O = d } else g ( 32823 ) } function p ( b ) { void 0 === b && ( b = 33984 + ea - 1 ) ; C !== b && ( a . activeTexture ( b ) , C = b ) } var k = c . isWebGL2 , u = new function ( ) { var b = ! 1 , c = new ba , d = null , e = new ba ( 0 , 0 , 0 , 0 ) ; return { setMask : function ( c ) { d === c || b || ( a . colorMask ( c , c , c , c ) , d = c ) } , setLocked : function ( a ) { b = a } , setClear : function ( b , d , f , g , h ) { ! 0 === h && ( b *= g , d *= g , f *= g ) ; c . set ( b , d , f , g ) ; ! 1 === e . equals ( c ) && ( a . clearColor ( b , d , f , g ) , e . copy ( c ) ) } , reset : function ( ) { b =
! 1 ; d = null ; e . set ( - 1 , 0 , 0 , 0 ) } } } , q = new function ( ) { var b = ! 1 , c = null , d = null , e = null ; return { setTest : function ( a ) { a ? f ( 2929 ) : g ( 2929 ) } , setMask : function ( d ) { c === d || b || ( a . depthMask ( d ) , c = d ) } , setFunc : function ( b ) { if ( d !== b ) { if ( b ) switch ( b ) { case 0 : a . depthFunc ( 512 ) ; break ; case 1 : a . depthFunc ( 519 ) ; break ; case 2 : a . depthFunc ( 513 ) ; break ; case 3 : a . depthFunc ( 515 ) ; break ; case 4 : a . depthFunc ( 514 ) ; break ; case 5 : a . depthFunc ( 518 ) ; break ; case 6 : a . depthFunc ( 516 ) ; break ; case 7 : a . depthFunc ( 517 ) ; break ; default : a . depthFunc ( 515 ) } else a . depthFunc ( 515 ) ;
d = b } } , setLocked : function ( a ) { b = a } , setClear : function ( b ) { e !== b && ( a . clearDepth ( b ) , e = b ) } , reset : function ( ) { b = ! 1 ; e = d = c = null } } } , v = new function ( ) { var b = ! 1 , c = null , d = null , e = null , h = null , l = null , m = null , r = null , p = null ; return { setTest : function ( a ) { b || ( a ? f ( 2960 ) : g ( 2960 ) ) } , setMask : function ( d ) { c === d || b || ( a . stencilMask ( d ) , c = d ) } , setFunc : function ( b , c , f ) { if ( d !== b || e !== c || h !== f ) a . stencilFunc ( b , c , f ) , d = b , e = c , h = f } , setOp : function ( b , c , d ) { if ( l !== b || m !== c || r !== d ) a . stencilOp ( b , c , d ) , l = b , m = c , r = d } , setLocked : function ( a ) { b = a } , setClear : function ( b ) { p !==
b && ( a . clearStencil ( b ) , p = b ) } , reset : function ( ) { b = ! 1 ; p = r = m = l = h = e = d = c = null } } } ; c = a . getParameter ( 34921 ) ; var n = new Uint8Array ( c ) , w = new Uint8Array ( c ) , x = new Uint8Array ( c ) , I = { } , G = null , z = null , Ba = null , B = null , D = null , Na = null , L = null , Id = null , lg = null , y = ! 1 , E = null , H = null , K = null , F = null , O = null , ea = a . getParameter ( 35661 ) , N = ! 1 ; c = 0 ; c = a . getParameter ( 7938 ) ; - 1 !== c . indexOf ( "WebGL" ) ? ( c = parseFloat ( /^WebGL ([0-9])/ . exec ( c ) [ 1 ] ) , N = 1 <= c ) : - 1 !== c . indexOf ( "OpenGL ES" ) && ( c = parseFloat ( /^OpenGL ES ([0-9])/ . exec ( c ) [ 1 ] ) , N = 2 <= c ) ; var C = null ,
Re = { } , $b = new ba , Nh = new ba , ob = { } ; ob [ 3553 ] = d ( 3553 , 3553 , 1 ) ; ob [ 34067 ] = d ( 34067 , 34069 , 6 ) ; u . setClear ( 0 , 0 , 0 , 1 ) ; q . setClear ( 1 ) ; v . setClear ( 0 ) ; f ( 2929 ) ; q . setFunc ( 3 ) ; l ( ! 1 ) ; m ( 1 ) ; f ( 2884 ) ; h ( 0 ) ; var Ec = { 100 : 32774 , 101 : 32778 , 102 : 32779 } ; k ? ( Ec [ 103 ] = 32775 , Ec [ 104 ] = 32776 ) : ( c = b . get ( "EXT_blend_minmax" ) , null !== c && ( Ec [ 103 ] = c . MIN _EXT , Ec [ 104 ] = c . MAX _EXT ) ) ; var M = { 200 : 0 , 201 : 1 , 202 : 768 , 204 : 770 , 210 : 776 , 208 : 774 , 206 : 772 , 203 : 769 , 205 : 771 , 209 : 775 , 207 : 773 } ; return { buffers : { color : u , depth : q , stencil : v } , initAttributes : function ( ) { for ( var a = 0 , b = n . length ; a <
b ; a ++ ) n [ a ] = 0 } , enableAttribute : function ( a ) { e ( a , 0 ) } , enableAttributeAndDivisor : e , disableUnusedAttributes : function ( ) { for ( var b = 0 , c = w . length ; b !== c ; ++ b ) w [ b ] !== n [ b ] && ( a . disableVertexAttribArray ( b ) , w [ b ] = 0 ) } , enable : f , disable : g , useProgram : function ( b ) { return G !== b ? ( a . useProgram ( b ) , G = b , ! 0 ) : ! 1 } , setBlending : h , setMaterial : function ( a , b ) { 2 === a . side ? g ( 2884 ) : f ( 2884 ) ; var c = 1 === a . side ; b && ( c = ! c ) ; l ( c ) ; 1 === a . blending && ! 1 === a . transparent ? h ( 0 ) : h ( a . blending , a . blendEquation , a . blendSrc , a . blendDst , a . blendEquationAlpha , a . blendSrcAlpha ,
a . blendDstAlpha , a . premultipliedAlpha ) ; q . setFunc ( a . depthFunc ) ; q . setTest ( a . depthTest ) ; q . setMask ( a . depthWrite ) ; u . setMask ( a . colorWrite ) ; b = a . stencilWrite ; v . setTest ( b ) ; b && ( v . setMask ( a . stencilWriteMask ) , v . setFunc ( a . stencilFunc , a . stencilRef , a . stencilFuncMask ) , v . setOp ( a . stencilFail , a . stencilZFail , a . stencilZPass ) ) ; r ( a . polygonOffset , a . polygonOffsetFactor , a . polygonOffsetUnits ) } , setFlipSided : l , setCullFace : m , setLineWidth : function ( b ) { b !== K && ( N && a . lineWidth ( b ) , K = b ) } , setPolygonOffset : r , setScissorTest : function ( a ) { a ?
f ( 3089 ) : g ( 3089 ) } , activeTexture : p , bindTexture : function ( b , c ) { null === C && p ( ) ; var d = Re [ C ] ; void 0 === d && ( d = { type : void 0 , texture : void 0 } , Re [ C ] = d ) ; if ( d . type !== b || d . texture !== c ) a . bindTexture ( b , c || ob [ b ] ) , d . type = b , d . texture = c } , unbindTexture : function ( ) { var b = Re [ C ] ; void 0 !== b && void 0 !== b . type && ( a . bindTexture ( b . type , null ) , b . type = void 0 , b . texture = void 0 ) } , compressedTexImage2D : function ( ) { try { a . compressedTexImage2D . apply ( a , arguments ) } catch ( W ) { console . error ( "THREE.WebGLState:" , W ) } } , texImage2D : function ( ) { try { a . texImage2D . apply ( a ,
arguments ) } catch ( W ) { console . error ( "THREE.WebGLState:" , W ) } } , texImage3D : function ( ) { try { a . texImage3D . apply ( a , arguments ) } catch ( W ) { console . error ( "THREE.WebGLState:" , W ) } } , scissor : function ( b ) { ! 1 === $b . equals ( b ) && ( a . scissor ( b . x , b . y , b . z , b . w ) , $b . copy ( b ) ) } , viewport : function ( b ) { ! 1 === Nh . equals ( b ) && ( a . viewport ( b . x , b . y , b . z , b . w ) , Nh . copy ( b ) ) } , reset : function ( ) { for ( var b = 0 ; b < w . length ; b ++ ) 1 === w [ b ] && ( a . disableVertexAttribArray ( b ) , w [ b ] = 0 ) ; I = { } ; C = null ; Re = { } ; H = E = Ba = G = null ; u . reset ( ) ; q . reset ( ) ; v . reset ( ) } } } function qk ( a , b , c ,
d , e , f , g ) { function h ( a , b ) { return C ? new OffscreenCanvas ( a , b ) : document . createElementNS ( "http://www.w3.org/1999/xhtml" , "canvas" ) } function l ( a , b , c , d ) { var e = 1 ; if ( a . width > d || a . height > d ) e = d / Math . max ( a . width , a . height ) ; if ( 1 > e || ! 0 === b ) { if ( "undefined" !== typeof HTMLImageElement && a instanceof HTMLImageElement || "undefined" !== typeof HTMLCanvasElement && a instanceof HTMLCanvasElement || "undefined" !== typeof ImageBitmap && a instanceof ImageBitmap ) return d = b ? R . floorPowerOfTwo : Math . floor , b = d ( e * a . width ) , e = d ( e * a . height ) , void 0 ===
F && ( F = h ( b , e ) ) , c = c ? h ( b , e ) : F , c . width = b , c . height = e , c . getContext ( "2d" ) . drawImage ( a , 0 , 0 , b , e ) , console . warn ( "THREE.WebGLRenderer: Texture has been resized from (" + a . width + "x" + a . height + ") to (" + b + "x" + e + ")." ) , c ; "data" in a && console . warn ( "THREE.WebGLRenderer: Image in DataTexture is too big (" + a . width + "x" + a . height + ")." ) } return a } function m ( a ) { return R . isPowerOfTwo ( a . width ) && R . isPowerOfTwo ( a . height ) } function r ( a , b ) { return a . generateMipmaps && b && 1003 !== a . minFilter && 1006 !== a . minFilter } function p ( b , c , e , f ) { a . generateMipmap ( b ) ;
d . get ( c ) . _ _maxMipLevel = Math . log ( Math . max ( e , f ) ) * Math . LOG2E } function k ( a , c ) { if ( ! 1 === y ) return a ; var d = a ; 6403 === a && ( 5126 === c && ( d = 33326 ) , 5131 === c && ( d = 33325 ) , 5121 === c && ( d = 33321 ) ) ; 6407 === a && ( 5126 === c && ( d = 34837 ) , 5131 === c && ( d = 34843 ) , 5121 === c && ( d = 32849 ) ) ; 6408 === a && ( 5126 === c && ( d = 34836 ) , 5131 === c && ( d = 34842 ) , 5121 === c && ( d = 32856 ) ) ; 33325 === d || 33326 === d || 34842 === d || 34836 === d ? b . get ( "EXT_color_buffer_float" ) : ( 34843 === d || 34837 === d ) && console . warn ( "THREE.WebGLRenderer: Floating point textures with RGB format not supported. Please use RGBA instead." ) ;
return d } function u ( a ) { return 1003 === a || 1004 === a || 1005 === a ? 9728 : 9729 } function q ( b ) { b = b . target ; b . removeEventListener ( "dispose" , q ) ; var c = d . get ( b ) ; void 0 !== c . _ _webglInit && ( a . deleteTexture ( c . _ _webglTexture ) , d . remove ( b ) ) ; b . isVideoTexture && K . delete ( b ) ; g . memory . textures -- } function v ( b ) { b = b . target ; b . removeEventListener ( "dispose" , v ) ; var c = d . get ( b ) , e = d . get ( b . texture ) ; if ( b ) { void 0 !== e . _ _webglTexture && a . deleteTexture ( e . _ _webglTexture ) ; b . depthTexture && b . depthTexture . dispose ( ) ; if ( b . isWebGLRenderTargetCube ) for ( e =
2019-10-25 18:42:56 +08:00
0 ; 6 > e ; e ++ ) a . deleteFramebuffer ( c . _ _webglFramebuffer [ e ] ) , c . _ _webglDepthbuffer && a . deleteRenderbuffer ( c . _ _webglDepthbuffer [ e ] ) ; else a . deleteFramebuffer ( c . _ _webglFramebuffer ) , c . _ _webglDepthbuffer && a . deleteRenderbuffer ( c . _ _webglDepthbuffer ) ; if ( b . isWebGLMultiviewRenderTarget ) { a . deleteTexture ( c . _ _webglColorTexture ) ; a . deleteTexture ( c . _ _webglDepthStencilTexture ) ; g . memory . textures -= 2 ; e = 0 ; for ( var f = c . _ _webglViewFramebuffers . length ; e < f ; e ++ ) a . deleteFramebuffer ( c . _ _webglViewFramebuffers [ e ] ) } d . remove ( b . texture ) ;
2019-12-11 10:47:24 +08:00
d . remove ( b ) } g . memory . textures -- } function n ( a , b ) { var e = d . get ( a ) ; if ( a . isVideoTexture ) { var f = g . render . frame ; K . get ( a ) !== f && ( K . set ( a , f ) , a . update ( ) ) } if ( 0 < a . version && e . _ _version !== a . version ) if ( f = a . image , void 0 === f ) console . warn ( "THREE.WebGLRenderer: Texture marked for update but image is undefined" ) ; else if ( ! 1 === f . complete ) console . warn ( "THREE.WebGLRenderer: Texture marked for update but image is incomplete" ) ; else { z ( e , a , b ) ; return } c . activeTexture ( 33984 + b ) ; c . bindTexture ( 3553 , e . _ _webglTexture ) } function w ( b , e ) { if ( 6 ===
b . image . length ) { var g = d . get ( b ) ; if ( 0 < b . version && g . _ _version !== b . version ) { G ( g , b ) ; c . activeTexture ( 33984 + e ) ; c . bindTexture ( 34067 , g . _ _webglTexture ) ; a . pixelStorei ( 37440 , b . flipY ) ; var h = b && b . isCompressedTexture ; e = b . image [ 0 ] && b . image [ 0 ] . isDataTexture ; for ( var q = [ ] , t = 0 ; 6 > t ; t ++ ) q [ t ] = h || e ? e ? b . image [ t ] . image : b . image [ t ] : l ( b . image [ t ] , ! 1 , ! 0 , Id ) ; var u = q [ 0 ] , v = m ( u ) || y , n = f . convert ( b . format ) , w = f . convert ( b . type ) , A = k ( n , w ) ; I ( 34067 , b , v ) ; if ( h ) { for ( t = 0 ; 6 > t ; t ++ ) { var z = q [ t ] . mipmaps ; for ( h = 0 ; h < z . length ; h ++ ) { var x = z [ h ] ; 1023 !== b . format &&
1022 !== b . format ? null !== n ? c . compressedTexImage2D ( 34069 + t , h , A , x . width , x . height , 0 , x . data ) : console . warn ( "THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()" ) : c . texImage2D ( 34069 + t , h , A , x . width , x . height , 0 , n , w , x . data ) } } g . _ _maxMipLevel = z . length - 1 } else { z = b . mipmaps ; for ( t = 0 ; 6 > t ; t ++ ) if ( e ) for ( c . texImage2D ( 34069 + t , 0 , A , q [ t ] . width , q [ t ] . height , 0 , n , w , q [ t ] . data ) , h = 0 ; h < z . length ; h ++ ) x = z [ h ] , x = x . image [ t ] . image , c . texImage2D ( 34069 + t , h + 1 , A , x . width , x . height , 0 , n , w , x . data ) ; else for ( c . texImage2D ( 34069 +
t , 0 , A , n , w , q [ t ] ) , h = 0 ; h < z . length ; h ++ ) x = z [ h ] , c . texImage2D ( 34069 + t , h + 1 , A , n , w , x . image [ t ] ) ; g . _ _maxMipLevel = z . length } r ( b , v ) && p ( 34067 , b , u . width , u . height ) ; g . _ _version = b . version ; if ( b . onUpdate ) b . onUpdate ( b ) } else c . activeTexture ( 33984 + e ) , c . bindTexture ( 34067 , g . _ _webglTexture ) } } function x ( a , b ) { c . activeTexture ( 33984 + b ) ; c . bindTexture ( 34067 , d . get ( a ) . _ _webglTexture ) } function I ( c , f , g ) { g ? ( a . texParameteri ( c , 10242 , O [ f . wrapS ] ) , a . texParameteri ( c , 10243 , O [ f . wrapT ] ) , 32879 !== c && 35866 !== c || a . texParameteri ( c , 32882 , O [ f . wrapR ] ) ,
a . texParameteri ( c , 10240 , ea [ f . magFilter ] ) , a . texParameteri ( c , 10241 , ea [ f . minFilter ] ) ) : ( a . texParameteri ( c , 10242 , 33071 ) , a . texParameteri ( c , 10243 , 33071 ) , 32879 !== c && 35866 !== c || a . texParameteri ( c , 32882 , 33071 ) , 1001 === f . wrapS && 1001 === f . wrapT || console . warn ( "THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping." ) , a . texParameteri ( c , 10240 , u ( f . magFilter ) ) , a . texParameteri ( c , 10241 , u ( f . minFilter ) ) , 1003 !== f . minFilter && 1006 !== f . minFilter && console . warn ( "THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter." ) ) ;
! ( g = b . get ( "EXT_texture_filter_anisotropic" ) ) || 1015 === f . type && null === b . get ( "OES_texture_float_linear" ) || 1016 === f . type && null === ( y || b . get ( "OES_texture_half_float_linear" ) ) || ! ( 1 < f . anisotropy || d . get ( f ) . _ _currentAnisotropy ) || ( a . texParameterf ( c , g . TEXTURE _MAX _ANISOTROPY _EXT , Math . min ( f . anisotropy , e . getMaxAnisotropy ( ) ) ) , d . get ( f ) . _ _currentAnisotropy = f . anisotropy ) } function G ( b , c ) { void 0 === b . _ _webglInit && ( b . _ _webglInit = ! 0 , c . addEventListener ( "dispose" , q ) , b . _ _webglTexture = a . createTexture ( ) , g . memory . textures ++ ) }
function z ( b , d , e ) { var g = 3553 ; d . isDataTexture2DArray && ( g = 35866 ) ; d . isDataTexture3D && ( g = 32879 ) ; G ( b , d ) ; c . activeTexture ( 33984 + e ) ; c . bindTexture ( g , b . _ _webglTexture ) ; a . pixelStorei ( 37440 , d . flipY ) ; a . pixelStorei ( 37441 , d . premultiplyAlpha ) ; a . pixelStorei ( 3317 , d . unpackAlignment ) ; e = y ? ! 1 : 1001 !== d . wrapS || 1001 !== d . wrapT || 1003 !== d . minFilter && 1006 !== d . minFilter ; e = e && ! 1 === m ( d . image ) ; e = l ( d . image , e , ! 1 , E ) ; var h = m ( e ) || y , t = f . convert ( d . format ) , q = f . convert ( d . type ) , u = k ( t , q ) ; I ( g , d , h ) ; var v = d . mipmaps ; if ( d . isDepthTexture ) { u = 6402 ;
if ( 1015 === d . type ) { if ( ! 1 === y ) throw Error ( "Float Depth Texture only supported in WebGL2.0" ) ; u = 36012 } else y && ( u = 33189 ) ; 1026 === d . format && 6402 === u && 1012 !== d . type && 1014 !== d . type && ( console . warn ( "THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture." ) , d . type = 1012 , q = f . convert ( d . type ) ) ; 1027 === d . format && ( u = 34041 , 1020 !== d . type && ( console . warn ( "THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture." ) , d . type = 1020 , q = f . convert ( d . type ) ) ) ; c . texImage2D ( 3553 ,
0 , u , e . width , e . height , 0 , t , q , null ) } else if ( d . isDataTexture ) if ( 0 < v . length && h ) { for ( var n = 0 , w = v . length ; n < w ; n ++ ) g = v [ n ] , c . texImage2D ( 3553 , n , u , g . width , g . height , 0 , t , q , g . data ) ; d . generateMipmaps = ! 1 ; b . _ _maxMipLevel = v . length - 1 } else c . texImage2D ( 3553 , 0 , u , e . width , e . height , 0 , t , q , e . data ) , b . _ _maxMipLevel = 0 ; else if ( d . isCompressedTexture ) { n = 0 ; for ( w = v . length ; n < w ; n ++ ) g = v [ n ] , 1023 !== d . format && 1022 !== d . format ? null !== t ? c . compressedTexImage2D ( 3553 , n , u , g . width , g . height , 0 , g . data ) : console . warn ( "THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()" ) :
c . texImage2D ( 3553 , n , u , g . width , g . height , 0 , t , q , g . data ) ; b . _ _maxMipLevel = v . length - 1 } else if ( d . isDataTexture2DArray ) c . texImage3D ( 35866 , 0 , u , e . width , e . height , e . depth , 0 , t , q , e . data ) , b . _ _maxMipLevel = 0 ; else if ( d . isDataTexture3D ) c . texImage3D ( 32879 , 0 , u , e . width , e . height , e . depth , 0 , t , q , e . data ) , b . _ _maxMipLevel = 0 ; else if ( 0 < v . length && h ) { n = 0 ; for ( w = v . length ; n < w ; n ++ ) g = v [ n ] , c . texImage2D ( 3553 , n , u , t , q , g ) ; d . generateMipmaps = ! 1 ; b . _ _maxMipLevel = v . length - 1 } else c . texImage2D ( 3553 , 0 , u , t , q , e ) , b . _ _maxMipLevel = 0 ; r ( d , h ) && p ( 3553 , d , e . width ,
e . height ) ; b . _ _version = d . version ; if ( d . onUpdate ) d . onUpdate ( d ) } function B ( b , e , g , h ) { var l = f . convert ( e . texture . format ) , m = f . convert ( e . texture . type ) , r = k ( l , m ) ; c . texImage2D ( h , 0 , r , e . width , e . height , 0 , l , m , null ) ; a . bindFramebuffer ( 36160 , b ) ; a . framebufferTexture2D ( 36160 , g , h , d . get ( e . texture ) . _ _webglTexture , 0 ) ; a . bindFramebuffer ( 36160 , null ) } function ka ( b , c , d ) { a . bindRenderbuffer ( 36161 , b ) ; if ( c . depthBuffer && ! c . stencilBuffer ) d ? ( d = D ( c ) , a . renderbufferStorageMultisample ( 36161 , d , 33189 , c . width , c . height ) ) : a . renderbufferStorage ( 36161 ,
33189 , c . width , c . height ) , a . framebufferRenderbuffer ( 36160 , 36096 , 36161 , b ) ; else if ( c . depthBuffer && c . stencilBuffer ) d ? ( d = D ( c ) , a . renderbufferStorageMultisample ( 36161 , d , 35056 , c . width , c . height ) ) : a . renderbufferStorage ( 36161 , 34041 , c . width , c . height ) , a . framebufferRenderbuffer ( 36160 , 33306 , 36161 , b ) ; else { b = f . convert ( c . texture . format ) ; var e = f . convert ( c . texture . type ) ; b = k ( b , e ) ; d ? ( d = D ( c ) , a . renderbufferStorageMultisample ( 36161 , d , b , c . width , c . height ) ) : a . renderbufferStorage ( 36161 , b , c . width , c . height ) } a . bindRenderbuffer ( 36161 ,
null ) } function D ( a ) { return y && a . isWebGLMultisampleRenderTarget ? Math . min ( H , a . samples ) : 0 } var y = e . isWebGL2 , L = e . maxTextures , Id = e . maxCubemapSize , E = e . maxTextureSize , H = e . maxSamples , K = new WeakMap , F , C = "undefined" !== typeof OffscreenCanvas && null !== ( new OffscreenCanvas ( 1 , 1 ) ) . getContext ( "2d" ) , N = 0 , O = { 1E3 : 10497 , 1001 : 33071 , 1002 : 33648 } , ea = { 1003 : 9728 , 1004 : 9984 , 1005 : 9986 , 1006 : 9729 , 1007 : 9985 , 1008 : 9987 } , S = ! 1 , Q = ! 1 ; this . allocateTextureUnit = function ( ) { var a = N ; a >= L && console . warn ( "THREE.WebGLTextures: Trying to use " + a + " texture units while this GPU supports only " +
L ) ; N += 1 ; return a } ; this . resetTextureUnits = function ( ) { N = 0 } ; this . setTexture2D = n ; this . setTexture2DArray = function ( a , b ) { var e = d . get ( a ) ; 0 < a . version && e . _ _version !== a . version ? z ( e , a , b ) : ( c . activeTexture ( 33984 + b ) , c . bindTexture ( 35866 , e . _ _webglTexture ) ) } ; this . setTexture3D = function ( a , b ) { var e = d . get ( a ) ; 0 < a . version && e . _ _version !== a . version ? z ( e , a , b ) : ( c . activeTexture ( 33984 + b ) , c . bindTexture ( 32879 , e . _ _webglTexture ) ) } ; this . setTextureCube = w ; this . setTextureCubeDynamic = x ; this . setupRenderTarget = function ( e ) { var h = d . get ( e ) ,
l = d . get ( e . texture ) ; e . addEventListener ( "dispose" , v ) ; l . _ _webglTexture = a . createTexture ( ) ; g . memory . textures ++ ; var t = ! 0 === e . isWebGLRenderTargetCube , q = ! 0 === e . isWebGLMultisampleRenderTarget , u = ! 0 === e . isWebGLMultiviewRenderTarget , w = m ( e ) || y ; if ( t ) { h . _ _webglFramebuffer = [ ] ; for ( var A = 0 ; 6 > A ; A ++ ) h . _ _webglFramebuffer [ A ] = a . createFramebuffer ( ) } else if ( h . _ _webglFramebuffer = a . createFramebuffer ( ) , q ) if ( y ) { h . _ _webglMultisampledFramebuffer = a . createFramebuffer ( ) ; h . _ _webglColorRenderbuffer = a . createRenderbuffer ( ) ; a . bindRenderbuffer ( 36161 ,
h . _ _webglColorRenderbuffer ) ; q = f . convert ( e . texture . format ) ; var z = f . convert ( e . texture . type ) ; q = k ( q , z ) ; z = D ( e ) ; a . renderbufferStorageMultisample ( 36161 , z , q , e . width , e . height ) ; a . bindFramebuffer ( 36160 , h . _ _webglMultisampledFramebuffer ) ; a . framebufferRenderbuffer ( 36160 , 36064 , 36161 , h . _ _webglColorRenderbuffer ) ; a . bindRenderbuffer ( 36161 , null ) ; e . depthBuffer && ( h . _ _webglDepthRenderbuffer = a . createRenderbuffer ( ) , ka ( h . _ _webglDepthRenderbuffer , e , ! 0 ) ) ; a . bindFramebuffer ( 36160 , null ) } else console . warn ( "THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2." ) ;
else if ( u ) { A = e . width ; var x = e . height ; q = e . numViews ; a . bindFramebuffer ( 36160 , h . _ _webglFramebuffer ) ; var G = b . get ( "OVR_multiview2" ) ; g . memory . textures += 2 ; z = a . createTexture ( ) ; a . bindTexture ( 35866 , z ) ; a . texParameteri ( 35866 , 10240 , 9728 ) ; a . texParameteri ( 35866 , 10241 , 9728 ) ; a . texImage3D ( 35866 , 0 , 32856 , A , x , q , 0 , 6408 , 5121 , null ) ; G . framebufferTextureMultiviewOVR ( 36160 , 36064 , z , 0 , 0 , q ) ; var L = a . createTexture ( ) ; a . bindTexture ( 35866 , L ) ; a . texParameteri ( 35866 , 10240 , 9728 ) ; a . texParameteri ( 35866 , 10241 , 9728 ) ; a . texImage3D ( 35866 , 0 , 35056 ,
A , x , q , 0 , 34041 , 34042 , null ) ; G . framebufferTextureMultiviewOVR ( 36160 , 33306 , L , 0 , 0 , q ) ; x = Array ( q ) ; for ( A = 0 ; A < q ; ++ A ) x [ A ] = a . createFramebuffer ( ) , a . bindFramebuffer ( 36160 , x [ A ] ) , a . framebufferTextureLayer ( 36160 , 36064 , z , 0 , A ) ; h . _ _webglColorTexture = z ; h . _ _webglDepthStencilTexture = L ; h . _ _webglViewFramebuffers = x ; a . bindFramebuffer ( 36160 , null ) ; a . bindTexture ( 35866 , null ) } if ( t ) { c . bindTexture ( 34067 , l . _ _webglTexture ) ; I ( 34067 , e . texture , w ) ; for ( A = 0 ; 6 > A ; A ++ ) B ( h . _ _webglFramebuffer [ A ] , e , 36064 , 34069 + A ) ; r ( e . texture , w ) && p ( 34067 , e . texture ,
e . width , e . height ) ; c . bindTexture ( 34067 , null ) } else u || ( c . bindTexture ( 3553 , l . _ _webglTexture ) , I ( 3553 , e . texture , w ) , B ( h . _ _webglFramebuffer , e , 36064 , 3553 ) , r ( e . texture , w ) && p ( 3553 , e . texture , e . width , e . height ) , c . bindTexture ( 3553 , null ) ) ; if ( e . depthBuffer ) { h = d . get ( e ) ; l = ! 0 === e . isWebGLRenderTargetCube ; if ( e . depthTexture ) { if ( l ) throw Error ( "target.depthTexture not supported in Cube render targets" ) ; if ( e && e . isWebGLRenderTargetCube ) throw Error ( "Depth Texture with cube render targets is not supported" ) ; a . bindFramebuffer ( 36160 ,
h . _ _webglFramebuffer ) ; if ( ! e . depthTexture || ! e . depthTexture . isDepthTexture ) throw Error ( "renderTarget.depthTexture must be an instance of THREE.DepthTexture" ) ; d . get ( e . depthTexture ) . _ _webglTexture && e . depthTexture . image . width === e . width && e . depthTexture . image . height === e . height || ( e . depthTexture . image . width = e . width , e . depthTexture . image . height = e . height , e . depthTexture . needsUpdate = ! 0 ) ; n ( e . depthTexture , 0 ) ; h = d . get ( e . depthTexture ) . _ _webglTexture ; if ( 1026 === e . depthTexture . format ) a . framebufferTexture2D ( 36160 , 36096 ,
3553 , h , 0 ) ; else if ( 1027 === e . depthTexture . format ) a . framebufferTexture2D ( 36160 , 33306 , 3553 , h , 0 ) ; else throw Error ( "Unknown depthTexture format" ) ; } else if ( l ) for ( h . _ _webglDepthbuffer = [ ] , l = 0 ; 6 > l ; l ++ ) a . bindFramebuffer ( 36160 , h . _ _webglFramebuffer [ l ] ) , h . _ _webglDepthbuffer [ l ] = a . createRenderbuffer ( ) , ka ( h . _ _webglDepthbuffer [ l ] , e ) ; else a . bindFramebuffer ( 36160 , h . _ _webglFramebuffer ) , h . _ _webglDepthbuffer = a . createRenderbuffer ( ) , ka ( h . _ _webglDepthbuffer , e ) ; a . bindFramebuffer ( 36160 , null ) } } ; this . updateRenderTargetMipmap =
function ( a ) { var b = a . texture , e = m ( a ) || y ; if ( r ( b , e ) ) { e = a . isWebGLRenderTargetCube ? 34067 : 3553 ; var f = d . get ( b ) . _ _webglTexture ; c . bindTexture ( e , f ) ; p ( e , b , a . width , a . height ) ; c . bindTexture ( e , null ) } } ; this . updateMultisampleRenderTarget = function ( b ) { if ( b . isWebGLMultisampleRenderTarget ) if ( y ) { var c = d . get ( b ) ; a . bindFramebuffer ( 36008 , c . _ _webglMultisampledFramebuffer ) ; a . bindFramebuffer ( 36009 , c . _ _webglFramebuffer ) ; c = b . width ; var e = b . height , f = 16384 ; b . depthBuffer && ( f |= 256 ) ; b . stencilBuffer && ( f |= 1024 ) ; a . blitFramebuffer ( 0 , 0 , c ,
e , 0 , 0 , c , e , f , 9728 ) } else console . warn ( "THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2." ) } ; this . safeSetTexture2D = function ( a , b ) { a && a . isWebGLRenderTarget && ( ! 1 === S && ( console . warn ( "THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead." ) , S = ! 0 ) , a = a . texture ) ; n ( a , b ) } ; this . safeSetTextureCube = function ( a , b ) { a && a . isWebGLRenderTargetCube && ( ! 1 === Q && ( console . warn ( "THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead." ) ,
Q = ! 0 ) , a = a . texture ) ; a && a . isCubeTexture || Array . isArray ( a . image ) && 6 === a . image . length ? w ( a , b ) : x ( a , b ) } } function Oh ( a , b , c ) { var d = c . isWebGL2 ; return { convert : function ( a ) { if ( 1009 === a ) return 5121 ; if ( 1017 === a ) return 32819 ; if ( 1018 === a ) return 32820 ; if ( 1019 === a ) return 33635 ; if ( 1010 === a ) return 5120 ; if ( 1011 === a ) return 5122 ; if ( 1012 === a ) return 5123 ; if ( 1013 === a ) return 5124 ; if ( 1014 === a ) return 5125 ; if ( 1015 === a ) return 5126 ; if ( 1016 === a ) { if ( d ) return 5131 ; var c = b . get ( "OES_texture_half_float" ) ; return null !== c ? c . HALF _FLOAT _OES :
null } if ( 1021 === a ) return 6406 ; if ( 1022 === a ) return 6407 ; if ( 1023 === a ) return 6408 ; if ( 1024 === a ) return 6409 ; if ( 1025 === a ) return 6410 ; if ( 1026 === a ) return 6402 ; if ( 1027 === a ) return 34041 ; if ( 1028 === a ) return 6403 ; if ( 33776 === a || 33777 === a || 33778 === a || 33779 === a ) if ( c = b . get ( "WEBGL_compressed_texture_s3tc" ) , null !== c ) { if ( 33776 === a ) return c . COMPRESSED _RGB _S3TC _DXT1 _EXT ; if ( 33777 === a ) return c . COMPRESSED _RGBA _S3TC _DXT1 _EXT ; if ( 33778 === a ) return c . COMPRESSED _RGBA _S3TC _DXT3 _EXT ; if ( 33779 === a ) return c . COMPRESSED _RGBA _S3TC _DXT5 _EXT } else return null ;
if ( 35840 === a || 35841 === a || 35842 === a || 35843 === a ) if ( c = b . get ( "WEBGL_compressed_texture_pvrtc" ) , null !== c ) { if ( 35840 === a ) return c . COMPRESSED _RGB _PVRTC _4BPPV1 _IMG ; if ( 35841 === a ) return c . COMPRESSED _RGB _PVRTC _2BPPV1 _IMG ; if ( 35842 === a ) return c . COMPRESSED _RGBA _PVRTC _4BPPV1 _IMG ; if ( 35843 === a ) return c . COMPRESSED _RGBA _PVRTC _2BPPV1 _IMG } else return null ; if ( 36196 === a ) return c = b . get ( "WEBGL_compressed_texture_etc1" ) , null !== c ? c . COMPRESSED _RGB _ETC1 _WEBGL : null ; if ( 37808 === a || 37809 === a || 37810 === a || 37811 === a || 37812 === a || 37813 ===
a || 37814 === a || 37815 === a || 37816 === a || 37817 === a || 37818 === a || 37819 === a || 37820 === a || 37821 === a ) return c = b . get ( "WEBGL_compressed_texture_astc" ) , null !== c ? a : null ; if ( 1020 === a ) { if ( d ) return 34042 ; c = b . get ( "WEBGL_depth_texture" ) ; return null !== c ? c . UNSIGNED _INT _24 _8 _WEBGL : null } } } } function ng ( a , b , c , d ) { la . call ( this , a , b , d ) ; this . stencilBuffer = this . depthBuffer = ! 1 ; this . numViews = c } function rk ( a , b ) { function c ( a ) { if ( a . isArrayCamera ) return a . cameras ; r [ 0 ] = a ; return r } function d ( a ) { if ( void 0 === a . isArrayCamera ) return ! 0 ; a = a . cameras ;
if ( a . length > u ) return ! 1 ; for ( var b = 1 , c = a . length ; b < c ; b ++ ) if ( a [ 0 ] . viewport . z !== a [ b ] . viewport . z || a [ 0 ] . viewport . w !== a [ b ] . viewport . w ) return ! 1 ; return ! 0 } var e = a . extensions , f = a . properties , g , h , l , m , r , p , k , u = 0 ; this . isAvailable = function ( ) { if ( void 0 === k ) { var a = e . get ( "OVR_multiview2" ) ; if ( k = null !== a && ! 1 === b . getContextAttributes ( ) . antialias ) for ( u = b . getParameter ( a . MAX _VIEWS _OVR ) , g = new ng ( 0 , 0 , 2 ) , p = new B , m = [ ] , l = [ ] , r = [ ] , a = 0 ; a < u ; a ++ ) m [ a ] = new S , l [ a ] = new ca } return k } ; this . attachCamera = function ( b ) { if ( ! 1 !== d ( b ) ) { ( h = a . getRenderTarget ( ) ) ?
p . set ( h . width , h . height ) : a . getDrawingBufferSize ( p ) ; if ( b . isArrayCamera ) { var c = b . cameras [ 0 ] . viewport ; g . setSize ( c . z , c . w ) ; g . setNumViews ( b . cameras . length ) } else g . setSize ( p . x , p . y ) , g . setNumViews ( 2 ) ; a . setRenderTarget ( g ) } } ; this . detachCamera = function ( c ) { if ( g === a . getRenderTarget ( ) ) { a . setRenderTarget ( h ) ; var d = g , e = d . numViews , l = f . get ( d ) . _ _webglViewFramebuffers , m = d . width ; d = d . height ; if ( c . isArrayCamera ) for ( var r = 0 ; r < e ; r ++ ) { var k = c . cameras [ r ] . viewport , t = k . x , q = k . y , u = t + k . z ; k = q + k . w ; b . bindFramebuffer ( 36008 , l [ r ] ) ; b . blitFramebuffer ( 0 ,
0 , m , d , t , q , u , k , 16384 , 9728 ) } else b . bindFramebuffer ( 36008 , l [ 0 ] ) , b . blitFramebuffer ( 0 , 0 , m , d , 0 , 0 , p . x , p . y , 16384 , 9728 ) } } ; this . updateCameraProjectionMatricesUniform = function ( a , d ) { a = c ( a ) ; for ( var e = 0 ; e < a . length ; e ++ ) m [ e ] . copy ( a [ e ] . projectionMatrix ) ; d . setValue ( b , "projectionMatrices" , m ) } ; this . updateCameraViewMatricesUniform = function ( a , d ) { a = c ( a ) ; for ( var e = 0 ; e < a . length ; e ++ ) m [ e ] . copy ( a [ e ] . matrixWorldInverse ) ; d . setValue ( b , "viewMatrices" , m ) } ; this . updateObjectMatricesUniforms = function ( a , d , e ) { d = c ( d ) ; for ( var f = 0 ; f < d . length ; f ++ ) m [ f ] . multiplyMatrices ( d [ f ] . matrixWorldInverse ,
a . matrixWorld ) , l [ f ] . getNormalMatrix ( m [ f ] ) ; e . setValue ( b , "modelViewMatrices" , m ) ; e . setValue ( b , "normalMatrices" , l ) } } function Fc ( ) { y . call ( this ) ; this . type = "Group" } function Kd ( a ) { da . call ( this ) ; this . cameras = a || [ ] } function Ph ( a , b , c ) { Qh . setFromMatrixPosition ( b . matrixWorld ) ; Rh . setFromMatrixPosition ( c . matrixWorld ) ; var d = Qh . distanceTo ( Rh ) , e = b . projectionMatrix . elements , f = c . projectionMatrix . elements , g = e [ 14 ] / ( e [ 10 ] - 1 ) ; c = e [ 14 ] / ( e [ 10 ] + 1 ) ; var h = ( e [ 9 ] + 1 ) / e [ 5 ] , l = ( e [ 9 ] - 1 ) / e [ 5 ] , m = ( e [ 8 ] - 1 ) / e [ 0 ] , r = ( f [ 8 ] + 1 ) / f [ 0 ] ; e = g * m ; f = g *
r ; r = d / ( - m + r ) ; m = r * - m ; b . matrixWorld . decompose ( a . position , a . quaternion , a . scale ) ; a . translateX ( m ) ; a . translateZ ( r ) ; a . matrixWorld . compose ( a . position , a . quaternion , a . scale ) ; a . matrixWorldInverse . getInverse ( a . matrixWorld ) ; b = g + r ; g = c + r ; a . projectionMatrix . makePerspective ( e - m , f + ( d - m ) , h * c / g * b , l * c / g * b , b , g ) } function og ( a ) { function b ( ) { return null !== h && ! 0 === h . isPresenting } function c ( ) { if ( b ( ) ) { var c = h . getEyeParameters ( "left" ) ; e = 2 * c . renderWidth * k ; f = c . renderHeight * k ; Ba = a . getPixelRatio ( ) ; a . getSize ( z ) ; a . setDrawingBufferSize ( e ,
f , 1 ) ; x . viewport . set ( 0 , 0 , e / 2 , f ) ; I . viewport . set ( e / 2 , 0 , e / 2 , f ) ; E . start ( ) ; g . dispatchEvent ( { type : "sessionstart" } ) } else g . enabled && a . setDrawingBufferSize ( z . width , z . height , Ba ) , E . stop ( ) , g . dispatchEvent ( { type : "sessionend" } ) } function d ( a , b ) { null !== b && 4 === b . length && a . set ( b [ 0 ] * e , b [ 1 ] * f , b [ 2 ] * e , b [ 3 ] * f ) } var e , f , g = this , h = null , l = null , m = [ ] , r = new S , p = new S , k = 1 , u = "local-floor" ; "undefined" !== typeof window && "VRFrameData" in window && ( l = new window . VRFrameData , window . addEventListener ( "vrdisplaypresentchange" , c , ! 1 ) ) ; var q = new S ,
v = new ua , A = new n , w = new da , x = new da ; x . viewport = new ba ; x . layers . enable ( 1 ) ; var I = new da ; I . viewport = new ba ; I . layers . enable ( 2 ) ; var G = new Kd ( [ x , I ] ) ; G . layers . enable ( 1 ) ; G . layers . enable ( 2 ) ; var z = new B , Ba , y = [ ] , D = [ ] ; this . enabled = ! 1 ; this . getController = function ( a ) { var b = m [ a ] ; void 0 === b && ( b = new Fc , b . matrixAutoUpdate = ! 1 , b . visible = ! 1 , m [ a ] = b ) ; return b } ; this . getDevice = function ( ) { return h } ; this . setDevice = function ( a ) { void 0 !== a && ( h = a ) ; E . setContext ( a ) } ; this . setFramebufferScaleFactor = function ( a ) { k = a } ; this . setReferenceSpaceType =
function ( a ) { u = a } ; this . getCamera = function ( a ) { var b = "local-floor" === u ? 1.6 : 0 ; h . depthNear = a . near ; h . depthFar = a . far ; h . getFrameData ( l ) ; if ( "local-floor" === u ) { var c = h . stageParameters ; c ? r . fromArray ( c . sittingToStandingTransform ) : r . makeTranslation ( 0 , b , 0 ) } b = l . pose ; w . matrix . copy ( r ) ; w . matrix . decompose ( w . position , w . quaternion , w . scale ) ; null !== b . orientation && ( v . fromArray ( b . orientation ) , w . quaternion . multiply ( v ) ) ; null !== b . position && ( v . setFromRotationMatrix ( r ) , A . fromArray ( b . position ) , A . applyQuaternion ( v ) , w . position . add ( A ) ) ;
w . updateMatrixWorld ( ) ; a . matrixWorld . copy ( w . matrixWorld ) ; b = a . children ; c = 0 ; for ( var e = b . length ; c < e ; c ++ ) b [ c ] . updateMatrixWorld ( ! 0 ) ; x . near = a . near ; I . near = a . near ; x . far = a . far ; I . far = a . far ; x . matrixWorldInverse . fromArray ( l . leftViewMatrix ) ; I . matrixWorldInverse . fromArray ( l . rightViewMatrix ) ; p . getInverse ( r ) ; "local-floor" === u && ( x . matrixWorldInverse . multiply ( p ) , I . matrixWorldInverse . multiply ( p ) ) ; a = a . parent ; null !== a && ( q . getInverse ( a . matrixWorld ) , x . matrixWorldInverse . multiply ( q ) , I . matrixWorldInverse . multiply ( q ) ) ; x . matrixWorld . getInverse ( x . matrixWorldInverse ) ;
I . matrixWorld . getInverse ( I . matrixWorldInverse ) ; x . projectionMatrix . fromArray ( l . leftProjectionMatrix ) ; I . projectionMatrix . fromArray ( l . rightProjectionMatrix ) ; Ph ( G , x , I ) ; a = h . getLayers ( ) ; a . length && ( a = a [ 0 ] , d ( x . viewport , a . leftBounds ) , d ( I . viewport , a . rightBounds ) ) ; a : for ( a = 0 ; a < m . length ; a ++ ) { b = m [ a ] ; b : { c = a ; e = navigator . getGamepads && navigator . getGamepads ( ) ; for ( var f = 0 , g = e . length ; f < g ; f ++ ) { var k = e [ f ] ; if ( k && ( "Daydream Controller" === k . id || "Gear VR Controller" === k . id || "Oculus Go Controller" === k . id || "OpenVR Gamepad" ===
k . id || k . id . startsWith ( "Oculus Touch" ) || k . id . startsWith ( "HTC Vive Focus" ) || k . id . startsWith ( "Spatial Controller" ) ) ) { var t = k . hand ; if ( 0 === c && ( "" === t || "right" === t ) || 1 === c && "left" === t ) { c = k ; break b } } } c = void 0 } if ( void 0 !== c && void 0 !== c . pose ) { if ( null === c . pose ) break a ; e = c . pose ; ! 1 === e . hasPosition && b . position . set ( . 2 , - . 6 , - . 05 ) ; null !== e . position && b . position . fromArray ( e . position ) ; null !== e . orientation && b . quaternion . fromArray ( e . orientation ) ; b . matrix . compose ( b . position , b . quaternion , b . scale ) ; b . matrix . premultiply ( r ) ;
b . matrix . decompose ( b . position , b . quaternion , b . scale ) ; b . matrixWorldNeedsUpdate = ! 0 ; b . visible = ! 0 ; e = "Daydream Controller" === c . id ? 0 : 1 ; void 0 === y [ a ] && ( y [ a ] = ! 1 ) ; y [ a ] !== c . buttons [ e ] . pressed && ( y [ a ] = c . buttons [ e ] . pressed , ! 0 === y [ a ] ? b . dispatchEvent ( { type : "selectstart" } ) : ( b . dispatchEvent ( { type : "selectend" } ) , b . dispatchEvent ( { type : "select" } ) ) ) ; e = 2 ; void 0 === D [ a ] && ( D [ a ] = ! 1 ) ; void 0 !== c . buttons [ e ] && D [ a ] !== c . buttons [ e ] . pressed && ( D [ a ] = c . buttons [ e ] . pressed , ! 0 === D [ a ] ? b . dispatchEvent ( { type : "squeezestart" } ) : ( b . dispatchEvent ( { type : "squeezeend" } ) ,
b . dispatchEvent ( { type : "squeeze" } ) ) ) } else b . visible = ! 1 } return G } ; this . getStandingMatrix = function ( ) { return r } ; this . isPresenting = b ; var E = new hg ; this . setAnimationLoop = function ( a ) { E . setAnimationLoop ( a ) ; b ( ) && E . start ( ) } ; this . submitFrame = function ( ) { b ( ) && h . submitFrame ( ) } ; this . dispose = function ( ) { "undefined" !== typeof window && window . removeEventListener ( "vrdisplaypresentchange" , c ) } ; this . setFrameOfReferenceType = function ( ) { console . warn ( "THREE.WebVRManager: setFrameOfReferenceType() has been deprecated." ) } } function Sh ( a ,
b ) { function c ( a ) { for ( var b = 0 ; b < k . length ; b ++ ) u [ b ] === a . inputSource && k [ b ] . dispatchEvent ( { type : a . type } ) } function d ( ) { a . setFramebuffer ( null ) ; a . setRenderTarget ( a . getRenderTarget ( ) ) ; x . stop ( ) ; h . dispatchEvent ( { type : "sessionend" } ) } function e ( a ) { m = a ; x . setContext ( l ) ; x . start ( ) ; h . dispatchEvent ( { type : "sessionstart" } ) } function f ( ) { for ( var a = 0 ; a < k . length ; a ++ ) { var b = a ; a : { var c = l . inputSources ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , f = e . handedness ; if ( 0 === a && ( "none" === f || "right" === f ) ) { c = e ; break a } if ( 1 === a && "left" === f ) { c =
e ; break a } } c = void 0 } u [ b ] = c } } function g ( a , b ) { null === b ? a . matrixWorld . copy ( a . matrix ) : a . matrixWorld . multiplyMatrices ( b . matrixWorld , a . matrix ) ; a . matrixWorldInverse . getInverse ( a . matrixWorld ) } var h = this , l = null , m = null , r = "local-floor" , p = null , k = [ ] , u = [ ] , q = new da ; q . layers . enable ( 1 ) ; q . viewport = new ba ; var v = new da ; v . layers . enable ( 2 ) ; v . viewport = new ba ; var n = new Kd ( [ q , v ] ) ; n . layers . enable ( 1 ) ; n . layers . enable ( 2 ) ; this . enabled = ! 1 ; this . getController = function ( a ) { var b = k [ a ] ; void 0 === b && ( b = new Fc , b . matrixAutoUpdate = ! 1 , b . visible =
! 1 , k [ a ] = b ) ; return b } ; this . setFramebufferScaleFactor = function ( ) { } ; this . setReferenceSpaceType = function ( a ) { r = a } ; this . getSession = function ( ) { return l } ; this . setSession = function ( a ) { l = a ; null !== l && ( l . addEventListener ( "select" , c ) , l . addEventListener ( "selectstart" , c ) , l . addEventListener ( "selectend" , c ) , l . addEventListener ( "squeeze" , c ) , l . addEventListener ( "squeezestart" , c ) , l . addEventListener ( "squeezeend" , c ) , l . addEventListener ( "end" , d ) , l . updateRenderState ( { baseLayer : new XRWebGLLayer ( l , b ) } ) , l . requestReferenceSpace ( r ) . then ( e ) ,
l . addEventListener ( "inputsourceschange" , f ) , f ( ) ) } ; this . getCamera = function ( a ) { var b = a . parent , c = n . cameras ; g ( n , b ) ; for ( var d = 0 ; d < c . length ; d ++ ) g ( c [ d ] , b ) ; a . matrixWorld . copy ( n . matrixWorld ) ; a = a . children ; d = 0 ; for ( b = a . length ; d < b ; d ++ ) a [ d ] . updateMatrixWorld ( ! 0 ) ; Ph ( n , q , v ) ; return n } ; this . isPresenting = function ( ) { return null !== l && null !== m } ; var w = null , x = new hg ; x . setAnimationLoop ( function ( b , c ) { p = c . getViewerPose ( m ) ; if ( null !== p ) { var d = p . views , e = l . renderState . baseLayer ; a . setFramebuffer ( e . framebuffer ) ; for ( var f = 0 ; f < d . length ; f ++ ) { var g =
d [ f ] , h = e . getViewport ( g ) , r = n . cameras [ f ] ; r . matrix . fromArray ( g . transform . inverse . matrix ) . getInverse ( r . matrix ) ; r . projectionMatrix . fromArray ( g . projectionMatrix ) ; r . viewport . set ( h . x , h . y , h . width , h . height ) ; 0 === f && n . matrix . copy ( r . matrix ) } } for ( f = 0 ; f < k . length ; f ++ ) { d = k [ f ] ; if ( e = u [ f ] ) if ( e = c . getPose ( e . targetRaySpace , m ) , null !== e ) { d . matrix . fromArray ( e . transform . matrix ) ; d . matrix . decompose ( d . position , d . rotation , d . scale ) ; d . visible = ! 0 ; continue } d . visible = ! 1 } w && w ( b ) } ) ; this . setAnimationLoop = function ( a ) { w = a } ; this . dispose =
function ( ) { } ; this . getStandingMatrix = function ( ) { console . warn ( "THREE.WebXRManager: getStandingMatrix() is no longer needed." ) ; return new S } ; this . getDevice = function ( ) { console . warn ( "THREE.WebXRManager: getDevice() has been deprecated." ) } ; this . setDevice = function ( ) { console . warn ( "THREE.WebXRManager: setDevice() has been deprecated." ) } ; this . setFrameOfReferenceType = function ( ) { console . warn ( "THREE.WebXRManager: setFrameOfReferenceType() has been deprecated." ) } ; this . submitFrame = function ( ) { } } function pg ( a ) { var b ;
function c ( ) { qa = new hj ( J ) ; Ea = new fj ( J , qa , a ) ; ! 1 === Ea . isWebGL2 && ( qa . get ( "WEBGL_depth_texture" ) , qa . get ( "OES_texture_float" ) , qa . get ( "OES_texture_half_float" ) , qa . get ( "OES_texture_half_float_linear" ) , qa . get ( "OES_standard_derivatives" ) , qa . get ( "OES_element_index_uint" ) , qa . get ( "ANGLE_instanced_arrays" ) ) ; qa . get ( "OES_texture_float_linear" ) ; la = new Oh ( J , qa , Ea ) ; aa = new pk ( J , qa , Ea ) ; aa . scissor ( ob . copy ( U ) . multiplyScalar ( ha ) . floor ( ) ) ; aa . viewport ( T . copy ( da ) . multiplyScalar ( ha ) . floor ( ) ) ; fa = new kj ( J ) ; Z = new gk ; ca = new qk ( J ,
qa , aa , Z , Ea , la , fa ) ; ma = new cj ( J ) ; wa = new ij ( J , ma , fa ) ; ra = new nj ( J , wa , ma , fa ) ; xa = new mj ( J ) ; oa = new fk ( C , qa , Ea ) ; va = new jk ; ua = new ok ; na = new dj ( C , aa , ra , y ) ; za = new ej ( J , qa , fa , Ea ) ; Aa = new jj ( J , qa , fa , Ea ) ; fa . programs = oa . programs ; C . capabilities = Ea ; C . extensions = qa ; C . properties = Z ; C . renderLists = va ; C . state = aa ; C . info = fa } function d ( a ) { a . preventDefault ( ) ; console . log ( "THREE.WebGLRenderer: Context Lost." ) ; N = ! 0 } function e ( ) { console . log ( "THREE.WebGLRenderer: Context Restored." ) ; N = ! 1 ; c ( ) } function f ( a ) { a = a . target ; a . removeEventListener ( "dispose" ,
f ) ; g ( a ) ; Z . remove ( a ) } function g ( a ) { var b = Z . get ( a ) . program ; a . program = void 0 ; void 0 !== b && oa . releaseProgram ( b ) } function h ( a , b ) { a . render ( function ( a ) { C . renderBufferImmediate ( a , b ) } ) } function l ( a , b , c , d ) { if ( ! 1 !== a . visible ) { if ( a . layers . test ( b . layers ) ) if ( a . isGroup ) c = a . renderOrder ; else if ( a . isLOD ) ! 0 === a . autoUpdate && a . update ( b ) ; else if ( a . isLight ) F . pushLight ( a ) , a . castShadow && F . pushShadow ( a ) ; else if ( a . isSprite ) { if ( ! a . frustumCulled || mg . intersectsSprite ( a ) ) { d && Fb . setFromMatrixPosition ( a . matrixWorld ) . applyMatrix4 ( Jd ) ;
var e = ra . update ( a ) , f = a . material ; f . visible && L . push ( a , e , f , c , Fb . z , null ) } } else if ( a . isImmediateRenderObject ) d && Fb . setFromMatrixPosition ( a . matrixWorld ) . applyMatrix4 ( Jd ) , L . push ( a , null , a . material , c , Fb . z , null ) ; else if ( a . isMesh || a . isLine || a . isPoints ) if ( a . isSkinnedMesh && a . skeleton . frame !== fa . render . frame && ( a . skeleton . update ( ) , a . skeleton . frame = fa . render . frame ) , ! a . frustumCulled || mg . intersectsObject ( a ) ) if ( d && Fb . setFromMatrixPosition ( a . matrixWorld ) . applyMatrix4 ( Jd ) , e = ra . update ( a ) , f = a . material , Array . isArray ( f ) ) for ( var g =
e . groups , h = 0 , m = g . length ; h < m ; h ++ ) { var r = g [ h ] , k = f [ r . materialIndex ] ; k && k . visible && L . push ( a , e , k , c , Fb . z , r ) } else f . visible && L . push ( a , e , f , c , Fb . z , null ) ; a = a . children ; h = 0 ; for ( m = a . length ; h < m ; h ++ ) l ( a [ h ] , b , c , d ) } } function m ( a , b , c , d ) { for ( var e = 0 , f = a . length ; e < f ; e ++ ) { var g = a [ e ] , h = g . object , l = g . geometry , m = void 0 === d ? g . material : d ; g = g . group ; if ( c . isArrayCamera ) if ( $b = c , ia . enabled && ta . isAvailable ( ) ) r ( h , b , c , l , m , g ) ; else for ( var k = c . cameras , p = 0 , t = k . length ; p < t ; p ++ ) { var q = k [ p ] ; h . layers . test ( q . layers ) && ( aa . viewport ( T . copy ( q . viewport ) ) ,
F . setupLights ( q ) , r ( h , b , q , l , m , g ) ) } else $b = null , r ( h , b , c , l , m , g ) } } function r ( a , c , d , e , f , g ) { a . onBeforeRender ( C , c , d , e , f , g ) ; F = ua . get ( c , $b || d ) ; a . modelViewMatrix . multiplyMatrices ( d . matrixWorldInverse , a . matrixWorld ) ; a . normalMatrix . getNormalMatrix ( a . modelViewMatrix ) ; if ( a . isImmediateRenderObject ) { aa . setMaterial ( f ) ; var l = k ( d , c . fog , f , a ) ; Qe = b = null ; Y = ! 1 ; h ( a , l ) } else C . renderBufferDirect ( d , c . fog , e , f , a , g ) ; a . onAfterRender ( C , c , d , e , f , g ) ; F = ua . get ( c , $b || d ) } function p ( a , b , c ) { var d = Z . get ( a ) , e = F . state . lights , h = e . state . version ;
c = oa . getParameters ( a , e . state , F . state . shadowsArray , b , Sa . numPlanes , Sa . numIntersection , c ) ; var l = oa . getProgramCacheKey ( a , c ) , m = d . program , r = ! 0 ; if ( void 0 === m ) a . addEventListener ( "dispose" , f ) ; else if ( m . cacheKey !== l ) g ( a ) ; else { if ( d . lightsStateVersion !== h ) d . lightsStateVersion = h ; else if ( void 0 !== c . shaderID ) return ; r = ! 1 } r && ( c . shaderID ? ( l = db [ c . shaderID ] , d . shader = { name : a . type , uniforms : Xb ( l . uniforms ) , vertexShader : l . vertexShader , fragmentShader : l . fragmentShader } ) : d . shader = { name : a . type , uniforms : a . uniforms , vertexShader : a . vertexShader ,
fragmentShader : a . fragmentShader } , a . onBeforeCompile ( d . shader , C ) , l = oa . getProgramCacheKey ( a , c ) , m = oa . acquireProgram ( a , d . shader , c , l ) , d . program = m , a . program = m ) ; c = m . getAttributes ( ) ; if ( a . morphTargets ) for ( l = a . numSupportedMorphTargets = 0 ; l < C . maxMorphTargets ; l ++ ) 0 <= c [ "morphTarget" + l ] && a . numSupportedMorphTargets ++ ; if ( a . morphNormals ) for ( l = a . numSupportedMorphNormals = 0 ; l < C . maxMorphNormals ; l ++ ) 0 <= c [ "morphNormal" + l ] && a . numSupportedMorphNormals ++ ; c = d . shader . uniforms ; if ( ! a . isShaderMaterial && ! a . isRawShaderMaterial || ! 0 ===
a . clipping ) d . numClippingPlanes = Sa . numPlanes , d . numIntersection = Sa . numIntersection , c . clippingPlanes = Sa . uniform ; d . fog = b ; d . needsLights = a . isMeshLambertMaterial || a . isMeshPhongMaterial || a . isMeshStandardMaterial || a . isShadowMaterial || a . isShaderMaterial && ! 0 === a . lights ; d . lightsStateVersion = h ; d . needsLights && ( c . ambientLightColor . value = e . state . ambient , c . lightProbe . value = e . state . probe , c . directionalLights . value = e . state . directional , c . spotLights . value = e . state . spot , c . rectAreaLights . value = e . state . rectArea , c . pointLights . value =
e . state . point , c . hemisphereLights . value = e . state . hemi , c . directionalShadowMap . value = e . state . directionalShadowMap , c . directionalShadowMatrix . value = e . state . directionalShadowMatrix , c . spotShadowMap . value = e . state . spotShadowMap , c . spotShadowMatrix . value = e . state . spotShadowMatrix , c . pointShadowMap . value = e . state . pointShadowMap , c . pointShadowMatrix . value = e . state . pointShadowMatrix ) ; a = d . program . getUniforms ( ) ; a = Cb . seqWithValue ( a . seq , c ) ; d . uniformsList = a } function k ( a , b , c , d ) { ca . resetTextureUnits ( ) ; var e = Z . get ( c ) , f = F . state . lights ;
Oe && ( sa || a !== X ) && Sa . setState ( c . clippingPlanes , c . clipIntersection , c . clipShadows , a , e , a === X && c . id === ea ) ; c . version === e . _ _version && ( void 0 === e . program ? c . needsUpdate = ! 0 : c . fog && e . fog !== b ? c . needsUpdate = ! 0 : e . needsLights && e . lightsStateVersion !== f . state . version ? c . needsUpdate = ! 0 : void 0 === e . numClippingPlanes || e . numClippingPlanes === Sa . numPlanes && e . numIntersection === Sa . numIntersection || ( c . needsUpdate = ! 0 ) ) ; c . version !== e . _ _version && ( p ( c , b , d ) , e . _ _version = c . version ) ; var g = ! 1 , h = ! 1 , l = ! 1 ; f = e . program ; var m = f . getUniforms ( ) ,
r = e . shader . uniforms ; aa . useProgram ( f . program ) && ( l = h = g = ! 0 ) ; c . id !== ea && ( ea = c . id , h = ! 0 ) ; if ( g || X !== a ) { 0 < f . numMultiviewViews ? ta . updateCameraProjectionMatricesUniform ( a , m ) : m . setValue ( J , "projectionMatrix" , a . projectionMatrix ) ; Ea . logarithmicDepthBuffer && m . setValue ( J , "logDepthBufFC" , 2 / ( Math . log ( a . far + 1 ) / Math . LN2 ) ) ; X !== a && ( X = a , l = h = ! 0 ) ; if ( c . isShaderMaterial || c . isMeshPhongMaterial || c . isMeshStandardMaterial || c . envMap ) g = m . map . cameraPosition , void 0 !== g && g . setValue ( J , Fb . setFromMatrixPosition ( a . matrixWorld ) ) ; ( c . isMeshPhongMaterial ||
c . isMeshLambertMaterial || c . isMeshBasicMaterial || c . isMeshStandardMaterial || c . isShaderMaterial ) && m . setValue ( J , "isOrthographic" , ! 0 === a . isOrthographicCamera ) ; if ( c . isMeshPhongMaterial || c . isMeshLambertMaterial || c . isMeshBasicMaterial || c . isMeshStandardMaterial || c . isShaderMaterial || c . skinning ) 0 < f . numMultiviewViews ? ta . updateCameraViewMatricesUniform ( a , m ) : m . setValue ( J , "viewMatrix" , a . matrixWorldInverse ) } if ( c . skinning && ( m . setOptional ( J , d , "bindMatrix" ) , m . setOptional ( J , d , "bindMatrixInverse" ) , g = d . skeleton ) ) { var k =
g . bones ; if ( Ea . floatVertexTextures ) { if ( void 0 === g . boneTexture ) { k = Math . sqrt ( 4 * k . length ) ; k = R . ceilPowerOfTwo ( k ) ; k = Math . max ( k , 4 ) ; var t = new Float32Array ( k * k * 4 ) ; t . set ( g . boneMatrices ) ; var n = new Yb ( t , k , k , 1023 , 1015 ) ; g . boneMatrices = t ; g . boneTexture = n ; g . boneTextureSize = k } m . setValue ( J , "boneTexture" , g . boneTexture , ca ) ; m . setValue ( J , "boneTextureSize" , g . boneTextureSize ) } else m . setOptional ( J , g , "boneMatrices" ) } if ( h || e . receiveShadow !== d . receiveShadow ) e . receiveShadow = d . receiveShadow , m . setValue ( J , "receiveShadow" , d . receiveShadow ) ;
if ( h ) { m . setValue ( J , "toneMappingExposure" , C . toneMappingExposure ) ; m . setValue ( J , "toneMappingWhitePoint" , C . toneMappingWhitePoint ) ; e . needsLights && ( h = l , r . ambientLightColor . needsUpdate = h , r . lightProbe . needsUpdate = h , r . directionalLights . needsUpdate = h , r . pointLights . needsUpdate = h , r . spotLights . needsUpdate = h , r . rectAreaLights . needsUpdate = h , r . hemisphereLights . needsUpdate = h ) ; b && c . fog && ( r . fogColor . value . copy ( b . color ) , b . isFog ? ( r . fogNear . value = b . near , r . fogFar . value = b . far ) : b . isFogExp2 && ( r . fogDensity . value = b . density ) ) ;
if ( c . isMeshBasicMaterial ) u ( r , c ) ; else if ( c . isMeshLambertMaterial ) u ( r , c ) , c . emissiveMap && ( r . emissiveMap . value = c . emissiveMap ) ; else if ( c . isMeshPhongMaterial ) u ( r , c ) , c . isMeshToonMaterial ? ( q ( r , c ) , c . gradientMap && ( r . gradientMap . value = c . gradientMap ) ) : q ( r , c ) ; else if ( c . isMeshStandardMaterial ) u ( r , c ) , c . isMeshPhysicalMaterial ? ( v ( r , c ) , r . reflectivity . value = c . reflectivity , r . clearcoat . value = c . clearcoat , r . clearcoatRoughness . value = c . clearcoatRoughness , c . sheen && r . sheen . value . copy ( c . sheen ) , c . clearcoatNormalMap && ( r . clearcoatNormalScale . value . copy ( c . clearcoatNormalScale ) ,
r . clearcoatNormalMap . value = c . clearcoatNormalMap , 1 === c . side && r . clearcoatNormalScale . value . negate ( ) ) , r . transparency . value = c . transparency ) : v ( r , c ) ; else if ( c . isMeshMatcapMaterial ) u ( r , c ) , c . matcap && ( r . matcap . value = c . matcap ) , c . bumpMap && ( r . bumpMap . value = c . bumpMap , r . bumpScale . value = c . bumpScale , 1 === c . side && ( r . bumpScale . value *= - 1 ) ) , c . normalMap && ( r . normalMap . value = c . normalMap , r . normalScale . value . copy ( c . normalScale ) , 1 === c . side && r . normalScale . value . negate ( ) ) , c . displacementMap && ( r . displacementMap . value = c . displacementMap ,
r . displacementScale . value = c . displacementScale , r . displacementBias . value = c . displacementBias ) ; else if ( c . isMeshDepthMaterial ) u ( r , c ) , c . displacementMap && ( r . displacementMap . value = c . displacementMap , r . displacementScale . value = c . displacementScale , r . displacementBias . value = c . displacementBias ) ; else if ( c . isMeshDistanceMaterial ) u ( r , c ) , c . displacementMap && ( r . displacementMap . value = c . displacementMap , r . displacementScale . value = c . displacementScale , r . displacementBias . value = c . displacementBias ) , r . referencePosition . value . copy ( c . referencePosition ) ,
r . nearDistance . value = c . nearDistance , r . farDistance . value = c . farDistance ; else if ( c . isMeshNormalMaterial ) u ( r , c ) , c . bumpMap && ( r . bumpMap . value = c . bumpMap , r . bumpScale . value = c . bumpScale , 1 === c . side && ( r . bumpScale . value *= - 1 ) ) , c . normalMap && ( r . normalMap . value = c . normalMap , r . normalScale . value . copy ( c . normalScale ) , 1 === c . side && r . normalScale . value . negate ( ) ) , c . displacementMap && ( r . displacementMap . value = c . displacementMap , r . displacementScale . value = c . displacementScale , r . displacementBias . value = c . displacementBias ) ; else if ( c . isLineBasicMaterial ) r . diffuse . value . copy ( c . color ) ,
r . opacity . value = c . opacity , c . isLineDashedMaterial && ( r . dashSize . value = c . dashSize , r . totalSize . value = c . dashSize + c . gapSize , r . scale . value = c . scale ) ; else if ( c . isPointsMaterial ) { r . diffuse . value . copy ( c . color ) ; r . opacity . value = c . opacity ; r . size . value = c . size * ha ; r . scale . value = . 5 * W ; c . map && ( r . map . value = c . map ) ; c . alphaMap && ( r . alphaMap . value = c . alphaMap ) ; if ( c . map ) var w = c . map ; else c . alphaMap && ( w = c . alphaMap ) ; void 0 !== w && ( ! 0 === w . matrixAutoUpdate && w . updateMatrix ( ) , r . uvTransform . value . copy ( w . matrix ) ) } else if ( c . isSpriteMaterial ) { r . diffuse . value . copy ( c . color ) ;
r . opacity . value = c . opacity ; r . rotation . value = c . rotation ; c . map && ( r . map . value = c . map ) ; c . alphaMap && ( r . alphaMap . value = c . alphaMap ) ; if ( c . map ) var A = c . map ; else c . alphaMap && ( A = c . alphaMap ) ; void 0 !== A && ( ! 0 === A . matrixAutoUpdate && A . updateMatrix ( ) , r . uvTransform . value . copy ( A . matrix ) ) } else c . isShadowMaterial && ( r . color . value . copy ( c . color ) , r . opacity . value = c . opacity ) ; void 0 !== r . ltc _1 && ( r . ltc _1 . value = K . LTC _1 ) ; void 0 !== r . ltc _2 && ( r . ltc _2 . value = K . LTC _2 ) ; Cb . upload ( J , e . uniformsList , r , ca ) ; c . isShaderMaterial && ( c . uniformsNeedUpdate =
! 1 ) } c . isShaderMaterial && ! 0 === c . uniformsNeedUpdate && ( Cb . upload ( J , e . uniformsList , r , ca ) , c . uniformsNeedUpdate = ! 1 ) ; c . isSpriteMaterial && m . setValue ( J , "center" , d . center ) ; 0 < f . numMultiviewViews ? ta . updateObjectMatricesUniforms ( d , a , m ) : ( m . setValue ( J , "modelViewMatrix" , d . modelViewMatrix ) , m . setValue ( J , "normalMatrix" , d . normalMatrix ) ) ; m . setValue ( J , "modelMatrix" , d . matrixWorld ) ; return f } function u ( a , b ) { a . opacity . value = b . opacity ; b . color && a . diffuse . value . copy ( b . color ) ; b . emissive && a . emissive . value . copy ( b . emissive ) . multiplyScalar ( b . emissiveIntensity ) ;
b . map && ( a . map . value = b . map ) ; b . alphaMap && ( a . alphaMap . value = b . alphaMap ) ; b . specularMap && ( a . specularMap . value = b . specularMap ) ; b . envMap && ( a . envMap . value = b . envMap , a . flipEnvMap . value = b . envMap . isCubeTexture ? - 1 : 1 , a . reflectivity . value = b . reflectivity , a . refractionRatio . value = b . refractionRatio , a . maxMipLevel . value = Z . get ( b . envMap ) . _ _maxMipLevel ) ; b . lightMap && ( a . lightMap . value = b . lightMap , a . lightMapIntensity . value = b . lightMapIntensity ) ; b . aoMap && ( a . aoMap . value = b . aoMap , a . aoMapIntensity . value = b . aoMapIntensity ) ; if ( b . map ) var c =
b . map ; else b . specularMap ? c = b . specularMap : b . displacementMap ? c = b . displacementMap : b . normalMap ? c = b . normalMap : b . bumpMap ? c = b . bumpMap : b . roughnessMap ? c = b . roughnessMap : b . metalnessMap ? c = b . metalnessMap : b . alphaMap ? c = b . alphaMap : b . emissiveMap && ( c = b . emissiveMap ) ; void 0 !== c && ( c . isWebGLRenderTarget && ( c = c . texture ) , ! 0 === c . matrixAutoUpdate && c . updateMatrix ( ) , a . uvTransform . value . copy ( c . matrix ) ) } function q ( a , b ) { a . specular . value . copy ( b . specular ) ; a . shininess . value = Math . max ( b . shininess , 1E-4 ) ; b . emissiveMap && ( a . emissiveMap . value =
2019-10-25 18:42:56 +08:00
b . emissiveMap ) ; b . bumpMap && ( a . bumpMap . value = b . bumpMap , a . bumpScale . value = b . bumpScale , 1 === b . side && ( a . bumpScale . value *= - 1 ) ) ; b . normalMap && ( a . normalMap . value = b . normalMap , a . normalScale . value . copy ( b . normalScale ) , 1 === b . side && a . normalScale . value . negate ( ) ) ; b . displacementMap && ( a . displacementMap . value = b . displacementMap , a . displacementScale . value = b . displacementScale , a . displacementBias . value = b . displacementBias ) } function v ( a , b ) { a . roughness . value = b . roughness ; a . metalness . value = b . metalness ; b . roughnessMap && ( a . roughnessMap . value =
b . roughnessMap ) ; b . metalnessMap && ( a . metalnessMap . value = b . metalnessMap ) ; b . emissiveMap && ( a . emissiveMap . value = b . emissiveMap ) ; b . bumpMap && ( a . bumpMap . value = b . bumpMap , a . bumpScale . value = b . bumpScale , 1 === b . side && ( a . bumpScale . value *= - 1 ) ) ; b . normalMap && ( a . normalMap . value = b . normalMap , a . normalScale . value . copy ( b . normalScale ) , 1 === b . side && a . normalScale . value . negate ( ) ) ; b . displacementMap && ( a . displacementMap . value = b . displacementMap , a . displacementScale . value = b . displacementScale , a . displacementBias . value = b . displacementBias ) ;
2019-12-11 10:47:24 +08:00
b . envMap && ( a . envMapIntensity . value = b . envMapIntensity ) } a = a || { } ; var A = void 0 !== a . canvas ? a . canvas : document . createElementNS ( "http://www.w3.org/1999/xhtml" , "canvas" ) , w = void 0 !== a . context ? a . context : null , x = void 0 !== a . alpha ? a . alpha : ! 1 , I = void 0 !== a . depth ? a . depth : ! 0 , G = void 0 !== a . stencil ? a . stencil : ! 0 , z = void 0 !== a . antialias ? a . antialias : ! 1 , y = void 0 !== a . premultipliedAlpha ? a . premultipliedAlpha : ! 0 , D = void 0 !== a . preserveDrawingBuffer ? a . preserveDrawingBuffer : ! 1 , E = void 0 !== a . powerPreference ? a . powerPreference : "default" ,
H = void 0 !== a . failIfMajorPerformanceCaveat ? a . failIfMajorPerformanceCaveat : ! 1 , L = null , F = null ; this . domElement = A ; this . debug = { checkShaderErrors : ! 0 } ; this . sortObjects = this . autoClearStencil = this . autoClearDepth = this . autoClearColor = this . autoClear = ! 0 ; this . clippingPlanes = [ ] ; this . localClippingEnabled = ! 1 ; this . gammaFactor = 2 ; this . physicallyCorrectLights = this . gammaOutput = this . gammaInput = ! 1 ; this . toneMappingWhitePoint = this . toneMappingExposure = this . toneMapping = 1 ; this . maxMorphTargets = 8 ; this . maxMorphNormals = 4 ; var C = this ,
N = ! 1 , O = null , Q = 0 , V = 0 , P = null , Pe = null , ea = - 1 ; var Qe = b = null ; var Y = ! 1 ; var X = null , $b = null , T = new ba , ob = new ba , ja = null , M = A . width , W = A . height , ha = 1 , da = new ba ( 0 , 0 , M , W ) , U = new ba ( 0 , 0 , M , W ) , pa = ! 1 , mg = new Ed , Sa = new gj , Oe = ! 1 , sa = ! 1 , Jd = new S , Fb = new n ; try { x = { alpha : x , depth : I , stencil : G , antialias : z , premultipliedAlpha : y , preserveDrawingBuffer : D , powerPreference : E , failIfMajorPerformanceCaveat : H , xrCompatible : ! 0 } ; A . addEventListener ( "webglcontextlost" , d , ! 1 ) ; A . addEventListener ( "webglcontextrestored" , e , ! 1 ) ; var J = w || A . getContext ( "webgl" ,
x ) || A . getContext ( "experimental-webgl" , x ) ; if ( null === J ) { if ( null !== A . getContext ( "webgl" ) ) throw Error ( "Error creating WebGL context with your selected attributes." ) ; throw Error ( "Error creating WebGL context." ) ; } void 0 === J . getShaderPrecisionFormat && ( J . getShaderPrecisionFormat = function ( ) { return { rangeMin : 1 , rangeMax : 1 , precision : 1 } } ) } catch ( Th ) { throw console . error ( "THREE.WebGLRenderer: " + Th . message ) , Th ; } var qa , Ea , aa , fa , Z , ca , ma , wa , ra , oa , va , ua , na , xa , za , Aa , la ; c ( ) ; var ia = "undefined" !== typeof navigator && "xr" in navigator ?
new Sh ( C , J ) : new og ( C ) ; this . vr = ia ; var ta = new rk ( C , J ) , Da = new Mh ( C , ra , Ea . maxTextureSize ) ; this . shadowMap = Da ; this . getContext = function ( ) { return J } ; this . getContextAttributes = function ( ) { return J . getContextAttributes ( ) } ; this . forceContextLoss = function ( ) { var a = qa . get ( "WEBGL_lose_context" ) ; a && a . loseContext ( ) } ; this . forceContextRestore = function ( ) { var a = qa . get ( "WEBGL_lose_context" ) ; a && a . restoreContext ( ) } ; this . getPixelRatio = function ( ) { return ha } ; this . setPixelRatio = function ( a ) { void 0 !== a && ( ha = a , this . setSize ( M , W , ! 1 ) ) } ;
this . getSize = function ( a ) { void 0 === a && ( console . warn ( "WebGLRenderer: .getsize() now requires a Vector2 as an argument" ) , a = new B ) ; return a . set ( M , W ) } ; this . setSize = function ( a , b , c ) { ia . isPresenting ( ) ? console . warn ( "THREE.WebGLRenderer: Can't change size while VR device is presenting." ) : ( M = a , W = b , A . width = Math . floor ( a * ha ) , A . height = Math . floor ( b * ha ) , ! 1 !== c && ( A . style . width = a + "px" , A . style . height = b + "px" ) , this . setViewport ( 0 , 0 , a , b ) ) } ; this . getDrawingBufferSize = function ( a ) { void 0 === a && ( console . warn ( "WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument" ) ,
a = new B ) ; return a . set ( M * ha , W * ha ) . floor ( ) } ; this . setDrawingBufferSize = function ( a , b , c ) { M = a ; W = b ; ha = c ; A . width = Math . floor ( a * c ) ; A . height = Math . floor ( b * c ) ; this . setViewport ( 0 , 0 , a , b ) } ; this . getCurrentViewport = function ( a ) { void 0 === a && ( console . warn ( "WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument" ) , a = new ba ) ; return a . copy ( T ) } ; this . getViewport = function ( a ) { return a . copy ( da ) } ; this . setViewport = function ( a , b , c , d ) { a . isVector4 ? da . set ( a . x , a . y , a . z , a . w ) : da . set ( a , b , c , d ) ; aa . viewport ( T . copy ( da ) . multiplyScalar ( ha ) . floor ( ) ) } ;
this . getScissor = function ( a ) { return a . copy ( U ) } ; this . setScissor = function ( a , b , c , d ) { a . isVector4 ? U . set ( a . x , a . y , a . z , a . w ) : U . set ( a , b , c , d ) ; aa . scissor ( ob . copy ( U ) . multiplyScalar ( ha ) . floor ( ) ) } ; this . getScissorTest = function ( ) { return pa } ; this . setScissorTest = function ( a ) { aa . setScissorTest ( pa = a ) } ; this . getClearColor = function ( ) { return na . getClearColor ( ) } ; this . setClearColor = function ( ) { na . setClearColor . apply ( na , arguments ) } ; this . getClearAlpha = function ( ) { return na . getClearAlpha ( ) } ; this . setClearAlpha = function ( ) { na . setClearAlpha . apply ( na ,
arguments ) } ; this . clear = function ( a , b , c ) { var d = 0 ; if ( void 0 === a || a ) d |= 16384 ; if ( void 0 === b || b ) d |= 256 ; if ( void 0 === c || c ) d |= 1024 ; J . clear ( d ) } ; this . clearColor = function ( ) { this . clear ( ! 0 , ! 1 , ! 1 ) } ; this . clearDepth = function ( ) { this . clear ( ! 1 , ! 0 , ! 1 ) } ; this . clearStencil = function ( ) { this . clear ( ! 1 , ! 1 , ! 0 ) } ; this . dispose = function ( ) { A . removeEventListener ( "webglcontextlost" , d , ! 1 ) ; A . removeEventListener ( "webglcontextrestored" , e , ! 1 ) ; va . dispose ( ) ; ua . dispose ( ) ; Z . dispose ( ) ; ra . dispose ( ) ; ia . dispose ( ) ; ya . stop ( ) } ; this . renderBufferImmediate =
function ( a , b ) { aa . initAttributes ( ) ; var c = Z . get ( a ) ; a . hasPositions && ! c . position && ( c . position = J . createBuffer ( ) ) ; a . hasNormals && ! c . normal && ( c . normal = J . createBuffer ( ) ) ; a . hasUvs && ! c . uv && ( c . uv = J . createBuffer ( ) ) ; a . hasColors && ! c . color && ( c . color = J . createBuffer ( ) ) ; b = b . getAttributes ( ) ; a . hasPositions && ( J . bindBuffer ( 34962 , c . position ) , J . bufferData ( 34962 , a . positionArray , 35048 ) , aa . enableAttribute ( b . position ) , J . vertexAttribPointer ( b . position , 3 , 5126 , ! 1 , 0 , 0 ) ) ; a . hasNormals && ( J . bindBuffer ( 34962 , c . normal ) , J . bufferData ( 34962 ,
a . normalArray , 35048 ) , aa . enableAttribute ( b . normal ) , J . vertexAttribPointer ( b . normal , 3 , 5126 , ! 1 , 0 , 0 ) ) ; a . hasUvs && ( J . bindBuffer ( 34962 , c . uv ) , J . bufferData ( 34962 , a . uvArray , 35048 ) , aa . enableAttribute ( b . uv ) , J . vertexAttribPointer ( b . uv , 2 , 5126 , ! 1 , 0 , 0 ) ) ; a . hasColors && ( J . bindBuffer ( 34962 , c . color ) , J . bufferData ( 34962 , a . colorArray , 35048 ) , aa . enableAttribute ( b . color ) , J . vertexAttribPointer ( b . color , 3 , 5126 , ! 1 , 0 , 0 ) ) ; aa . disableUnusedAttributes ( ) ; J . drawArrays ( 4 , 0 , a . count ) ; a . count = 0 } ; this . renderBufferDirect = function ( a , c , d , e , f ,
g ) { var h = f . isMesh && 0 > f . matrixWorld . determinant ( ) ; aa . setMaterial ( e , h ) ; var l = k ( a , c , e , f ) , m = ! 1 ; if ( b !== d . id || Qe !== l . id || Y !== ( ! 0 === e . wireframe ) ) b = d . id , Qe = l . id , Y = ! 0 === e . wireframe , m = ! 0 ; f . morphTargetInfluences && ( xa . update ( f , d , e , l ) , m = ! 0 ) ; h = d . index ; var r = d . attributes . position ; if ( ( null === h || 0 !== h . count ) && void 0 !== r && 0 !== r . count ) { c = 1 ; ! 0 === e . wireframe && ( h = wa . getWireframeAttribute ( d ) , c = 2 ) ; a = za ; if ( null !== h ) { var p = ma . get ( h ) ; a = Aa ; a . setIndex ( p ) } if ( m ) { if ( ! 1 !== Ea . isWebGL2 || ! f . isInstancedMesh && ! d . isInstancedBufferGeometry ||
null !== qa . get ( "ANGLE_instanced_arrays" ) ) { aa . initAttributes ( ) ; m = d . attributes ; l = l . getAttributes ( ) ; var t = e . defaultAttributeValues ; for ( G in l ) { var q = l [ G ] ; if ( 0 <= q ) { var u = m [ G ] ; if ( void 0 !== u ) { var n = u . normalized , v = u . itemSize , w = ma . get ( u ) ; if ( void 0 !== w ) { var A = w . buffer , x = w . type ; w = w . bytesPerElement ; if ( u . isInterleavedBufferAttribute ) { var z = u . data , I = z . stride ; u = u . offset ; z && z . isInstancedInterleavedBuffer ? ( aa . enableAttributeAndDivisor ( q , z . meshPerAttribute ) , void 0 === d . maxInstancedCount && ( d . maxInstancedCount = z . meshPerAttribute *
z . count ) ) : aa . enableAttribute ( q ) ; J . bindBuffer ( 34962 , A ) ; J . vertexAttribPointer ( q , v , x , n , I * w , u * w ) } else u . isInstancedBufferAttribute ? ( aa . enableAttributeAndDivisor ( q , u . meshPerAttribute ) , void 0 === d . maxInstancedCount && ( d . maxInstancedCount = u . meshPerAttribute * u . count ) ) : aa . enableAttribute ( q ) , J . bindBuffer ( 34962 , A ) , J . vertexAttribPointer ( q , v , x , n , 0 , 0 ) } } else if ( "instanceMatrix" === G ) w = ma . get ( f . instanceMatrix ) , void 0 !== w && ( A = w . buffer , x = w . type , aa . enableAttributeAndDivisor ( q + 0 , 1 ) , aa . enableAttributeAndDivisor ( q + 1 , 1 ) , aa . enableAttributeAndDivisor ( q +
2 , 1 ) , aa . enableAttributeAndDivisor ( q + 3 , 1 ) , J . bindBuffer ( 34962 , A ) , J . vertexAttribPointer ( q + 0 , 4 , x , ! 1 , 64 , 0 ) , J . vertexAttribPointer ( q + 1 , 4 , x , ! 1 , 64 , 16 ) , J . vertexAttribPointer ( q + 2 , 4 , x , ! 1 , 64 , 32 ) , J . vertexAttribPointer ( q + 3 , 4 , x , ! 1 , 64 , 48 ) ) ; else if ( void 0 !== t && ( n = t [ G ] , void 0 !== n ) ) switch ( n . length ) { case 2 : J . vertexAttrib2fv ( q , n ) ; break ; case 3 : J . vertexAttrib3fv ( q , n ) ; break ; case 4 : J . vertexAttrib4fv ( q , n ) ; break ; default : J . vertexAttrib1fv ( q , n ) } } } aa . disableUnusedAttributes ( ) } null !== h && J . bindBuffer ( 34963 , p . buffer ) } p = Infinity ; null !==
h ? p = h . count : void 0 !== r && ( p = r . count ) ; h = d . drawRange . start * c ; r = null !== g ? g . start * c : 0 ; var G = Math . max ( h , r ) ; g = Math . max ( 0 , Math . min ( p , h + d . drawRange . count * c , r + ( null !== g ? g . count * c : Infinity ) ) - 1 - G + 1 ) ; if ( 0 !== g ) { if ( f . isMesh ) if ( ! 0 === e . wireframe ) aa . setLineWidth ( e . wireframeLinewidth * ( null === P ? ha : 1 ) ) , a . setMode ( 1 ) ; else switch ( f . drawMode ) { case 0 : a . setMode ( 4 ) ; break ; case 1 : a . setMode ( 5 ) ; break ; case 2 : a . setMode ( 6 ) } else f . isLine ? ( e = e . linewidth , void 0 === e && ( e = 1 ) , aa . setLineWidth ( e * ( null === P ? ha : 1 ) ) , f . isLineSegments ? a . setMode ( 1 ) :
f . isLineLoop ? a . setMode ( 2 ) : a . setMode ( 3 ) ) : f . isPoints ? a . setMode ( 0 ) : f . isSprite && a . setMode ( 4 ) ; f . isInstancedMesh ? a . renderInstances ( d , G , g , f . count ) : d . isInstancedBufferGeometry ? a . renderInstances ( d , G , g , d . maxInstancedCount ) : a . render ( G , g ) } } } ; this . compile = function ( a , b ) { F = ua . get ( a , b ) ; F . init ( ) ; a . traverse ( function ( a ) { a . isLight && ( F . pushLight ( a ) , a . castShadow && F . pushShadow ( a ) ) } ) ; F . setupLights ( b ) ; a . traverse ( function ( b ) { if ( b . material ) if ( Array . isArray ( b . material ) ) for ( var c = 0 ; c < b . material . length ; c ++ ) p ( b . material [ c ] , a . fog ,
b ) ; else p ( b . material , a . fog , b ) } ) } ; var Ca = null , ya = new hg ; ya . setAnimationLoop ( function ( a ) { ia . isPresenting ( ) || Ca && Ca ( a ) } ) ; "undefined" !== typeof window && ya . setContext ( window ) ; this . setAnimationLoop = function ( a ) { Ca = a ; ia . setAnimationLoop ( a ) ; ya . start ( ) } ; this . render = function ( a , c , d , e ) { if ( void 0 !== d ) { console . warn ( "THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead." ) ; var f = d } if ( void 0 !== e ) { console . warn ( "THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead." ) ;
var g = e } c && c . isCamera ? N || ( Qe = b = null , Y = ! 1 , ea = - 1 , X = null , ! 0 === a . autoUpdate && a . updateMatrixWorld ( ) , null === c . parent && c . updateMatrixWorld ( ) , ia . enabled && ia . isPresenting ( ) && ( c = ia . getCamera ( c ) ) , F = ua . get ( a , c ) , F . init ( ) , a . onBeforeRender ( C , a , c , f || P ) , Jd . multiplyMatrices ( c . projectionMatrix , c . matrixWorldInverse ) , mg . setFromMatrix ( Jd ) , sa = this . localClippingEnabled , Oe = Sa . init ( this . clippingPlanes , sa , c ) , L = va . get ( a , c ) , L . init ( ) , l ( a , c , 0 , C . sortObjects ) , ! 0 === C . sortObjects && L . sort ( ) , Oe && Sa . beginShadows ( ) , Da . render ( F . state . shadowsArray ,
a , c ) , F . setupLights ( c ) , Oe && Sa . endShadows ( ) , this . info . autoReset && this . info . reset ( ) , void 0 !== f && this . setRenderTarget ( f ) , ia . enabled && ta . isAvailable ( ) && ta . attachCamera ( c ) , na . render ( L , a , c , g ) , d = L . opaque , e = L . transparent , a . overrideMaterial ? ( f = a . overrideMaterial , d . length && m ( d , a , c , f ) , e . length && m ( e , a , c , f ) ) : ( d . length && m ( d , a , c ) , e . length && m ( e , a , c ) ) , a . onAfterRender ( C , a , c ) , null !== P && ( ca . updateRenderTargetMipmap ( P ) , ca . updateMultisampleRenderTarget ( P ) ) , aa . buffers . depth . setTest ( ! 0 ) , aa . buffers . depth . setMask ( ! 0 ) , aa . buffers . color . setMask ( ! 0 ) ,
aa . setPolygonOffset ( ! 1 ) , ia . enabled && ( ta . isAvailable ( ) && ta . detachCamera ( c ) , ia . submitFrame ( ) ) , F = L = null ) : console . error ( "THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera." ) } ; this . setFramebuffer = function ( a ) { O !== a && null === P && J . bindFramebuffer ( 36160 , a ) ; O = a } ; this . getActiveCubeFace = function ( ) { return Q } ; this . getActiveMipmapLevel = function ( ) { return V } ; this . getRenderTarget = function ( ) { return P } ; this . setRenderTarget = function ( a , b , c ) { P = a ; Q = b ; V = c ; a && void 0 === Z . get ( a ) . _ _webglFramebuffer && ca . setupRenderTarget ( a ) ;
var d = O , e = ! 1 ; a ? ( d = Z . get ( a ) . _ _webglFramebuffer , a . isWebGLRenderTargetCube ? ( d = d [ b || 0 ] , e = ! 0 ) : d = a . isWebGLMultisampleRenderTarget ? Z . get ( a ) . _ _webglMultisampledFramebuffer : d , T . copy ( a . viewport ) , ob . copy ( a . scissor ) , ja = a . scissorTest ) : ( T . copy ( da ) . multiplyScalar ( ha ) . floor ( ) , ob . copy ( U ) . multiplyScalar ( ha ) . floor ( ) , ja = pa ) ; Pe !== d && ( J . bindFramebuffer ( 36160 , d ) , Pe = d ) ; aa . viewport ( T ) ; aa . scissor ( ob ) ; aa . setScissorTest ( ja ) ; e && ( a = Z . get ( a . texture ) , J . framebufferTexture2D ( 36160 , 36064 , 34069 + ( b || 0 ) , a . _ _webglTexture , c || 0 ) ) } ; this . readRenderTargetPixels =
function ( a , b , c , d , e , f , g ) { if ( a && a . isWebGLRenderTarget ) { var h = Z . get ( a ) . _ _webglFramebuffer ; a . isWebGLRenderTargetCube && void 0 !== g && ( h = h [ g ] ) ; if ( h ) { g = ! 1 ; h !== Pe && ( J . bindFramebuffer ( 36160 , h ) , g = ! 0 ) ; try { var l = a . texture , m = l . format , r = l . type ; 1023 !== m && la . convert ( m ) !== J . getParameter ( 35739 ) ? console . error ( "THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format." ) : 1009 === r || la . convert ( r ) === J . getParameter ( 35738 ) || 1015 === r && ( Ea . isWebGL2 || qa . get ( "OES_texture_float" ) ||
qa . get ( "WEBGL_color_buffer_float" ) ) || 1016 === r && ( Ea . isWebGL2 ? qa . get ( "EXT_color_buffer_float" ) : qa . get ( "EXT_color_buffer_half_float" ) ) ? 36053 === J . checkFramebufferStatus ( 36160 ) ? 0 <= b && b <= a . width - d && 0 <= c && c <= a . height - e && J . readPixels ( b , c , d , e , la . convert ( m ) , la . convert ( r ) , f ) : console . error ( "THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete." ) : console . error ( "THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type." ) } finally { g &&
J . bindFramebuffer ( 36160 , Pe ) } } } else console . error ( "THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget." ) } ; this . copyFramebufferToTexture = function ( a , b , c ) { void 0 === c && ( c = 0 ) ; var d = Math . pow ( 2 , - c ) , e = Math . floor ( b . image . width * d ) ; d = Math . floor ( b . image . height * d ) ; var f = la . convert ( b . format ) ; ca . setTexture2D ( b , 0 ) ; J . copyTexImage2D ( 3553 , c , f , a . x , a . y , e , d , 0 ) ; aa . unbindTexture ( ) } ; this . copyTextureToTexture = function ( a , b , c , d ) { var e = b . image . width , f = b . image . height , g = la . convert ( c . format ) ,
h = la . convert ( c . type ) ; ca . setTexture2D ( c , 0 ) ; b . isDataTexture ? J . texSubImage2D ( 3553 , d || 0 , a . x , a . y , e , f , g , h , b . image . data ) : J . texSubImage2D ( 3553 , d || 0 , a . x , a . y , g , h , b . image ) ; aa . unbindTexture ( ) } ; this . initTexture = function ( a ) { ca . setTexture2D ( a , 0 ) ; aa . unbindTexture ( ) } ; "undefined" !== typeof _ _THREE _DEVTOOLS _ _ && _ _THREE _DEVTOOLS _ _ . dispatchEvent ( new CustomEvent ( "observe" , { detail : this } ) ) } function Se ( a , b ) { this . name = "" ; this . color = new H ( a ) ; this . density = void 0 !== b ? b : 2.5 E - 4 } function Te ( a , b , c ) { this . name = "" ; this . color = new H ( a ) ;
this . near = void 0 !== b ? b : 1 ; this . far = void 0 !== c ? c : 1E3 } function pb ( a , b ) { this . array = a ; this . stride = b ; this . count = void 0 !== a ? a . length / b : 0 ; this . usage = 35044 ; this . updateRange = { offset : 0 , count : - 1 } ; this . version = 0 } function Ld ( a , b , c , d ) { this . data = a ; this . itemSize = b ; this . offset = c ; this . normalized = ! 0 === d } function Gb ( a ) { C . call ( this ) ; this . type = "SpriteMaterial" ; this . color = new H ( 16777215 ) ; this . alphaMap = this . map = null ; this . rotation = 0 ; this . transparent = this . sizeAttenuation = ! 0 ; this . setValues ( a ) } function Md ( a ) { y . call ( this ) ; this . type =
"Sprite" ; if ( void 0 === Gc ) { Gc = new E ; var b = new Float32Array ( [ - . 5 , - . 5 , 0 , 0 , 0 , . 5 , - . 5 , 0 , 1 , 0 , . 5 , . 5 , 0 , 1 , 1 , - . 5 , . 5 , 0 , 0 , 1 ] ) ; b = new pb ( b , 5 ) ; Gc . setIndex ( [ 0 , 1 , 2 , 0 , 2 , 3 ] ) ; Gc . setAttribute ( "position" , new Ld ( b , 3 , 0 , ! 1 ) ) ; Gc . setAttribute ( "uv" , new Ld ( b , 2 , 3 , ! 1 ) ) } this . geometry = Gc ; this . material = void 0 !== a ? a : new Gb ; this . center = new B ( . 5 , . 5 ) } function Ue ( a , b , c , d , e , f ) { Hc . subVectors ( a , c ) . addScalar ( . 5 ) . multiply ( d ) ; void 0 !== e ? ( Nd . x = f * Hc . x - e * Hc . y , Nd . y = e * Hc . x + f * Hc . y ) : Nd . copy ( Hc ) ; a . copy ( b ) ; a . x += Nd . x ; a . y += Nd . y ; a . applyMatrix4 ( Uh ) } function Od ( ) { y . call ( this ) ;
this . type = "LOD" ; Object . defineProperties ( this , { levels : { enumerable : ! 0 , value : [ ] } } ) ; this . autoUpdate = ! 0 } function Pd ( a , b ) { a && a . isGeometry && console . error ( "THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead." ) ; ja . call ( this , a , b ) ; this . type = "SkinnedMesh" ; this . bindMode = "attached" ; this . bindMatrix = new S ; this . bindMatrixInverse = new S } function Ve ( a , b ) { a = a || [ ] ; this . bones = a . slice ( 0 ) ; this . boneMatrices = new Float32Array ( 16 * this . bones . length ) ; this . frame = - 1 ; if ( void 0 === b ) this . calculateInverses ( ) ;
else if ( this . bones . length === b . length ) this . boneInverses = b . slice ( 0 ) ; else for ( console . warn ( "THREE.Skeleton boneInverses is the wrong length." ) , this . boneInverses = [ ] , a = 0 , b = this . bones . length ; a < b ; a ++ ) this . boneInverses . push ( new S ) } function qg ( ) { y . call ( this ) ; this . type = "Bone" } function We ( a , b , c ) { ja . call ( this , a , b ) ; this . instanceMatrix = new N ( new Float32Array ( 16 * c ) , 16 ) ; this . count = c } function P ( a ) { C . call ( this ) ; this . type = "LineBasicMaterial" ; this . color = new H ( 16777215 ) ; this . linewidth = 1 ; this . linejoin = this . linecap = "round" ;
this . setValues ( a ) } function wa ( a , b , c ) { 1 === c && console . error ( "THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead." ) ; y . call ( this ) ; this . type = "Line" ; this . geometry = void 0 !== a ? a : new E ; this . material = void 0 !== b ? b : new P ( { color : 16777215 * Math . random ( ) } ) } function X ( a , b ) { wa . call ( this , a , b ) ; this . type = "LineSegments" } function Xe ( a , b ) { wa . call ( this , a , b ) ; this . type = "LineLoop" } function Ta ( a ) { C . call ( this ) ; this . type = "PointsMaterial" ; this . color = new H ( 16777215 ) ; this . alphaMap = this . map =
null ; this . size = 1 ; this . sizeAttenuation = ! 0 ; this . morphTargets = ! 1 ; this . setValues ( a ) } function Ic ( a , b ) { y . call ( this ) ; this . type = "Points" ; this . geometry = void 0 !== a ? a : new E ; this . material = void 0 !== b ? b : new Ta ( { color : 16777215 * Math . random ( ) } ) ; this . updateMorphTargets ( ) } function rg ( a , b , c , d , e , f , g ) { var h = sg . distanceSqToPoint ( a ) ; h < c && ( c = new n , sg . closestPointToPoint ( a , c ) , c . applyMatrix4 ( d ) , a = e . ray . origin . distanceTo ( c ) , a < e . near || a > e . far || f . push ( { distance : a , distanceToRay : Math . sqrt ( h ) , point : c , index : b , face : null , object : g } ) ) }
function tg ( a , b , c , d , e , f , g , h , l ) { Y . call ( this , a , b , c , d , e , f , g , h , l ) ; this . format = void 0 !== g ? g : 1022 ; this . minFilter = void 0 !== f ? f : 1006 ; this . magFilter = void 0 !== e ? e : 1006 ; this . generateMipmaps = ! 1 } function Jc ( a , b , c , d , e , f , g , h , l , m , r , k ) { Y . call ( this , null , f , g , h , l , m , d , e , r , k ) ; this . image = { width : b , height : c } ; this . mipmaps = a ; this . generateMipmaps = this . flipY = ! 1 } function Qd ( a , b , c , d , e , f , g , h , l ) { Y . call ( this , a , b , c , d , e , f , g , h , l ) ; this . needsUpdate = ! 0 } function Rd ( a , b , c , d , e , f , g , h , l , m ) { m = void 0 !== m ? m : 1026 ; if ( 1026 !== m && 1027 !== m ) throw Error ( "DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat" ) ;
void 0 === c && 1026 === m && ( c = 1012 ) ; void 0 === c && 1027 === m && ( c = 1020 ) ; Y . call ( this , null , d , e , f , g , h , m , c , l ) ; this . image = { width : a , height : b } ; this . magFilter = void 0 !== g ? g : 1003 ; this . minFilter = void 0 !== h ? h : 1003 ; this . generateMipmaps = this . flipY = ! 1 } function Kc ( a ) { E . call ( this ) ; this . type = "WireframeGeometry" ; var b = [ ] , c , d , e , f = [ 0 , 0 ] , g = { } , h = [ "a" , "b" , "c" ] ; if ( a && a . isGeometry ) { var l = a . faces ; var m = 0 ; for ( d = l . length ; m < d ; m ++ ) { var r = l [ m ] ; for ( c = 0 ; 3 > c ; c ++ ) { var k = r [ h [ c ] ] ; var t = r [ h [ ( c + 1 ) % 3 ] ] ; f [ 0 ] = Math . min ( k , t ) ; f [ 1 ] = Math . max ( k , t ) ; k = f [ 0 ] +
"," + f [ 1 ] ; void 0 === g [ k ] && ( g [ k ] = { index1 : f [ 0 ] , index2 : f [ 1 ] } ) } } for ( k in g ) m = g [ k ] , h = a . vertices [ m . index1 ] , b . push ( h . x , h . y , h . z ) , h = a . vertices [ m . index2 ] , b . push ( h . x , h . y , h . z ) } else if ( a && a . isBufferGeometry ) if ( h = new n , null !== a . index ) { l = a . attributes . position ; r = a . index ; var u = a . groups ; 0 === u . length && ( u = [ { start : 0 , count : r . count , materialIndex : 0 } ] ) ; a = 0 ; for ( e = u . length ; a < e ; ++ a ) for ( m = u [ a ] , c = m . start , d = m . count , m = c , d = c + d ; m < d ; m += 3 ) for ( c = 0 ; 3 > c ; c ++ ) k = r . getX ( m + c ) , t = r . getX ( m + ( c + 1 ) % 3 ) , f [ 0 ] = Math . min ( k , t ) , f [ 1 ] = Math . max ( k , t ) , k = f [ 0 ] + "," +
f [ 1 ] , void 0 === g [ k ] && ( g [ k ] = { index1 : f [ 0 ] , index2 : f [ 1 ] } ) ; for ( k in g ) m = g [ k ] , h . fromBufferAttribute ( l , m . index1 ) , b . push ( h . x , h . y , h . z ) , h . fromBufferAttribute ( l , m . index2 ) , b . push ( h . x , h . y , h . z ) } else for ( l = a . attributes . position , m = 0 , d = l . count / 3 ; m < d ; m ++ ) for ( c = 0 ; 3 > c ; c ++ ) g = 3 * m + c , h . fromBufferAttribute ( l , g ) , b . push ( h . x , h . y , h . z ) , g = 3 * m + ( c + 1 ) % 3 , h . fromBufferAttribute ( l , g ) , b . push ( h . x , h . y , h . z ) ; this . setAttribute ( "position" , new D ( b , 3 ) ) } function Sd ( a , b , c ) { O . call ( this ) ; this . type = "ParametricGeometry" ; this . parameters = { func : a , slices : b ,
stacks : c } ; this . fromBufferGeometry ( new Lc ( a , b , c ) ) ; this . mergeVertices ( ) } function Lc ( a , b , c ) { E . call ( this ) ; this . type = "ParametricBufferGeometry" ; this . parameters = { func : a , slices : b , stacks : c } ; var d = [ ] , e = [ ] , f = [ ] , g = [ ] , h = new n , l = new n , m = new n , r = new n , k = new n , t , u ; 3 > a . length && console . error ( "THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter." ) ; var q = b + 1 ; for ( t = 0 ; t <= c ; t ++ ) { var v = t / c ; for ( u = 0 ; u <= b ; u ++ ) { var A = u / b ; a ( A , v , l ) ; e . push ( l . x , l . y , l . z ) ; 0 <= A - 1E-5 ? ( a ( A - 1E-5 , v , m ) , r . subVectors ( l , m ) ) : ( a ( A +
1E-5 , v , m ) , r . subVectors ( m , l ) ) ; 0 <= v - 1E-5 ? ( a ( A , v - 1E-5 , m ) , k . subVectors ( l , m ) ) : ( a ( A , v + 1E-5 , m ) , k . subVectors ( m , l ) ) ; h . crossVectors ( r , k ) . normalize ( ) ; f . push ( h . x , h . y , h . z ) ; g . push ( A , v ) } } for ( t = 0 ; t < c ; t ++ ) for ( u = 0 ; u < b ; u ++ ) a = t * q + u + 1 , h = ( t + 1 ) * q + u + 1 , l = ( t + 1 ) * q + u , d . push ( t * q + u , a , l ) , d . push ( a , h , l ) ; this . setIndex ( d ) ; this . setAttribute ( "position" , new D ( e , 3 ) ) ; this . setAttribute ( "normal" , new D ( f , 3 ) ) ; this . setAttribute ( "uv" , new D ( g , 2 ) ) } function Td ( a , b , c , d ) { O . call ( this ) ; this . type = "PolyhedronGeometry" ; this . parameters = { vertices : a , indices : b ,
radius : c , detail : d } ; this . fromBufferGeometry ( new Ca ( a , b , c , d ) ) ; this . mergeVertices ( ) } function Ca ( a , b , c , d ) { function e ( a ) { h . push ( a . x , a . y , a . z ) } function f ( b , c ) { b *= 3 ; c . x = a [ b + 0 ] ; c . y = a [ b + 1 ] ; c . z = a [ b + 2 ] } function g ( a , b , c , d ) { 0 > d && 1 === a . x && ( l [ b ] = a . x - 1 ) ; 0 === c . x && 0 === c . z && ( l [ b ] = d / 2 / Math . PI + . 5 ) } E . call ( this ) ; this . type = "PolyhedronBufferGeometry" ; this . parameters = { vertices : a , indices : b , radius : c , detail : d } ; c = c || 1 ; d = d || 0 ; var h = [ ] , l = [ ] ; ( function ( a ) { for ( var c = new n , d = new n , g = new n , h = 0 ; h < b . length ; h += 3 ) { f ( b [ h + 0 ] , c ) ; f ( b [ h + 1 ] , d ) ;
f ( b [ h + 2 ] , g ) ; var l , m , k = c , w = d , x = g , I = Math . pow ( 2 , a ) , G = [ ] ; for ( m = 0 ; m <= I ; m ++ ) { G [ m ] = [ ] ; var z = k . clone ( ) . lerp ( x , m / I ) , B = w . clone ( ) . lerp ( x , m / I ) , y = I - m ; for ( l = 0 ; l <= y ; l ++ ) G [ m ] [ l ] = 0 === l && m === I ? z : z . clone ( ) . lerp ( B , l / y ) } for ( m = 0 ; m < I ; m ++ ) for ( l = 0 ; l < 2 * ( I - m ) - 1 ; l ++ ) k = Math . floor ( l / 2 ) , 0 === l % 2 ? ( e ( G [ m ] [ k + 1 ] ) , e ( G [ m + 1 ] [ k ] ) , e ( G [ m ] [ k ] ) ) : ( e ( G [ m ] [ k + 1 ] ) , e ( G [ m + 1 ] [ k + 1 ] ) , e ( G [ m + 1 ] [ k ] ) ) } } ) ( d ) ; ( function ( a ) { for ( var b = new n , c = 0 ; c < h . length ; c += 3 ) b . x = h [ c + 0 ] , b . y = h [ c + 1 ] , b . z = h [ c + 2 ] , b . normalize ( ) . multiplyScalar ( a ) , h [ c + 0 ] = b . x , h [ c + 1 ] = b . y , h [ c + 2 ] = b . z } ) ( c ) ;
( function ( ) { for ( var a = new n , b = 0 ; b < h . length ; b += 3 ) a . x = h [ b + 0 ] , a . y = h [ b + 1 ] , a . z = h [ b + 2 ] , l . push ( Math . atan2 ( a . z , - a . x ) / 2 / Math . PI + . 5 , 1 - ( Math . atan2 ( - a . y , Math . sqrt ( a . x * a . x + a . z * a . z ) ) / Math . PI + . 5 ) ) ; a = new n ; b = new n ; for ( var c = new n , d = new n , e = new B , f = new B , k = new B , A = 0 , w = 0 ; A < h . length ; A += 9 , w += 6 ) { a . set ( h [ A + 0 ] , h [ A + 1 ] , h [ A + 2 ] ) ; b . set ( h [ A + 3 ] , h [ A + 4 ] , h [ A + 5 ] ) ; c . set ( h [ A + 6 ] , h [ A + 7 ] , h [ A + 8 ] ) ; e . set ( l [ w + 0 ] , l [ w + 1 ] ) ; f . set ( l [ w + 2 ] , l [ w + 3 ] ) ; k . set ( l [ w + 4 ] , l [ w + 5 ] ) ; d . copy ( a ) . add ( b ) . add ( c ) . divideScalar ( 3 ) ; var x = Math . atan2 ( d . z , - d . x ) ; g ( e , w + 0 , a , x ) ;
g ( f , w + 2 , b , x ) ; g ( k , w + 4 , c , x ) } for ( a = 0 ; a < l . length ; a += 6 ) b = l [ a + 0 ] , c = l [ a + 2 ] , d = l [ a + 4 ] , e = Math . min ( b , c , d ) , . 9 < Math . max ( b , c , d ) && . 1 > e && ( . 2 > b && ( l [ a + 0 ] += 1 ) , . 2 > c && ( l [ a + 2 ] += 1 ) , . 2 > d && ( l [ a + 4 ] += 1 ) ) } ) ( ) ; this . setAttribute ( "position" , new D ( h , 3 ) ) ; this . setAttribute ( "normal" , new D ( h . slice ( ) , 3 ) ) ; this . setAttribute ( "uv" , new D ( l , 2 ) ) ; 0 === d ? this . computeVertexNormals ( ) : this . normalizeNormals ( ) } function Ud ( a , b ) { O . call ( this ) ; this . type = "TetrahedronGeometry" ; this . parameters = { radius : a , detail : b } ; this . fromBufferGeometry ( new Mc ( a , b ) ) ; this . mergeVertices ( ) }
function Mc ( a , b ) { Ca . call ( this , [ 1 , 1 , 1 , - 1 , - 1 , 1 , - 1 , 1 , - 1 , 1 , - 1 , - 1 ] , [ 2 , 1 , 0 , 0 , 3 , 2 , 1 , 3 , 0 , 2 , 3 , 1 ] , a , b ) ; this . type = "TetrahedronBufferGeometry" ; this . parameters = { radius : a , detail : b } } function Vd ( a , b ) { O . call ( this ) ; this . type = "OctahedronGeometry" ; this . parameters = { radius : a , detail : b } ; this . fromBufferGeometry ( new ac ( a , b ) ) ; this . mergeVertices ( ) } function ac ( a , b ) { Ca . call ( this , [ 1 , 0 , 0 , - 1 , 0 , 0 , 0 , 1 , 0 , 0 , - 1 , 0 , 0 , 0 , 1 , 0 , 0 , - 1 ] , [ 0 , 2 , 4 , 0 , 4 , 3 , 0 , 3 , 5 , 0 , 5 , 2 , 1 , 2 , 5 , 1 , 5 , 3 , 1 , 3 , 4 , 1 , 4 , 2 ] , a , b ) ; this . type = "OctahedronBufferGeometry" ; this . parameters =
{ radius : a , detail : b } } function Wd ( a , b ) { O . call ( this ) ; this . type = "IcosahedronGeometry" ; this . parameters = { radius : a , detail : b } ; this . fromBufferGeometry ( new Nc ( a , b ) ) ; this . mergeVertices ( ) } function Nc ( a , b ) { var c = ( 1 + Math . sqrt ( 5 ) ) / 2 ; Ca . call ( this , [ - 1 , c , 0 , 1 , c , 0 , - 1 , - c , 0 , 1 , - c , 0 , 0 , - 1 , c , 0 , 1 , c , 0 , - 1 , - c , 0 , 1 , - c , c , 0 , - 1 , c , 0 , 1 , - c , 0 , - 1 , - c , 0 , 1 ] , [ 0 , 11 , 5 , 0 , 5 , 1 , 0 , 1 , 7 , 0 , 7 , 10 , 0 , 10 , 11 , 1 , 5 , 9 , 5 , 11 , 4 , 11 , 10 , 2 , 10 , 7 , 6 , 7 , 1 , 8 , 3 , 9 , 4 , 3 , 4 , 2 , 3 , 2 , 6 , 3 , 6 , 8 , 3 , 8 , 9 , 4 , 9 , 5 , 2 , 4 , 11 , 6 , 2 , 10 , 8 , 6 , 7 , 9 , 8 , 1 ] , a , b ) ; this . type = "IcosahedronBufferGeometry" ; this . parameters =
{ radius : a , detail : b } } function Xd ( a , b ) { O . call ( this ) ; this . type = "DodecahedronGeometry" ; this . parameters = { radius : a , detail : b } ; this . fromBufferGeometry ( new Oc ( a , b ) ) ; this . mergeVertices ( ) } function Oc ( a , b ) { var c = ( 1 + Math . sqrt ( 5 ) ) / 2 , d = 1 / c ; Ca . call ( this , [ - 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 , - d , - c , 0 , - d , c , 0 , d , - c , 0 , d , c , - d , - c , 0 , - d , c , 0 , d , - c , 0 , d , c , 0 , - c , 0 , - d , c , 0 , - d , - c , 0 , d , c , 0 , d ] , [ 3 , 11 , 7 , 3 , 7 , 15 , 3 , 15 , 13 , 7 , 19 , 17 , 7 , 17 , 6 , 7 , 6 , 15 , 17 , 4 , 8 , 17 , 8 , 10 , 17 , 10 , 6 , 8 , 0 , 16 , 8 , 16 , 2 , 8 , 2 , 10 , 0 , 12 , 1 , 0 , 1 , 18 , 0 , 18 , 16 , 6 , 10 , 2 ,
6 , 2 , 13 , 6 , 13 , 15 , 2 , 16 , 18 , 2 , 18 , 3 , 2 , 3 , 13 , 18 , 1 , 9 , 18 , 9 , 11 , 18 , 11 , 3 , 4 , 14 , 12 , 4 , 12 , 0 , 4 , 0 , 8 , 11 , 9 , 5 , 11 , 5 , 19 , 11 , 19 , 7 , 19 , 5 , 14 , 19 , 14 , 4 , 19 , 4 , 17 , 1 , 12 , 14 , 1 , 14 , 5 , 1 , 5 , 9 ] , a , b ) ; this . type = "DodecahedronBufferGeometry" ; this . parameters = { radius : a , detail : b } } function Yd ( a , b , c , d , e , f ) { O . call ( this ) ; this . type = "TubeGeometry" ; this . parameters = { path : a , tubularSegments : b , radius : c , radialSegments : d , closed : e } ; void 0 !== f && console . warn ( "THREE.TubeGeometry: taper has been removed." ) ; a = new bc ( a , b , c , d , e ) ; this . tangents = a . tangents ; this . normals =
a . normals ; this . binormals = a . binormals ; this . fromBufferGeometry ( a ) ; this . mergeVertices ( ) } function bc ( a , b , c , d , e ) { function f ( e ) { r = a . getPointAt ( e / b , r ) ; var f = g . normals [ e ] ; e = g . binormals [ e ] ; for ( t = 0 ; t <= d ; t ++ ) { var m = t / d * Math . PI * 2 , k = Math . sin ( m ) ; m = - Math . cos ( m ) ; l . x = m * f . x + k * e . x ; l . y = m * f . y + k * e . y ; l . z = m * f . z + k * e . z ; l . normalize ( ) ; q . push ( l . x , l . y , l . z ) ; h . x = r . x + c * l . x ; h . y = r . y + c * l . y ; h . z = r . z + c * l . z ; u . push ( h . x , h . y , h . z ) } } E . call ( this ) ; this . type = "TubeBufferGeometry" ; this . parameters = { path : a , tubularSegments : b , radius : c , radialSegments : d ,
closed : e } ; b = b || 64 ; c = c || 1 ; d = d || 8 ; e = e || ! 1 ; var g = a . computeFrenetFrames ( b , e ) ; this . tangents = g . tangents ; this . normals = g . normals ; this . binormals = g . binormals ; var h = new n , l = new n , m = new B , r = new n , k , t , u = [ ] , q = [ ] , v = [ ] , A = [ ] ; for ( k = 0 ; k < b ; k ++ ) f ( k ) ; f ( ! 1 === e ? b : 0 ) ; for ( k = 0 ; k <= b ; k ++ ) for ( t = 0 ; t <= d ; t ++ ) m . x = k / b , m . y = t / d , v . push ( m . x , m . y ) ; ( function ( ) { for ( t = 1 ; t <= b ; t ++ ) for ( k = 1 ; k <= d ; k ++ ) { var a = ( d + 1 ) * t + ( k - 1 ) , c = ( d + 1 ) * t + k , e = ( d + 1 ) * ( t - 1 ) + k ; A . push ( ( d + 1 ) * ( t - 1 ) + ( k - 1 ) , a , e ) ; A . push ( a , c , e ) } } ) ( ) ; this . setIndex ( A ) ; this . setAttribute ( "position" , new D ( u ,
3 ) ) ; this . setAttribute ( "normal" , new D ( q , 3 ) ) ; this . setAttribute ( "uv" , new D ( v , 2 ) ) } function Zd ( a , b , c , d , e , f , g ) { O . call ( this ) ; this . type = "TorusKnotGeometry" ; this . parameters = { radius : a , tube : b , tubularSegments : c , radialSegments : d , p : e , q : f } ; void 0 !== g && console . warn ( "THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead." ) ; this . fromBufferGeometry ( new Pc ( a , b , c , d , e , f ) ) ; this . mergeVertices ( ) } function Pc ( a , b , c , d , e , f ) { function g ( a , b , c , d , e ) { var f = Math . sin ( a ) ; b = c / b * a ; c = Math . cos ( b ) ; e . x = d *
( 2 + c ) * . 5 * Math . cos ( a ) ; e . y = d * ( 2 + c ) * f * . 5 ; e . z = d * Math . sin ( b ) * . 5 } E . call ( this ) ; this . type = "TorusKnotBufferGeometry" ; this . parameters = { radius : a , tube : b , tubularSegments : c , radialSegments : d , p : e , q : f } ; a = a || 1 ; b = b || . 4 ; c = Math . floor ( c ) || 64 ; d = Math . floor ( d ) || 8 ; e = e || 2 ; f = f || 3 ; var h = [ ] , l = [ ] , m = [ ] , r = [ ] , k , t = new n , u = new n , q = new n , v = new n , A = new n , w = new n , x = new n ; for ( k = 0 ; k <= c ; ++ k ) { var I = k / c * e * Math . PI * 2 ; g ( I , e , f , a , q ) ; g ( I + . 01 , e , f , a , v ) ; w . subVectors ( v , q ) ; x . addVectors ( v , q ) ; A . crossVectors ( w , x ) ; x . crossVectors ( A , w ) ; A . normalize ( ) ; x . normalize ( ) ;
for ( I = 0 ; I <= d ; ++ I ) { var G = I / d * Math . PI * 2 , z = - b * Math . cos ( G ) ; G = b * Math . sin ( G ) ; t . x = q . x + ( z * x . x + G * A . x ) ; t . y = q . y + ( z * x . y + G * A . y ) ; t . z = q . z + ( z * x . z + G * A . z ) ; l . push ( t . x , t . y , t . z ) ; u . subVectors ( t , q ) . normalize ( ) ; m . push ( u . x , u . y , u . z ) ; r . push ( k / c ) ; r . push ( I / d ) } } for ( I = 1 ; I <= c ; I ++ ) for ( k = 1 ; k <= d ; k ++ ) a = ( d + 1 ) * I + ( k - 1 ) , b = ( d + 1 ) * I + k , e = ( d + 1 ) * ( I - 1 ) + k , h . push ( ( d + 1 ) * ( I - 1 ) + ( k - 1 ) , a , e ) , h . push ( a , b , e ) ; this . setIndex ( h ) ; this . setAttribute ( "position" , new D ( l , 3 ) ) ; this . setAttribute ( "normal" , new D ( m , 3 ) ) ; this . setAttribute ( "uv" , new D ( r , 2 ) ) } function $d ( a , b ,
c , d , e ) { O . call ( this ) ; this . type = "TorusGeometry" ; this . parameters = { radius : a , tube : b , radialSegments : c , tubularSegments : d , arc : e } ; this . fromBufferGeometry ( new Qc ( a , b , c , d , e ) ) ; this . mergeVertices ( ) } function Qc ( a , b , c , d , e ) { E . call ( this ) ; this . type = "TorusBufferGeometry" ; this . parameters = { radius : a , tube : b , radialSegments : c , tubularSegments : d , arc : e } ; a = a || 1 ; b = b || . 4 ; c = Math . floor ( c ) || 8 ; d = Math . floor ( d ) || 6 ; e = e || 2 * Math . PI ; var f = [ ] , g = [ ] , h = [ ] , l = [ ] , m = new n , r = new n , k = new n , t , u ; for ( t = 0 ; t <= c ; t ++ ) for ( u = 0 ; u <= d ; u ++ ) { var q = u / d * e , v = t / c *
Math . PI * 2 ; r . x = ( a + b * Math . cos ( v ) ) * Math . cos ( q ) ; r . y = ( a + b * Math . cos ( v ) ) * Math . sin ( q ) ; r . z = b * Math . sin ( v ) ; g . push ( r . x , r . y , r . z ) ; m . x = a * Math . cos ( q ) ; m . y = a * Math . sin ( q ) ; k . subVectors ( r , m ) . normalize ( ) ; h . push ( k . x , k . y , k . z ) ; l . push ( u / d ) ; l . push ( t / c ) } for ( t = 1 ; t <= c ; t ++ ) for ( u = 1 ; u <= d ; u ++ ) a = ( d + 1 ) * ( t - 1 ) + u - 1 , b = ( d + 1 ) * ( t - 1 ) + u , e = ( d + 1 ) * t + u , f . push ( ( d + 1 ) * t + u - 1 , a , e ) , f . push ( a , b , e ) ; this . setIndex ( f ) ; this . setAttribute ( "position" , new D ( g , 3 ) ) ; this . setAttribute ( "normal" , new D ( h , 3 ) ) ; this . setAttribute ( "uv" , new D ( l , 2 ) ) } function Vh ( a , b , c , d , e ) { for ( var f ,
g = 0 , h = b , l = c - d ; h < c ; h += d ) g += ( a [ l ] - a [ h ] ) * ( a [ h + 1 ] + a [ l + 1 ] ) , l = h ; if ( e === 0 < g ) for ( e = b ; e < c ; e += d ) f = Wh ( e , a [ e ] , a [ e + 1 ] , f ) ; else for ( e = c - d ; e >= b ; e -= d ) f = Wh ( e , a [ e ] , a [ e + 1 ] , f ) ; f && cc ( f , f . next ) && ( ae ( f ) , f = f . next ) ; return f } function be ( a , b ) { if ( ! a ) return a ; b || ( b = a ) ; do { var c = ! 1 ; if ( a . steiner || ! cc ( a , a . next ) && 0 !== ra ( a . prev , a , a . next ) ) a = a . next ; else { ae ( a ) ; a = b = a . prev ; if ( a === a . next ) break ; c = ! 0 } } while ( c || a !== b ) ; return b } function ce ( a , b , c , d , e , f , g ) { if ( a ) { if ( ! g && f ) { var h = a , l = h ; do null === l . z && ( l . z = ug ( l . x , l . y , d , e , f ) ) , l . prevZ = l . prev , l = l . nextZ =
l . next ; while ( l !== h ) ; l . prevZ . nextZ = null ; l . prevZ = null ; h = l ; var m , r , k , t , u = 1 ; do { l = h ; var q = h = null ; for ( r = 0 ; l ; ) { r ++ ; var n = l ; for ( m = k = 0 ; m < u && ( k ++ , n = n . nextZ , n ) ; m ++ ) ; for ( t = u ; 0 < k || 0 < t && n ; ) 0 !== k && ( 0 === t || ! n || l . z <= n . z ) ? ( m = l , l = l . nextZ , k -- ) : ( m = n , n = n . nextZ , t -- ) , q ? q . nextZ = m : h = m , m . prevZ = q , q = m ; l = n } q . nextZ = null ; u *= 2 } while ( 1 < r ) } for ( h = a ; a . prev !== a . next ; ) { l = a . prev ; n = a . next ; if ( f ) q = sk ( a , d , e , f ) ; else a : if ( q = a , r = q . prev , k = q , u = q . next , 0 <= ra ( r , k , u ) ) q = ! 1 ; else { for ( m = q . next . next ; m !== q . prev ; ) { if ( Rc ( r . x , r . y , k . x , k . y , u . x , u . y , m . x , m . y ) && 0 <=
ra ( m . prev , m , m . next ) ) { q = ! 1 ; break a } m = m . next } q = ! 0 } if ( q ) b . push ( l . i / c ) , b . push ( a . i / c ) , b . push ( n . i / c ) , ae ( a ) , h = a = n . next ; else if ( a = n , a === h ) { if ( ! g ) ce ( be ( a ) , b , c , d , e , f , 1 ) ; else if ( 1 === g ) { g = b ; h = c ; l = a ; do n = l . prev , q = l . next . next , ! cc ( n , q ) && Xh ( n , l , l . next , q ) && de ( n , q ) && de ( q , n ) && ( g . push ( n . i / h ) , g . push ( l . i / h ) , g . push ( q . i / h ) , ae ( l ) , ae ( l . next ) , l = a = q ) , l = l . next ; while ( l !== a ) ; a = l ; ce ( a , b , c , d , e , f , 2 ) } else if ( 2 === g ) a : { g = a ; do { for ( h = g . next . next ; h !== g . prev ; ) { if ( l = g . i !== h . i ) { l = g ; n = h ; if ( q = l . next . i !== n . i && l . prev . i !== n . i ) { b : { q = l ; do { if ( q . i !==
l . i && q . next . i !== l . i && q . i !== n . i && q . next . i !== n . i && Xh ( q , q . next , l , n ) ) { q = ! 0 ; break b } q = q . next } while ( q !== l ) ; q = ! 1 } q = ! q } if ( q = q && de ( l , n ) && de ( n , l ) ) { q = l ; r = ! 1 ; k = ( l . x + n . x ) / 2 ; n = ( l . y + n . y ) / 2 ; do q . y > n !== q . next . y > n && q . next . y !== q . y && k < ( q . next . x - q . x ) * ( n - q . y ) / ( q . next . y - q . y ) + q . x && ( r = ! r ) , q = q . next ; while ( q !== l ) ; q = r } l = q } if ( l ) { a = Yh ( g , h ) ; g = be ( g , g . next ) ; a = be ( a , a . next ) ; ce ( g , b , c , d , e , f ) ; ce ( a , b , c , d , e , f ) ; break a } h = h . next } g = g . next } while ( g !== a ) } break } } } } function sk ( a , b , c , d ) { var e = a . prev , f = a . next ; if ( 0 <= ra ( e , a , f ) ) return ! 1 ; var g = e . x > a . x ?
e . x > f . x ? e . x : f . x : a . x > f . x ? a . x : f . x , h = e . y > a . y ? e . y > f . y ? e . y : f . y : a . y > f . y ? a . y : f . y , l = ug ( e . x < a . x ? e . x < f . x ? e . x : f . x : a . x < f . x ? a . x : f . x , e . y < a . y ? e . y < f . y ? e . y : f . y : a . y < f . y ? a . y : f . y , b , c , d ) ; b = ug ( g , h , b , c , d ) ; c = a . prevZ ; for ( d = a . nextZ ; c && c . z >= l && d && d . z <= b ; ) { if ( c !== a . prev && c !== a . next && Rc ( e . x , e . y , a . x , a . y , f . x , f . y , c . x , c . y ) && 0 <= ra ( c . prev , c , c . next ) ) return ! 1 ; c = c . prevZ ; if ( d !== a . prev && d !== a . next && Rc ( e . x , e . y , a . x , a . y , f . x , f . y , d . x , d . y ) && 0 <= ra ( d . prev , d , d . next ) ) return ! 1 ; d = d . nextZ } for ( ; c && c . z >= l ; ) { if ( c !== a . prev && c !== a . next && Rc ( e . x , e . y , a . x , a . y ,
f . x , f . y , c . x , c . y ) && 0 <= ra ( c . prev , c , c . next ) ) return ! 1 ; c = c . prevZ } for ( ; d && d . z <= b ; ) { if ( d !== a . prev && d !== a . next && Rc ( e . x , e . y , a . x , a . y , f . x , f . y , d . x , d . y ) && 0 <= ra ( d . prev , d , d . next ) ) return ! 1 ; d = d . nextZ } return ! 0 } function tk ( a , b ) { return a . x - b . x } function uk ( a , b ) { var c = b , d = a . x , e = a . y , f = - Infinity ; do { if ( e <= c . y && e >= c . next . y && c . next . y !== c . y ) { var g = c . x + ( e - c . y ) * ( c . next . x - c . x ) / ( c . next . y - c . y ) ; if ( g <= d && g > f ) { f = g ; if ( g === d ) { if ( e === c . y ) return c ; if ( e === c . next . y ) return c . next } var h = c . x < c . next . x ? c : c . next } } c = c . next } while ( c !== b ) ; if ( ! h ) return null ;
if ( d === f ) return h . prev ; b = h ; g = h . x ; var l = h . y , m = Infinity ; for ( c = h . next ; c !== b ; ) { if ( d >= c . x && c . x >= g && d !== c . x && Rc ( e < l ? d : f , e , g , l , e < l ? f : d , e , c . x , c . y ) ) { var k = Math . abs ( e - c . y ) / ( d - c . x ) ; ( k < m || k === m && c . x > h . x ) && de ( c , a ) && ( h = c , m = k ) } c = c . next } return h } function ug ( a , b , c , d , e ) { a = 32767 * ( a - c ) * e ; b = 32767 * ( b - d ) * e ; a = ( a | a << 8 ) & 16711935 ; a = ( a | a << 4 ) & 252645135 ; a = ( a | a << 2 ) & 858993459 ; b = ( b | b << 8 ) & 16711935 ; b = ( b | b << 4 ) & 252645135 ; b = ( b | b << 2 ) & 858993459 ; return ( a | a << 1 ) & 1431655765 | ( ( b | b << 1 ) & 1431655765 ) << 1 } function vk ( a ) { var b = a , c = a ; do { if ( b . x < c . x ||
b . x === c . x && b . y < c . y ) c = b ; b = b . next } while ( b !== a ) ; return c } function Rc ( a , b , c , d , e , f , g , h ) { return 0 <= ( e - g ) * ( b - h ) - ( a - g ) * ( f - h ) && 0 <= ( a - g ) * ( d - h ) - ( c - g ) * ( b - h ) && 0 <= ( c - g ) * ( f - h ) - ( e - g ) * ( d - h ) } function ra ( a , b , c ) { return ( b . y - a . y ) * ( c . x - b . x ) - ( b . x - a . x ) * ( c . y - b . y ) } function cc ( a , b ) { return a . x === b . x && a . y === b . y } function Xh ( a , b , c , d ) { return cc ( a , c ) && cc ( b , d ) || cc ( a , d ) && cc ( c , b ) ? ! 0 : 0 < ra ( a , b , c ) !== 0 < ra ( a , b , d ) && 0 < ra ( c , d , a ) !== 0 < ra ( c , d , b ) } function de ( a , b ) { return 0 > ra ( a . prev , a , a . next ) ? 0 <= ra ( a , b , a . next ) && 0 <= ra ( a , a . prev , b ) : 0 > ra ( a , b , a . prev ) ||
0 > ra ( a , a . next , b ) } function Yh ( a , b ) { var c = new vg ( a . i , a . x , a . y ) , d = new vg ( b . i , b . x , b . y ) , e = a . next , f = b . prev ; a . next = b ; b . prev = a ; c . next = e ; e . prev = c ; d . next = c ; c . prev = d ; f . next = d ; d . prev = f ; return d } function Wh ( a , b , c , d ) { a = new vg ( a , b , c ) ; d ? ( a . next = d . next , a . prev = d , d . next . prev = a , d . next = a ) : ( a . prev = a , a . next = a ) ; return a } function ae ( a ) { a . next . prev = a . prev ; a . prev . next = a . next ; a . prevZ && ( a . prevZ . nextZ = a . nextZ ) ; a . nextZ && ( a . nextZ . prevZ = a . prevZ ) } function vg ( a , b , c ) { this . i = a ; this . x = b ; this . y = c ; this . nextZ = this . prevZ = this . z = this . next =
this . prev = null ; this . steiner = ! 1 } function Zh ( a ) { var b = a . length ; 2 < b && a [ b - 1 ] . equals ( a [ 0 ] ) && a . pop ( ) } function $h ( a , b ) { for ( var c = 0 ; c < b . length ; c ++ ) a . push ( b [ c ] . x ) , a . push ( b [ c ] . y ) } function dc ( a , b ) { O . call ( this ) ; this . type = "ExtrudeGeometry" ; this . parameters = { shapes : a , options : b } ; this . fromBufferGeometry ( new eb ( a , b ) ) ; this . mergeVertices ( ) } function eb ( a , b ) { function c ( a ) { function c ( a , b , c ) { b || console . error ( "THREE.ExtrudeGeometry: vec does not exist" ) ; return b . clone ( ) . multiplyScalar ( c ) . add ( a ) } function g ( a , b , c ) { var d = a . x -
b . x ; var e = a . y - b . y ; var f = c . x - a . x ; var g = c . y - a . y , h = d * d + e * e ; if ( Math . abs ( d * g - e * f ) > Number . EPSILON ) { var l = Math . sqrt ( h ) , m = Math . sqrt ( f * f + g * g ) ; h = b . x - e / l ; b = b . y + d / l ; g = ( ( c . x - g / m - h ) * g - ( c . y + f / m - b ) * f ) / ( d * g - e * f ) ; f = h + d * g - a . x ; d = b + e * g - a . y ; e = f * f + d * d ; if ( 2 >= e ) return new B ( f , d ) ; e = Math . sqrt ( e / 2 ) } else a = ! 1 , d > Number . EPSILON ? f > Number . EPSILON && ( a = ! 0 ) : d < - Number . EPSILON ? f < - Number . EPSILON && ( a = ! 0 ) : Math . sign ( e ) === Math . sign ( g ) && ( a = ! 0 ) , a ? ( f = - e , e = Math . sqrt ( h ) ) : ( f = d , d = e , e = Math . sqrt ( h / 2 ) ) ; return new B ( f / e , d / e ) } function h ( a , b ) { for ( M = a . length ; 0 <=
-- M ; ) { var c = M ; var f = M - 1 ; 0 > f && ( f = a . length - 1 ) ; var g , h = x + 2 * E ; for ( g = 0 ; g < h ; g ++ ) { var l = Y * g , m = Y * ( g + 1 ) , k = b + f + l , r = b + f + m ; m = b + c + m ; q ( b + c + l ) ; q ( k ) ; q ( m ) ; q ( k ) ; q ( r ) ; q ( m ) ; l = e . length / 3 ; l = L . generateSideWallUV ( d , e , l - 6 , l - 3 , l - 2 , l - 1 ) ; v ( l [ 0 ] ) ; v ( l [ 1 ] ) ; v ( l [ 3 ] ) ; v ( l [ 1 ] ) ; v ( l [ 2 ] ) ; v ( l [ 3 ] ) } } } function l ( a , b , c ) { A . push ( a ) ; A . push ( b ) ; A . push ( c ) } function k ( a , b , c ) { q ( a ) ; q ( b ) ; q ( c ) ; a = e . length / 3 ; a = L . generateTopUV ( d , e , a - 3 , a - 2 , a - 1 ) ; v ( a [ 0 ] ) ; v ( a [ 1 ] ) ; v ( a [ 2 ] ) } function q ( a ) { e . push ( A [ 3 * a ] ) ; e . push ( A [ 3 * a + 1 ] ) ; e . push ( A [ 3 * a + 2 ] ) } function v ( a ) { f . push ( a . x ) ;
f . push ( a . y ) } var A = [ ] , w = void 0 !== b . curveSegments ? b . curveSegments : 12 , x = void 0 !== b . steps ? b . steps : 1 , I = void 0 !== b . depth ? b . depth : 100 , G = void 0 !== b . bevelEnabled ? b . bevelEnabled : ! 0 , z = void 0 !== b . bevelThickness ? b . bevelThickness : 6 , y = void 0 !== b . bevelSize ? b . bevelSize : z - 2 , D = void 0 !== b . bevelOffset ? b . bevelOffset : 0 , E = void 0 !== b . bevelSegments ? b . bevelSegments : 3 , C = b . extrudePath , L = void 0 !== b . UVGenerator ? b . UVGenerator : wk ; void 0 !== b . amount && ( console . warn ( "THREE.ExtrudeBufferGeometry: amount has been renamed to depth." ) , I =
b . amount ) ; var F = ! 1 ; if ( C ) { var H = C . getSpacedPoints ( x ) ; F = ! 0 ; G = ! 1 ; var K = C . computeFrenetFrames ( x , ! 1 ) ; var N = new n ; var O = new n ; var S = new n } G || ( D = y = z = E = 0 ) ; var R ; w = a . extractPoints ( w ) ; a = w . shape ; var Q = w . holes ; if ( ! qb . isClockWise ( a ) ) { a = a . reverse ( ) ; var ea = 0 ; for ( R = Q . length ; ea < R ; ea ++ ) { var P = Q [ ea ] ; qb . isClockWise ( P ) && ( Q [ ea ] = P . reverse ( ) ) } } var Z = qb . triangulateShape ( a , Q ) , X = a ; ea = 0 ; for ( R = Q . length ; ea < R ; ea ++ ) P = Q [ ea ] , a = a . concat ( P ) ; var T , Y = a . length , V , ca = Z . length ; w = [ ] ; var M = 0 ; var W = X . length ; var ha = W - 1 ; for ( T = M + 1 ; M < W ; M ++ , ha ++ ,
T ++ ) ha === W && ( ha = 0 ) , T === W && ( T = 0 ) , w [ M ] = g ( X [ M ] , X [ ha ] , X [ T ] ) ; C = [ ] ; var fa = w . concat ( ) ; ea = 0 ; for ( R = Q . length ; ea < R ; ea ++ ) { P = Q [ ea ] ; var ba = [ ] ; M = 0 ; W = P . length ; ha = W - 1 ; for ( T = M + 1 ; M < W ; M ++ , ha ++ , T ++ ) ha === W && ( ha = 0 ) , T === W && ( T = 0 ) , ba [ M ] = g ( P [ M ] , P [ ha ] , P [ T ] ) ; C . push ( ba ) ; fa = fa . concat ( ba ) } for ( ha = 0 ; ha < E ; ha ++ ) { W = ha / E ; var da = z * Math . cos ( W * Math . PI / 2 ) ; T = y * Math . sin ( W * Math . PI / 2 ) + D ; M = 0 ; for ( W = X . length ; M < W ; M ++ ) { var U = c ( X [ M ] , w [ M ] , T ) ; l ( U . x , U . y , - da ) } ea = 0 ; for ( R = Q . length ; ea < R ; ea ++ ) for ( P = Q [ ea ] , ba = C [ ea ] , M = 0 , W = P . length ; M < W ; M ++ ) U = c ( P [ M ] , ba [ M ] , T ) , l ( U . x ,
U . y , - da ) } T = y + D ; for ( M = 0 ; M < Y ; M ++ ) U = G ? c ( a [ M ] , fa [ M ] , T ) : a [ M ] , F ? ( O . copy ( K . normals [ 0 ] ) . multiplyScalar ( U . x ) , N . copy ( K . binormals [ 0 ] ) . multiplyScalar ( U . y ) , S . copy ( H [ 0 ] ) . add ( O ) . add ( N ) , l ( S . x , S . y , S . z ) ) : l ( U . x , U . y , 0 ) ; for ( W = 1 ; W <= x ; W ++ ) for ( M = 0 ; M < Y ; M ++ ) U = G ? c ( a [ M ] , fa [ M ] , T ) : a [ M ] , F ? ( O . copy ( K . normals [ W ] ) . multiplyScalar ( U . x ) , N . copy ( K . binormals [ W ] ) . multiplyScalar ( U . y ) , S . copy ( H [ W ] ) . add ( O ) . add ( N ) , l ( S . x , S . y , S . z ) ) : l ( U . x , U . y , I / x * W ) ; for ( ha = E - 1 ; 0 <= ha ; ha -- ) { W = ha / E ; da = z * Math . cos ( W * Math . PI / 2 ) ; T = y * Math . sin ( W * Math . PI / 2 ) + D ; M = 0 ; for ( W = X . length ; M <
W ; M ++ ) U = c ( X [ M ] , w [ M ] , T ) , l ( U . x , U . y , I + da ) ; ea = 0 ; for ( R = Q . length ; ea < R ; ea ++ ) for ( P = Q [ ea ] , ba = C [ ea ] , M = 0 , W = P . length ; M < W ; M ++ ) U = c ( P [ M ] , ba [ M ] , T ) , F ? l ( U . x , U . y + H [ x - 1 ] . y , H [ x - 1 ] . x + da ) : l ( U . x , U . y , I + da ) } ( function ( ) { var a = e . length / 3 ; if ( G ) { var b = 0 * Y ; for ( M = 0 ; M < ca ; M ++ ) V = Z [ M ] , k ( V [ 2 ] + b , V [ 1 ] + b , V [ 0 ] + b ) ; b = Y * ( x + 2 * E ) ; for ( M = 0 ; M < ca ; M ++ ) V = Z [ M ] , k ( V [ 0 ] + b , V [ 1 ] + b , V [ 2 ] + b ) } else { for ( M = 0 ; M < ca ; M ++ ) V = Z [ M ] , k ( V [ 2 ] , V [ 1 ] , V [ 0 ] ) ; for ( M = 0 ; M < ca ; M ++ ) V = Z [ M ] , k ( V [ 0 ] + Y * x , V [ 1 ] + Y * x , V [ 2 ] + Y * x ) } d . addGroup ( a , e . length / 3 - a , 0 ) } ) ( ) ; ( function ( ) { var a = e . length / 3 , b = 0 ;
h ( X , b ) ; b += X . length ; ea = 0 ; for ( R = Q . length ; ea < R ; ea ++ ) P = Q [ ea ] , h ( P , b ) , b += P . length ; d . addGroup ( a , e . length / 3 - a , 1 ) } ) ( ) } E . call ( this ) ; this . type = "ExtrudeBufferGeometry" ; this . parameters = { shapes : a , options : b } ; a = Array . isArray ( a ) ? a : [ a ] ; for ( var d = this , e = [ ] , f = [ ] , g = 0 , h = a . length ; g < h ; g ++ ) c ( a [ g ] ) ; this . setAttribute ( "position" , new D ( e , 3 ) ) ; this . setAttribute ( "uv" , new D ( f , 2 ) ) ; this . computeVertexNormals ( ) } function ai ( a , b , c ) { c . shapes = [ ] ; if ( Array . isArray ( a ) ) for ( var d = 0 , e = a . length ; d < e ; d ++ ) c . shapes . push ( a [ d ] . uuid ) ; else c . shapes . push ( a . uuid ) ;
void 0 !== b . extrudePath && ( c . options . extrudePath = b . extrudePath . toJSON ( ) ) ; return c } function ee ( a , b ) { O . call ( this ) ; this . type = "TextGeometry" ; this . parameters = { text : a , parameters : b } ; this . fromBufferGeometry ( new Sc ( a , b ) ) ; this . mergeVertices ( ) } function Sc ( a , b ) { b = b || { } ; var c = b . font ; if ( ! c || ! c . isFont ) return console . error ( "THREE.TextGeometry: font parameter is not an instance of THREE.Font." ) , new O ; a = c . generateShapes ( a , b . size ) ; b . depth = void 0 !== b . height ? b . height : 50 ; void 0 === b . bevelThickness && ( b . bevelThickness = 10 ) ;
void 0 === b . bevelSize && ( b . bevelSize = 8 ) ; void 0 === b . bevelEnabled && ( b . bevelEnabled = ! 1 ) ; eb . call ( this , a , b ) ; this . type = "TextBufferGeometry" } function fe ( a , b , c , d , e , f , g ) { O . call ( this ) ; this . type = "SphereGeometry" ; this . parameters = { radius : a , widthSegments : b , heightSegments : c , phiStart : d , phiLength : e , thetaStart : f , thetaLength : g } ; this . fromBufferGeometry ( new Hb ( a , b , c , d , e , f , g ) ) ; this . mergeVertices ( ) } function Hb ( a , b , c , d , e , f , g ) { E . call ( this ) ; this . type = "SphereBufferGeometry" ; this . parameters = { radius : a , widthSegments : b , heightSegments : c ,
phiStart : d , phiLength : e , thetaStart : f , thetaLength : g } ; a = a || 1 ; b = Math . max ( 3 , Math . floor ( b ) || 8 ) ; c = Math . max ( 2 , Math . floor ( c ) || 6 ) ; d = void 0 !== d ? d : 0 ; e = void 0 !== e ? e : 2 * Math . PI ; f = void 0 !== f ? f : 0 ; g = void 0 !== g ? g : Math . PI ; var h = Math . min ( f + g , Math . PI ) , l , m , k = 0 , p = [ ] , t = new n , u = new n , q = [ ] , v = [ ] , A = [ ] , w = [ ] ; for ( m = 0 ; m <= c ; m ++ ) { var x = [ ] , I = m / c , G = 0 ; 0 == m && 0 == f ? G = . 5 / b : m == c && h == Math . PI && ( G = - . 5 / b ) ; for ( l = 0 ; l <= b ; l ++ ) { var z = l / b ; t . x = - a * Math . cos ( d + z * e ) * Math . sin ( f + I * g ) ; t . y = a * Math . cos ( f + I * g ) ; t . z = a * Math . sin ( d + z * e ) * Math . sin ( f + I * g ) ; v . push ( t . x , t . y ,
t . z ) ; u . copy ( t ) . normalize ( ) ; A . push ( u . x , u . y , u . z ) ; w . push ( z + G , 1 - I ) ; x . push ( k ++ ) } p . push ( x ) } for ( m = 0 ; m < c ; m ++ ) for ( l = 0 ; l < b ; l ++ ) a = p [ m ] [ l + 1 ] , d = p [ m ] [ l ] , e = p [ m + 1 ] [ l ] , g = p [ m + 1 ] [ l + 1 ] , ( 0 !== m || 0 < f ) && q . push ( a , d , g ) , ( m !== c - 1 || h < Math . PI ) && q . push ( d , e , g ) ; this . setIndex ( q ) ; this . setAttribute ( "position" , new D ( v , 3 ) ) ; this . setAttribute ( "normal" , new D ( A , 3 ) ) ; this . setAttribute ( "uv" , new D ( w , 2 ) ) } function ge ( a , b , c , d , e , f ) { O . call ( this ) ; this . type = "RingGeometry" ; this . parameters = { innerRadius : a , outerRadius : b , thetaSegments : c , phiSegments : d , thetaStart : e ,
thetaLength : f } ; this . fromBufferGeometry ( new Tc ( a , b , c , d , e , f ) ) ; this . mergeVertices ( ) } function Tc ( a , b , c , d , e , f ) { E . call ( this ) ; this . type = "RingBufferGeometry" ; this . parameters = { innerRadius : a , outerRadius : b , thetaSegments : c , phiSegments : d , thetaStart : e , thetaLength : f } ; a = a || . 5 ; b = b || 1 ; e = void 0 !== e ? e : 0 ; f = void 0 !== f ? f : 2 * Math . PI ; c = void 0 !== c ? Math . max ( 3 , c ) : 8 ; d = void 0 !== d ? Math . max ( 1 , d ) : 1 ; var g = [ ] , h = [ ] , l = [ ] , m = [ ] , k = a , p = ( b - a ) / d , t = new n , u = new B , q , v ; for ( q = 0 ; q <= d ; q ++ ) { for ( v = 0 ; v <= c ; v ++ ) a = e + v / c * f , t . x = k * Math . cos ( a ) , t . y = k * Math . sin ( a ) ,
h . push ( t . x , t . y , t . z ) , l . push ( 0 , 0 , 1 ) , u . x = ( t . x / b + 1 ) / 2 , u . y = ( t . y / b + 1 ) / 2 , m . push ( u . x , u . y ) ; k += p } for ( q = 0 ; q < d ; q ++ ) for ( b = q * ( c + 1 ) , v = 0 ; v < c ; v ++ ) a = v + b , e = a + c + 1 , f = a + c + 2 , k = a + 1 , g . push ( a , e , k ) , g . push ( e , f , k ) ; this . setIndex ( g ) ; this . setAttribute ( "position" , new D ( h , 3 ) ) ; this . setAttribute ( "normal" , new D ( l , 3 ) ) ; this . setAttribute ( "uv" , new D ( m , 2 ) ) } function he ( a , b , c , d ) { O . call ( this ) ; this . type = "LatheGeometry" ; this . parameters = { points : a , segments : b , phiStart : c , phiLength : d } ; this . fromBufferGeometry ( new Uc ( a , b , c , d ) ) ; this . mergeVertices ( ) } function Uc ( a ,
b , c , d ) { E . call ( this ) ; this . type = "LatheBufferGeometry" ; this . parameters = { points : a , segments : b , phiStart : c , phiLength : d } ; b = Math . floor ( b ) || 12 ; c = c || 0 ; d = d || 2 * Math . PI ; d = R . clamp ( d , 0 , 2 * Math . PI ) ; var e = [ ] , f = [ ] , g = [ ] , h = 1 / b , l = new n , m = new B , k ; for ( k = 0 ; k <= b ; k ++ ) { var p = c + k * h * d ; var t = Math . sin ( p ) , u = Math . cos ( p ) ; for ( p = 0 ; p <= a . length - 1 ; p ++ ) l . x = a [ p ] . x * t , l . y = a [ p ] . y , l . z = a [ p ] . x * u , f . push ( l . x , l . y , l . z ) , m . x = k / b , m . y = p / ( a . length - 1 ) , g . push ( m . x , m . y ) } for ( k = 0 ; k < b ; k ++ ) for ( p = 0 ; p < a . length - 1 ; p ++ ) c = p + k * a . length , h = c + a . length , l = c + a . length + 1 , m = c +
1 , e . push ( c , h , m ) , e . push ( h , l , m ) ; this . setIndex ( e ) ; this . setAttribute ( "position" , new D ( f , 3 ) ) ; this . setAttribute ( "uv" , new D ( g , 2 ) ) ; this . computeVertexNormals ( ) ; if ( d === 2 * Math . PI ) for ( d = this . attributes . normal . array , e = new n , f = new n , g = new n , c = b * a . length * 3 , p = k = 0 ; k < a . length ; k ++ , p += 3 ) e . x = d [ p + 0 ] , e . y = d [ p + 1 ] , e . z = d [ p + 2 ] , f . x = d [ c + p + 0 ] , f . y = d [ c + p + 1 ] , f . z = d [ c + p + 2 ] , g . addVectors ( e , f ) . normalize ( ) , d [ p + 0 ] = d [ c + p + 0 ] = g . x , d [ p + 1 ] = d [ c + p + 1 ] = g . y , d [ p + 2 ] = d [ c + p + 2 ] = g . z } function ec ( a , b ) { O . call ( this ) ; this . type = "ShapeGeometry" ; "object" === typeof b &&
( console . warn ( "THREE.ShapeGeometry: Options parameter has been removed." ) , b = b . curveSegments ) ; this . parameters = { shapes : a , curveSegments : b } ; this . fromBufferGeometry ( new fc ( a , b ) ) ; this . mergeVertices ( ) } function fc ( a , b ) { function c ( a ) { var c , h = e . length / 3 ; a = a . extractPoints ( b ) ; var m = a . shape , k = a . holes ; ! 1 === qb . isClockWise ( m ) && ( m = m . reverse ( ) ) ; a = 0 ; for ( c = k . length ; a < c ; a ++ ) { var r = k [ a ] ; ! 0 === qb . isClockWise ( r ) && ( k [ a ] = r . reverse ( ) ) } var n = qb . triangulateShape ( m , k ) ; a = 0 ; for ( c = k . length ; a < c ; a ++ ) r = k [ a ] , m = m . concat ( r ) ; a = 0 ; for ( c = m . length ; a <
c ; a ++ ) r = m [ a ] , e . push ( r . x , r . y , 0 ) , f . push ( 0 , 0 , 1 ) , g . push ( r . x , r . y ) ; a = 0 ; for ( c = n . length ; a < c ; a ++ ) m = n [ a ] , d . push ( m [ 0 ] + h , m [ 1 ] + h , m [ 2 ] + h ) , l += 3 } E . call ( this ) ; this . type = "ShapeBufferGeometry" ; this . parameters = { shapes : a , curveSegments : b } ; b = b || 12 ; var d = [ ] , e = [ ] , f = [ ] , g = [ ] , h = 0 , l = 0 ; if ( ! 1 === Array . isArray ( a ) ) c ( a ) ; else for ( var m = 0 ; m < a . length ; m ++ ) c ( a [ m ] ) , this . addGroup ( h , l , m ) , h += l , l = 0 ; this . setIndex ( d ) ; this . setAttribute ( "position" , new D ( e , 3 ) ) ; this . setAttribute ( "normal" , new D ( f , 3 ) ) ; this . setAttribute ( "uv" , new D ( g , 2 ) ) } function bi ( a ,
b ) { b . shapes = [ ] ; if ( Array . isArray ( a ) ) for ( var c = 0 , d = a . length ; c < d ; c ++ ) b . shapes . push ( a [ c ] . uuid ) ; else b . shapes . push ( a . uuid ) ; return b } function Vc ( a , b ) { E . call ( this ) ; this . type = "EdgesGeometry" ; this . parameters = { thresholdAngle : b } ; var c = [ ] ; b = Math . cos ( R . DEG2RAD * ( void 0 !== b ? b : 1 ) ) ; var d = [ 0 , 0 ] , e = { } , f = [ "a" , "b" , "c" ] ; if ( a . isBufferGeometry ) { var g = new O ; g . fromBufferGeometry ( a ) } else g = a . clone ( ) ; g . mergeVertices ( ) ; g . computeFaceNormals ( ) ; a = g . vertices ; g = g . faces ; for ( var h = 0 , l = g . length ; h < l ; h ++ ) for ( var m = g [ h ] , k = 0 ; 3 > k ; k ++ ) { var p =
m [ f [ k ] ] ; var t = m [ f [ ( k + 1 ) % 3 ] ] ; d [ 0 ] = Math . min ( p , t ) ; d [ 1 ] = Math . max ( p , t ) ; p = d [ 0 ] + "," + d [ 1 ] ; void 0 === e [ p ] ? e [ p ] = { index1 : d [ 0 ] , index2 : d [ 1 ] , face1 : h , face2 : void 0 } : e [ p ] . face2 = h } for ( p in e ) if ( d = e [ p ] , void 0 === d . face2 || g [ d . face1 ] . normal . dot ( g [ d . face2 ] . normal ) <= b ) f = a [ d . index1 ] , c . push ( f . x , f . y , f . z ) , f = a [ d . index2 ] , c . push ( f . x , f . y , f . z ) ; this . setAttribute ( "position" , new D ( c , 3 ) ) } function gc ( a , b , c , d , e , f , g , h ) { O . call ( this ) ; this . type = "CylinderGeometry" ; this . parameters = { radiusTop : a , radiusBottom : b , height : c , radialSegments : d , heightSegments : e ,
openEnded : f , thetaStart : g , thetaLength : h } ; this . fromBufferGeometry ( new rb ( a , b , c , d , e , f , g , h ) ) ; this . mergeVertices ( ) } function rb ( a , b , c , d , e , f , g , h ) { function l ( c ) { var e , f = new B , l = new n , r = 0 , v = ! 0 === c ? a : b , x = ! 0 === c ? 1 : - 1 ; var y = q ; for ( e = 1 ; e <= d ; e ++ ) p . push ( 0 , A * x , 0 ) , t . push ( 0 , x , 0 ) , u . push ( . 5 , . 5 ) , q ++ ; var D = q ; for ( e = 0 ; e <= d ; e ++ ) { var E = e / d * h + g , C = Math . cos ( E ) ; E = Math . sin ( E ) ; l . x = v * E ; l . y = A * x ; l . z = v * C ; p . push ( l . x , l . y , l . z ) ; t . push ( 0 , x , 0 ) ; f . x = . 5 * C + . 5 ; f . y = . 5 * E * x + . 5 ; u . push ( f . x , f . y ) ; q ++ } for ( e = 0 ; e < d ; e ++ ) f = y + e , l = D + e , ! 0 === c ? k . push ( l , l + 1 , f ) :
k . push ( l + 1 , l , f ) , r += 3 ; m . addGroup ( w , r , ! 0 === c ? 1 : 2 ) ; w += r } E . call ( this ) ; this . type = "CylinderBufferGeometry" ; this . parameters = { radiusTop : a , radiusBottom : b , height : c , radialSegments : d , heightSegments : e , openEnded : f , thetaStart : g , thetaLength : h } ; var m = this ; a = void 0 !== a ? a : 1 ; b = void 0 !== b ? b : 1 ; c = c || 1 ; d = Math . floor ( d ) || 8 ; e = Math . floor ( e ) || 1 ; f = void 0 !== f ? f : ! 1 ; g = void 0 !== g ? g : 0 ; h = void 0 !== h ? h : 2 * Math . PI ; var k = [ ] , p = [ ] , t = [ ] , u = [ ] , q = 0 , v = [ ] , A = c / 2 , w = 0 ; ( function ( ) { var f , l , r = new n , z = new n , B = 0 , y = ( b - a ) / c ; for ( l = 0 ; l <= e ; l ++ ) { var D = [ ] , E = l /
e , C = E * ( b - a ) + a ; for ( f = 0 ; f <= d ; f ++ ) { var F = f / d , H = F * h + g , K = Math . sin ( H ) ; H = Math . cos ( H ) ; z . x = C * K ; z . y = - E * c + A ; z . z = C * H ; p . push ( z . x , z . y , z . z ) ; r . set ( K , y , H ) . normalize ( ) ; t . push ( r . x , r . y , r . z ) ; u . push ( F , 1 - E ) ; D . push ( q ++ ) } v . push ( D ) } for ( f = 0 ; f < d ; f ++ ) for ( l = 0 ; l < e ; l ++ ) r = v [ l + 1 ] [ f ] , z = v [ l + 1 ] [ f + 1 ] , y = v [ l ] [ f + 1 ] , k . push ( v [ l ] [ f ] , r , y ) , k . push ( r , z , y ) , B += 6 ; m . addGroup ( w , B , 0 ) ; w += B } ) ( ) ; ! 1 === f && ( 0 < a && l ( ! 0 ) , 0 < b && l ( ! 1 ) ) ; this . setIndex ( k ) ; this . setAttribute ( "position" , new D ( p , 3 ) ) ; this . setAttribute ( "normal" , new D ( t , 3 ) ) ; this . setAttribute ( "uv" , new D ( u ,
2 ) ) } function ie ( a , b , c , d , e , f , g ) { gc . call ( this , 0 , a , b , c , d , e , f , g ) ; this . type = "ConeGeometry" ; this . parameters = { radius : a , height : b , radialSegments : c , heightSegments : d , openEnded : e , thetaStart : f , thetaLength : g } } function je ( a , b , c , d , e , f , g ) { rb . call ( this , 0 , a , b , c , d , e , f , g ) ; this . type = "ConeBufferGeometry" ; this . parameters = { radius : a , height : b , radialSegments : c , heightSegments : d , openEnded : e , thetaStart : f , thetaLength : g } } function ke ( a , b , c , d ) { O . call ( this ) ; this . type = "CircleGeometry" ; this . parameters = { radius : a , segments : b , thetaStart : c ,
thetaLength : d } ; this . fromBufferGeometry ( new Wc ( a , b , c , d ) ) ; this . mergeVertices ( ) } function Wc ( a , b , c , d ) { E . call ( this ) ; this . type = "CircleBufferGeometry" ; this . parameters = { radius : a , segments : b , thetaStart : c , thetaLength : d } ; a = a || 1 ; b = void 0 !== b ? Math . max ( 3 , b ) : 8 ; c = void 0 !== c ? c : 0 ; d = void 0 !== d ? d : 2 * Math . PI ; var e = [ ] , f = [ ] , g = [ ] , h = [ ] , l , m = new n , k = new B ; f . push ( 0 , 0 , 0 ) ; g . push ( 0 , 0 , 1 ) ; h . push ( . 5 , . 5 ) ; var p = 0 ; for ( l = 3 ; p <= b ; p ++ , l += 3 ) { var t = c + p / b * d ; m . x = a * Math . cos ( t ) ; m . y = a * Math . sin ( t ) ; f . push ( m . x , m . y , m . z ) ; g . push ( 0 , 0 , 1 ) ; k . x = ( f [ l ] / a + 1 ) /
2 ; k . y = ( f [ l + 1 ] / a + 1 ) / 2 ; h . push ( k . x , k . y ) } for ( l = 1 ; l <= b ; l ++ ) e . push ( l , l + 1 , 0 ) ; this . setIndex ( e ) ; this . setAttribute ( "position" , new D ( f , 3 ) ) ; this . setAttribute ( "normal" , new D ( g , 3 ) ) ; this . setAttribute ( "uv" , new D ( h , 2 ) ) } function hc ( a ) { C . call ( this ) ; this . type = "ShadowMaterial" ; this . color = new H ( 0 ) ; this . transparent = ! 0 ; this . setValues ( a ) } function Xc ( a ) { na . call ( this , a ) ; this . type = "RawShaderMaterial" } function fb ( a ) { C . call ( this ) ; this . defines = { STANDARD : "" } ; this . type = "MeshStandardMaterial" ; this . color = new H ( 16777215 ) ; this . metalness =
this . roughness = . 5 ; this . lightMap = this . map = null ; this . lightMapIntensity = 1 ; this . aoMap = null ; this . aoMapIntensity = 1 ; this . emissive = new H ( 0 ) ; this . emissiveIntensity = 1 ; this . bumpMap = this . emissiveMap = null ; this . bumpScale = 1 ; this . normalMap = null ; this . normalMapType = 0 ; this . normalScale = new B ( 1 , 1 ) ; this . displacementMap = null ; this . displacementScale = 1 ; this . displacementBias = 0 ; this . envMap = this . alphaMap = this . metalnessMap = this . roughnessMap = null ; this . envMapIntensity = 1 ; this . refractionRatio = . 98 ; this . wireframe = ! 1 ; this . wireframeLinewidth =
1 ; this . wireframeLinejoin = this . wireframeLinecap = "round" ; this . morphNormals = this . morphTargets = this . skinning = ! 1 ; this . setValues ( a ) } function ic ( a ) { fb . call ( this ) ; this . defines = { STANDARD : "" , PHYSICAL : "" } ; this . type = "MeshPhysicalMaterial" ; this . reflectivity = . 5 ; this . clearcoatRoughness = this . clearcoat = 0 ; this . sheen = null ; this . clearcoatNormalScale = new B ( 1 , 1 ) ; this . clearcoatNormalMap = null ; this . transparency = 0 ; this . setValues ( a ) } function Ua ( a ) { C . call ( this ) ; this . type = "MeshPhongMaterial" ; this . color = new H ( 16777215 ) ; this . specular =
new H ( 1118481 ) ; this . shininess = 30 ; this . lightMap = this . map = null ; this . lightMapIntensity = 1 ; this . aoMap = null ; this . aoMapIntensity = 1 ; this . emissive = new H ( 0 ) ; this . emissiveIntensity = 1 ; this . bumpMap = this . emissiveMap = null ; this . bumpScale = 1 ; this . normalMap = null ; this . normalMapType = 0 ; this . normalScale = new B ( 1 , 1 ) ; this . displacementMap = null ; this . displacementScale = 1 ; this . displacementBias = 0 ; this . envMap = this . alphaMap = this . specularMap = null ; this . combine = 0 ; this . reflectivity = 1 ; this . refractionRatio = . 98 ; this . wireframe = ! 1 ; this . wireframeLinewidth =
1 ; this . wireframeLinejoin = this . wireframeLinecap = "round" ; this . morphNormals = this . morphTargets = this . skinning = ! 1 ; this . setValues ( a ) } function jc ( a ) { Ua . call ( this ) ; this . defines = { TOON : "" } ; this . type = "MeshToonMaterial" ; this . gradientMap = null ; this . setValues ( a ) } function kc ( a ) { C . call ( this ) ; this . type = "MeshNormalMaterial" ; this . bumpMap = null ; this . bumpScale = 1 ; this . normalMap = null ; this . normalMapType = 0 ; this . normalScale = new B ( 1 , 1 ) ; this . displacementMap = null ; this . displacementScale = 1 ; this . displacementBias = 0 ; this . wireframe = ! 1 ;
this . wireframeLinewidth = 1 ; this . morphNormals = this . morphTargets = this . skinning = this . fog = ! 1 ; this . setValues ( a ) } function lc ( a ) { C . call ( this ) ; this . type = "MeshLambertMaterial" ; this . color = new H ( 16777215 ) ; this . lightMap = this . map = null ; this . lightMapIntensity = 1 ; this . aoMap = null ; this . aoMapIntensity = 1 ; this . emissive = new H ( 0 ) ; this . emissiveIntensity = 1 ; this . envMap = this . alphaMap = this . specularMap = this . emissiveMap = null ; this . combine = 0 ; this . reflectivity = 1 ; this . refractionRatio = . 98 ; this . wireframe = ! 1 ; this . wireframeLinewidth = 1 ;
this . wireframeLinejoin = this . wireframeLinecap = "round" ; this . morphNormals = this . morphTargets = this . skinning = ! 1 ; this . setValues ( a ) } function mc ( a ) { C . call ( this ) ; this . defines = { MATCAP : "" } ; this . type = "MeshMatcapMaterial" ; this . color = new H ( 16777215 ) ; this . bumpMap = this . map = this . matcap = null ; this . bumpScale = 1 ; this . normalMap = null ; this . normalMapType = 0 ; this . normalScale = new B ( 1 , 1 ) ; this . displacementMap = null ; this . displacementScale = 1 ; this . displacementBias = 0 ; this . alphaMap = null ; this . morphNormals = this . morphTargets = this . skinning =
! 1 ; this . setValues ( a ) } function nc ( a ) { P . call ( this ) ; this . type = "LineDashedMaterial" ; this . scale = 1 ; this . dashSize = 3 ; this . gapSize = 1 ; this . setValues ( a ) } function Ia ( a , b , c , d ) { this . parameterPositions = a ; this . _cachedIndex = 0 ; this . resultBuffer = void 0 !== d ? d : new b . constructor ( c ) ; this . sampleValues = b ; this . valueSize = c } function Ye ( a , b , c , d ) { Ia . call ( this , a , b , c , d ) ; this . _offsetNext = this . _weightNext = this . _offsetPrev = this . _weightPrev = - 0 } function le ( a , b , c , d ) { Ia . call ( this , a , b , c , d ) } function Ze ( a , b , c , d ) { Ia . call ( this , a , b , c , d ) } function oa ( a ,
b , c , d ) { if ( void 0 === a ) throw Error ( "THREE.KeyframeTrack: track name is undefined" ) ; if ( void 0 === b || 0 === b . length ) throw Error ( "THREE.KeyframeTrack: no keyframes in track named " + a ) ; this . name = a ; this . times = sa . convertArray ( b , this . TimeBufferType ) ; this . values = sa . convertArray ( c , this . ValueBufferType ) ; this . setInterpolation ( d || this . DefaultInterpolation ) } function $e ( a , b , c ) { oa . call ( this , a , b , c ) } function af ( a , b , c , d ) { oa . call ( this , a , b , c , d ) } function Yc ( a , b , c , d ) { oa . call ( this , a , b , c , d ) } function bf ( a , b , c , d ) { Ia . call ( this ,
a , b , c , d ) } function me ( a , b , c , d ) { oa . call ( this , a , b , c , d ) } function cf ( a , b , c , d ) { oa . call ( this , a , b , c , d ) } function Zc ( a , b , c , d ) { oa . call ( this , a , b , c , d ) } function Oa ( a , b , c ) { this . name = a ; this . tracks = c ; this . duration = void 0 !== b ? b : - 1 ; this . uuid = R . generateUUID ( ) ; 0 > this . duration && this . resetDuration ( ) } function xk ( a ) { switch ( a . toLowerCase ( ) ) { case "scalar" : case "double" : case "float" : case "number" : case "integer" : return Yc ; case "vector" : case "vector2" : case "vector3" : case "vector4" : return Zc ; case "color" : return af ; case "quaternion" : return me ;
case "bool" : case "boolean" : return $e ; case "string" : return cf } throw Error ( "THREE.KeyframeTrack: Unsupported typeName: " + a ) ; } function yk ( a ) { if ( void 0 === a . type ) throw Error ( "THREE.KeyframeTrack: track type undefined, can not parse" ) ; var b = xk ( a . type ) ; if ( void 0 === a . times ) { var c = [ ] , d = [ ] ; sa . flattenJSON ( a . keys , c , d , "value" ) ; a . times = c ; a . values = d } return void 0 !== b . parse ? b . parse ( a ) : new b ( a . name , a . times , a . values , a . interpolation ) } function wg ( a , b , c ) { var d = this , e = ! 1 , f = 0 , g = 0 , h = void 0 , l = [ ] ; this . onStart = void 0 ; this . onLoad =
a ; this . onProgress = b ; this . onError = c ; this . itemStart = function ( a ) { g ++ ; if ( ! 1 === e && void 0 !== d . onStart ) d . onStart ( a , f , g ) ; e = ! 0 } ; this . itemEnd = function ( a ) { f ++ ; if ( void 0 !== d . onProgress ) d . onProgress ( a , f , g ) ; if ( f === g && ( e = ! 1 , void 0 !== d . onLoad ) ) d . onLoad ( ) } ; this . itemError = function ( a ) { if ( void 0 !== d . onError ) d . onError ( a ) } ; this . resolveURL = function ( a ) { return h ? h ( a ) : a } ; this . setURLModifier = function ( a ) { h = a ; return this } ; this . addHandler = function ( a , b ) { l . push ( a , b ) ; return this } ; this . removeHandler = function ( a ) { a = l . indexOf ( a ) ; - 1 !==
a && l . splice ( a , 2 ) ; return this } ; this . getHandler = function ( a ) { for ( var b = 0 , c = l . length ; b < c ; b += 2 ) { var d = l [ b ] , e = l [ b + 1 ] ; d . global && ( d . lastIndex = 0 ) ; if ( d . test ( a ) ) return e } return null } } function V ( a ) { this . manager = void 0 !== a ? a : ci ; this . crossOrigin = "anonymous" ; this . resourcePath = this . path = "" } function Pa ( a ) { V . call ( this , a ) } function xg ( a ) { V . call ( this , a ) } function yg ( a ) { V . call ( this , a ) } function df ( a ) { V . call ( this , a ) } function $c ( a ) { V . call ( this , a ) } function ef ( a ) { V . call ( this , a ) } function ff ( a ) { V . call ( this , a ) } function F ( ) { this . type =
"Curve" ; this . arcLengthDivisions = 200 } function Ja ( a , b , c , d , e , f , g , h ) { F . call ( this ) ; this . type = "EllipseCurve" ; this . aX = a || 0 ; this . aY = b || 0 ; this . xRadius = c || 1 ; this . yRadius = d || 1 ; this . aStartAngle = e || 0 ; this . aEndAngle = f || 2 * Math . PI ; this . aClockwise = g || ! 1 ; this . aRotation = h || 0 } function ad ( a , b , c , d , e , f ) { Ja . call ( this , a , b , c , c , d , e , f ) ; this . type = "ArcCurve" } function zg ( ) { var a = 0 , b = 0 , c = 0 , d = 0 ; return { initCatmullRom : function ( e , f , g , h , l ) { e = l * ( g - e ) ; h = l * ( h - f ) ; a = f ; b = e ; c = - 3 * f + 3 * g - 2 * e - h ; d = 2 * f - 2 * g + e + h } , initNonuniformCatmullRom : function ( e ,
f , g , h , l , m , k ) { e = ( ( f - e ) / l - ( g - e ) / ( l + m ) + ( g - f ) / m ) * m ; h = ( ( g - f ) / m - ( h - f ) / ( m + k ) + ( h - g ) / k ) * m ; a = f ; b = e ; c = - 3 * f + 3 * g - 2 * e - h ; d = 2 * f - 2 * g + e + h } , calc : function ( e ) { var f = e * e ; return a + b * e + c * f + d * f * e } } } function xa ( a , b , c , d ) { F . call ( this ) ; this . type = "CatmullRomCurve3" ; this . points = a || [ ] ; this . closed = b || ! 1 ; this . curveType = c || "centripetal" ; this . tension = d || . 5 } function di ( a , b , c , d , e ) { b = . 5 * ( d - b ) ; e = . 5 * ( e - c ) ; var f = a * a ; return ( 2 * c - 2 * d + b + e ) * a * f + ( - 3 * c + 3 * d - 2 * b - e ) * f + b * a + c } function ne ( a , b , c , d ) { var e = 1 - a ; return e * e * b + 2 * ( 1 - a ) * a * c + a * a * d } function oe ( a ,
b , c , d , e ) { var f = 1 - a , g = 1 - a ; return f * f * f * b + 3 * g * g * a * c + 3 * ( 1 - a ) * a * a * d + a * a * a * e } function Va ( a , b , c , d ) { F . call ( this ) ; this . type = "CubicBezierCurve" ; this . v0 = a || new B ; this . v1 = b || new B ; this . v2 = c || new B ; this . v3 = d || new B } function gb ( a , b , c , d ) { F . call ( this ) ; this . type = "CubicBezierCurve3" ; this . v0 = a || new n ; this . v1 = b || new n ; this . v2 = c || new n ; this . v3 = d || new n } function ya ( a , b ) { F . call ( this ) ; this . type = "LineCurve" ; this . v1 = a || new B ; this . v2 = b || new B } function Wa ( a , b ) { F . call ( this ) ; this . type = "LineCurve3" ; this . v1 = a || new n ; this . v2 = b ||
new n } function Xa ( a , b , c ) { F . call ( this ) ; this . type = "QuadraticBezierCurve" ; this . v0 = a || new B ; this . v1 = b || new B ; this . v2 = c || new B } function hb ( a , b , c ) { F . call ( this ) ; this . type = "QuadraticBezierCurve3" ; this . v0 = a || new n ; this . v1 = b || new n ; this . v2 = c || new n } function Ya ( a ) { F . call ( this ) ; this . type = "SplineCurve" ; this . points = a || [ ] } function sb ( ) { F . call ( this ) ; this . type = "CurvePath" ; this . curves = [ ] ; this . autoClose = ! 1 } function Za ( a ) { sb . call ( this ) ; this . type = "Path" ; this . currentPoint = new B ; a && this . setFromPoints ( a ) } function Ib ( a ) { Za . call ( this ,
a ) ; this . uuid = R . generateUUID ( ) ; this . type = "Shape" ; this . holes = [ ] } function T ( a , b ) { y . call ( this ) ; this . type = "Light" ; this . color = new H ( a ) ; this . intensity = void 0 !== b ? b : 1 ; this . receiveShadow = void 0 } function gf ( a , b , c ) { T . call ( this , a , c ) ; this . type = "HemisphereLight" ; this . castShadow = void 0 ; this . position . copy ( y . DefaultUp ) ; this . updateMatrix ( ) ; this . groundColor = new H ( b ) } function ib ( a ) { this . camera = a ; this . bias = 0 ; this . radius = 1 ; this . mapSize = new B ( 512 , 512 ) ; this . mapPass = this . map = null ; this . matrix = new S ; this . _frustum = new Ed ; this . _frameExtents =
new B ( 1 , 1 ) ; this . _viewportCount = 1 ; this . _viewports = [ new ba ( 0 , 0 , 1 , 1 ) ] } function hf ( ) { ib . call ( this , new da ( 50 , 1 , . 5 , 500 ) ) } function jf ( a , b , c , d , e , f ) { T . call ( this , a , b ) ; this . type = "SpotLight" ; this . position . copy ( y . DefaultUp ) ; this . updateMatrix ( ) ; this . target = new y ; Object . defineProperty ( this , "power" , { get : function ( ) { return this . intensity * Math . PI } , set : function ( a ) { this . intensity = a / Math . PI } } ) ; this . distance = void 0 !== c ? c : 0 ; this . angle = void 0 !== d ? d : Math . PI / 3 ; this . penumbra = void 0 !== e ? e : 0 ; this . decay = void 0 !== f ? f : 1 ; this . shadow =
new hf } function Ag ( ) { ib . call ( this , new da ( 90 , 1 , . 5 , 500 ) ) ; this . _frameExtents = new B ( 4 , 2 ) ; this . _viewportCount = 6 ; this . _viewports = [ new ba ( 2 , 1 , 1 , 1 ) , new ba ( 0 , 1 , 1 , 1 ) , new ba ( 3 , 1 , 1 , 1 ) , new ba ( 1 , 1 , 1 , 1 ) , new ba ( 3 , 0 , 1 , 1 ) , new ba ( 1 , 0 , 1 , 1 ) ] ; this . _cubeDirections = [ new n ( 1 , 0 , 0 ) , new n ( - 1 , 0 , 0 ) , new n ( 0 , 0 , 1 ) , new n ( 0 , 0 , - 1 ) , new n ( 0 , 1 , 0 ) , new n ( 0 , - 1 , 0 ) ] ; this . _cubeUps = [ new n ( 0 , 1 , 0 ) , new n ( 0 , 1 , 0 ) , new n ( 0 , 1 , 0 ) , new n ( 0 , 1 , 0 ) , new n ( 0 , 0 , 1 ) , new n ( 0 , 0 , - 1 ) ] } function kf ( a , b , c , d ) { T . call ( this , a , b ) ; this . type = "PointLight" ; Object . defineProperty ( this ,
"power" , { get : function ( ) { return 4 * this . intensity * Math . PI } , set : function ( a ) { this . intensity = a / ( 4 * Math . PI ) } } ) ; this . distance = void 0 !== c ? c : 0 ; this . decay = void 0 !== d ? d : 1 ; this . shadow = new Ag } function pe ( a , b , c , d , e , f ) { cb . call ( this ) ; this . type = "OrthographicCamera" ; this . zoom = 1 ; this . view = null ; this . left = void 0 !== a ? a : - 1 ; this . right = void 0 !== b ? b : 1 ; this . top = void 0 !== c ? c : 1 ; this . bottom = void 0 !== d ? d : - 1 ; this . near = void 0 !== e ? e : . 1 ; this . far = void 0 !== f ? f : 2E3 ; this . updateProjectionMatrix ( ) } function lf ( ) { ib . call ( this , new pe ( - 5 , 5 ,
5 , - 5 , . 5 , 500 ) ) } function mf ( a , b ) { T . call ( this , a , b ) ; this . type = "DirectionalLight" ; this . position . copy ( y . DefaultUp ) ; this . updateMatrix ( ) ; this . target = new y ; this . shadow = new lf } function nf ( a , b ) { T . call ( this , a , b ) ; this . type = "AmbientLight" ; this . castShadow = void 0 } function of ( a , b , c , d ) { T . call ( this , a , b ) ; this . type = "RectAreaLight" ; this . width = void 0 !== c ? c : 10 ; this . height = void 0 !== d ? d : 10 } function pf ( a ) { V . call ( this , a ) ; this . textures = { } } function qf ( ) { E . call ( this ) ; this . type = "InstancedBufferGeometry" ; this . maxInstancedCount = void 0 }
function rf ( a , b , c , d ) { "number" === typeof c && ( d = c , c = ! 1 , console . error ( "THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument." ) ) ; N . call ( this , a , b , c ) ; this . meshPerAttribute = d || 1 } function sf ( a ) { V . call ( this , a ) } function tf ( a ) { V . call ( this , a ) } function Bg ( a ) { "undefined" === typeof createImageBitmap && console . warn ( "THREE.ImageBitmapLoader: createImageBitmap() not supported." ) ; "undefined" === typeof fetch && console . warn ( "THREE.ImageBitmapLoader: fetch() not supported." ) ; V . call ( this ,
a ) ; this . options = void 0 } function Cg ( ) { this . type = "ShapePath" ; this . color = new H ; this . subPaths = [ ] ; this . currentPath = null } function Dg ( a ) { this . type = "Font" ; this . data = a } function Eg ( a ) { V . call ( this , a ) } function uf ( a ) { V . call ( this , a ) } function vf ( ) { this . coefficients = [ ] ; for ( var a = 0 ; 9 > a ; a ++ ) this . coefficients . push ( new n ) } function $a ( a , b ) { T . call ( this , void 0 , b ) ; this . sh = void 0 !== a ? a : new vf } function Fg ( a , b , c ) { $a . call ( this , void 0 , c ) ; a = ( new H ) . set ( a ) ; c = ( new H ) . set ( b ) ; b = new n ( a . r , a . g , a . b ) ; a = new n ( c . r , c . g , c . b ) ; c = Math . sqrt ( Math . PI ) ;
var d = c * Math . sqrt ( . 75 ) ; this . sh . coefficients [ 0 ] . copy ( b ) . add ( a ) . multiplyScalar ( c ) ; this . sh . coefficients [ 1 ] . copy ( b ) . sub ( a ) . multiplyScalar ( d ) } function Gg ( a , b ) { $a . call ( this , void 0 , b ) ; a = ( new H ) . set ( a ) ; this . sh . coefficients [ 0 ] . set ( a . r , a . g , a . b ) . multiplyScalar ( 2 * Math . sqrt ( Math . PI ) ) } function ei ( ) { this . type = "StereoCamera" ; this . aspect = 1 ; this . eyeSep = . 064 ; this . cameraL = new da ; this . cameraL . layers . enable ( 1 ) ; this . cameraL . matrixAutoUpdate = ! 1 ; this . cameraR = new da ; this . cameraR . layers . enable ( 2 ) ; this . cameraR . matrixAutoUpdate =
! 1 ; this . _cache = { focus : null , fov : null , aspect : null , near : null , far : null , zoom : null , eyeSep : null } } function Hg ( a ) { this . autoStart = void 0 !== a ? a : ! 0 ; this . elapsedTime = this . oldTime = this . startTime = 0 ; this . running = ! 1 } function Ig ( ) { y . call ( this ) ; this . type = "AudioListener" ; this . context = Jg . getContext ( ) ; this . gain = this . context . createGain ( ) ; this . gain . connect ( this . context . destination ) ; this . filter = null ; this . timeDelta = 0 ; this . _clock = new Hg } function bd ( a ) { y . call ( this ) ; this . type = "Audio" ; this . listener = a ; this . context = a . context ; this . gain =
this . context . createGain ( ) ; this . gain . connect ( a . getInput ( ) ) ; this . autoplay = ! 1 ; this . buffer = null ; this . detune = 0 ; this . loop = ! 1 ; this . offset = this . loopEnd = this . loopStart = 0 ; this . duration = void 0 ; this . playbackRate = 1 ; this . isPlaying = ! 1 ; this . hasPlaybackControl = ! 0 ; this . sourceType = "empty" ; this . _pausedAt = this . _startedAt = 0 ; this . filters = [ ] } function Kg ( a ) { bd . call ( this , a ) ; this . panner = this . context . createPanner ( ) ; this . panner . panningModel = "HRTF" ; this . panner . connect ( this . gain ) } function Lg ( a , b ) { this . analyser = a . context . createAnalyser ( ) ;
this . analyser . fftSize = void 0 !== b ? b : 2048 ; this . data = new Uint8Array ( this . analyser . frequencyBinCount ) ; a . getOutput ( ) . connect ( this . analyser ) } function Mg ( a , b , c ) { this . binding = a ; this . valueSize = c ; a = Float64Array ; switch ( b ) { case "quaternion" : b = this . _slerp ; break ; case "string" : case "bool" : a = Array ; b = this . _select ; break ; default : b = this . _lerp } this . buffer = new a ( 4 * c ) ; this . _mixBufferRegion = b ; this . referenceCount = this . useCount = this . cumulativeWeight = 0 } function fi ( a , b , c ) { c = c || za . parseTrackName ( b ) ; this . _targetGroup = a ; this . _bindings =
a . subscribe _ ( b , c ) } function za ( a , b , c ) { this . path = b ; this . parsedPath = c || za . parseTrackName ( b ) ; this . node = za . findNode ( a , this . parsedPath . nodeName ) || a ; this . rootNode = a } function gi ( ) { this . uuid = R . generateUUID ( ) ; this . _objects = Array . prototype . slice . call ( arguments ) ; this . nCachedObjects _ = 0 ; var a = { } ; this . _indicesByUUID = a ; for ( var b = 0 , c = arguments . length ; b !== c ; ++ b ) a [ arguments [ b ] . uuid ] = b ; this . _paths = [ ] ; this . _parsedPaths = [ ] ; this . _bindings = [ ] ; this . _bindingsIndicesByPath = { } ; var d = this ; this . stats = { objects : { get total ( ) { return d . _objects . length } ,
get inUse ( ) { return this . total - d . nCachedObjects _ } } , get bindingsPerObject ( ) { return d . _bindings . length } } } function hi ( a , b , c ) { this . _mixer = a ; this . _clip = b ; this . _localRoot = c || null ; a = b . tracks ; b = a . length ; c = Array ( b ) ; for ( var d = { endingStart : 2400 , endingEnd : 2400 } , e = 0 ; e !== b ; ++ e ) { var f = a [ e ] . createInterpolant ( null ) ; c [ e ] = f ; f . settings = d } this . _interpolantSettings = d ; this . _interpolants = c ; this . _propertyBindings = Array ( b ) ; this . _weightInterpolant = this . _timeScaleInterpolant = this . _byClipCacheIndex = this . _cacheIndex = null ; this . loop =
2201 ; this . _loopCount = - 1 ; this . _startTime = null ; this . time = 0 ; this . _effectiveWeight = this . weight = this . _effectiveTimeScale = this . timeScale = 1 ; this . repetitions = Infinity ; this . paused = ! 1 ; this . enabled = ! 0 ; this . clampWhenFinished = ! 1 ; this . zeroSlopeAtEnd = this . zeroSlopeAtStart = ! 0 } function Ng ( a ) { this . _root = a ; this . _initMemoryManager ( ) ; this . time = this . _accuIndex = 0 ; this . timeScale = 1 } function wf ( a , b ) { "string" === typeof a && ( console . warn ( "THREE.Uniform: Type parameter is no longer needed." ) , a = b ) ; this . value = a } function Og ( a , b , c ) { pb . call ( this ,
a , b ) ; this . meshPerAttribute = c || 1 } function ii ( a , b , c , d ) { this . ray = new Rb ( a , b ) ; this . near = c || 0 ; this . far = d || Infinity ; this . camera = null ; this . params = { Mesh : { } , Line : { } , LOD : { } , Points : { threshold : 1 } , Sprite : { } } ; Object . defineProperties ( this . params , { PointCloud : { get : function ( ) { console . warn ( "THREE.Raycaster: params.PointCloud has been renamed to params.Points." ) ; return this . Points } } } ) } function ji ( a , b ) { return a . distance - b . distance } function Pg ( a , b , c , d ) { if ( ! 1 !== a . visible && ( a . raycast ( b , c ) , ! 0 === d ) ) { a = a . children ; d = 0 ; for ( var e =
a . length ; d < e ; d ++ ) Pg ( a [ d ] , b , c , ! 0 ) } } function ki ( a , b , c ) { this . radius = void 0 !== a ? a : 1 ; this . phi = void 0 !== b ? b : 0 ; this . theta = void 0 !== c ? c : 0 ; return this } function li ( a , b , c ) { this . radius = void 0 !== a ? a : 1 ; this . theta = void 0 !== b ? b : 0 ; this . y = void 0 !== c ? c : 0 ; return this } function Qg ( a , b ) { this . min = void 0 !== a ? a : new B ( Infinity , Infinity ) ; this . max = void 0 !== b ? b : new B ( - Infinity , - Infinity ) } function Rg ( a , b ) { this . start = void 0 !== a ? a : new n ; this . end = void 0 !== b ? b : new n } function qe ( a ) { y . call ( this ) ; this . material = a ; this . render = function ( ) { } }
function re ( a , b , c , d ) { this . object = a ; this . size = void 0 !== b ? b : 1 ; a = void 0 !== c ? c : 16711680 ; d = void 0 !== d ? d : 1 ; b = 0 ; ( c = this . object . geometry ) && c . isGeometry ? b = 3 * c . faces . length : c && c . isBufferGeometry && ( b = c . attributes . normal . count ) ; c = new E ; b = new D ( 6 * b , 3 ) ; c . setAttribute ( "position" , b ) ; X . call ( this , c , new P ( { color : a , linewidth : d } ) ) ; this . matrixAutoUpdate = ! 1 ; this . update ( ) } function cd ( a , b ) { y . call ( this ) ; this . light = a ; this . light . updateMatrixWorld ( ) ; this . matrix = a . matrixWorld ; this . matrixAutoUpdate = ! 1 ; this . color = b ; a = new E ; b = [ 0 ,
0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , - 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , - 1 , 1 ] ; for ( var c = 0 , d = 1 ; 32 > c ; c ++ , d ++ ) { var e = c / 32 * Math . PI * 2 , f = d / 32 * Math . PI * 2 ; b . push ( Math . cos ( e ) , Math . sin ( e ) , 1 , Math . cos ( f ) , Math . sin ( f ) , 1 ) } a . setAttribute ( "position" , new D ( b , 3 ) ) ; b = new P ( { fog : ! 1 } ) ; this . cone = new X ( a , b ) ; this . add ( this . cone ) ; this . update ( ) } function mi ( a ) { var b = [ ] ; a && a . isBone && b . push ( a ) ; for ( var c = 0 ; c < a . children . length ; c ++ ) b . push . apply ( b , mi ( a . children [ c ] ) ) ; return b } function dd ( a ) { for ( var b = mi ( a ) , c = new E , d = [ ] , e = [ ] , f = new H ( 0 , 0 , 1 ) , g = new H ( 0 , 1 ,
0 ) , h = 0 ; h < b . length ; h ++ ) { var l = b [ h ] ; l . parent && l . parent . isBone && ( d . push ( 0 , 0 , 0 ) , d . push ( 0 , 0 , 0 ) , e . push ( f . r , f . g , f . b ) , e . push ( g . r , g . g , g . b ) ) } c . setAttribute ( "position" , new D ( d , 3 ) ) ; c . setAttribute ( "color" , new D ( e , 3 ) ) ; d = new P ( { vertexColors : 2 , depthTest : ! 1 , depthWrite : ! 1 , transparent : ! 0 } ) ; X . call ( this , c , d ) ; this . root = a ; this . bones = b ; this . matrix = a . matrixWorld ; this . matrixAutoUpdate = ! 1 } function ed ( a , b , c ) { this . light = a ; this . light . updateMatrixWorld ( ) ; this . color = c ; a = new Hb ( b , 4 , 2 ) ; b = new Ga ( { wireframe : ! 0 , fog : ! 1 } ) ; ja . call ( this ,
a , b ) ; this . matrix = this . light . matrixWorld ; this . matrixAutoUpdate = ! 1 ; this . update ( ) } function fd ( a , b ) { this . type = "RectAreaLightHelper" ; this . light = a ; this . color = b ; a = new E ; a . setAttribute ( "position" , new D ( [ 1 , 1 , 0 , - 1 , 1 , 0 , - 1 , - 1 , 0 , 1 , - 1 , 0 , 1 , 1 , 0 ] , 3 ) ) ; a . computeBoundingSphere ( ) ; b = new P ( { fog : ! 1 } ) ; wa . call ( this , a , b ) ; a = new E ; a . setAttribute ( "position" , new D ( [ 1 , 1 , 0 , - 1 , 1 , 0 , - 1 , - 1 , 0 , 1 , 1 , 0 , - 1 , - 1 , 0 , 1 , - 1 , 0 ] , 3 ) ) ; a . computeBoundingSphere ( ) ; this . add ( new ja ( a , new Ga ( { side : 1 , fog : ! 1 } ) ) ) ; this . update ( ) } function gd ( a , b , c ) { y . call ( this ) ; this . light =
a ; this . light . updateMatrixWorld ( ) ; this . matrix = a . matrixWorld ; this . matrixAutoUpdate = ! 1 ; this . color = c ; a = new ac ( b ) ; a . rotateY ( . 5 * Math . PI ) ; this . material = new Ga ( { wireframe : ! 0 , fog : ! 1 } ) ; void 0 === this . color && ( this . material . vertexColors = 2 ) ; b = a . getAttribute ( "position" ) ; b = new Float32Array ( 3 * b . count ) ; a . setAttribute ( "color" , new N ( b , 3 ) ) ; this . add ( new ja ( a , this . material ) ) ; this . update ( ) } function hd ( a , b ) { this . lightProbe = a ; this . size = b ; a = new na ( { defines : { GAMMA _OUTPUT : "" } , uniforms : { sh : { value : this . lightProbe . sh . coefficients } ,
intensity : { value : this . lightProbe . intensity } } , vertexShader : "varying vec3 vNormal;\nvoid main() {\n\tvNormal = normalize( normalMatrix * normal );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}" , fragmentShader : "#define RECIPROCAL_PI 0.318309886\nvec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\n\t// matrix is assumed to be orthogonal\n\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\n}\nvec3 linearToOutput( in vec3 a ) {\n\t#ifdef GAMMA_OUTPUT\n\t\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );\n\t#else\n\t\treturn a;\n\t#endif\n}\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\t// normal is assumed to have unit length\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\t// band 0\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\t// band 1\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\t// band 2\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nuniform vec3 sh[ 9 ]; // sh coefficients\nuniform float intensity; // light probe intensity\nvarying vec3 vNormal;\nvoid main() {\n\tvec3 normal = normalize( vNormal );\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, sh );\n\tvec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;\n\toutgoingLight = linearToOutput( outgoingLight );\n\tgl_FragColor = vec4( outgoingLight, 1.0 );\n}" } ) ;
b = new Hb ( 1 , 32 , 16 ) ; ja . call ( this , b , a ) ; this . onBeforeRender ( ) } function xf ( a , b , c , d ) { a = a || 10 ; b = b || 10 ; c = new H ( void 0 !== c ? c : 4473924 ) ; d = new H ( void 0 !== d ? d : 8947848 ) ; var e = b / 2 , f = a / b , g = a / 2 ; a = [ ] ; for ( var h = [ ] , l = 0 , m = 0 , k = - g ; l <= b ; l ++ , k += f ) { a . push ( - g , 0 , k , g , 0 , k ) ; a . push ( k , 0 , - g , k , 0 , g ) ; var p = l === e ? c : d ; p . toArray ( h , m ) ; m += 3 ; p . toArray ( h , m ) ; m += 3 ; p . toArray ( h , m ) ; m += 3 ; p . toArray ( h , m ) ; m += 3 } b = new E ; b . setAttribute ( "position" , new D ( a , 3 ) ) ; b . setAttribute ( "color" , new D ( h , 3 ) ) ; c = new P ( { vertexColors : 2 } ) ; X . call ( this , b , c ) } function yf ( a , b ,
c , d , e , f ) { a = a || 10 ; b = b || 16 ; c = c || 8 ; d = d || 64 ; e = new H ( void 0 !== e ? e : 4473924 ) ; f = new H ( void 0 !== f ? f : 8947848 ) ; var g = [ ] , h = [ ] , l ; for ( l = 0 ; l <= b ; l ++ ) { var m = l / b * 2 * Math . PI ; var k = Math . sin ( m ) * a ; m = Math . cos ( m ) * a ; g . push ( 0 , 0 , 0 ) ; g . push ( k , 0 , m ) ; var p = l & 1 ? e : f ; h . push ( p . r , p . g , p . b ) ; h . push ( p . r , p . g , p . b ) } for ( l = 0 ; l <= c ; l ++ ) { p = l & 1 ? e : f ; var t = a - a / c * l ; for ( b = 0 ; b < d ; b ++ ) m = b / d * 2 * Math . PI , k = Math . sin ( m ) * t , m = Math . cos ( m ) * t , g . push ( k , 0 , m ) , h . push ( p . r , p . g , p . b ) , m = ( b + 1 ) / d * 2 * Math . PI , k = Math . sin ( m ) * t , m = Math . cos ( m ) * t , g . push ( k , 0 , m ) , h . push ( p . r , p . g , p . b ) } a = new E ;
a . setAttribute ( "position" , new D ( g , 3 ) ) ; a . setAttribute ( "color" , new D ( h , 3 ) ) ; g = new P ( { vertexColors : 2 } ) ; X . call ( this , a , g ) } function id ( a , b , c , d ) { this . audio = a ; this . range = b || 1 ; this . divisionsInnerAngle = c || 16 ; this . divisionsOuterAngle = d || 2 ; a = new E ; b = new Float32Array ( 3 * ( 3 * ( this . divisionsInnerAngle + 2 * this . divisionsOuterAngle ) + 3 ) ) ; a . setAttribute ( "position" , new N ( b , 3 ) ) ; b = new P ( { color : 65280 } ) ; c = new P ( { color : 16776960 } ) ; wa . call ( this , a , [ c , b ] ) ; this . update ( ) } function se ( a , b , c , d ) { this . object = a ; this . size = void 0 !== b ? b : 1 ; a =
void 0 !== c ? c : 16776960 ; d = void 0 !== d ? d : 1 ; b = 0 ; ( c = this . object . geometry ) && c . isGeometry ? b = c . faces . length : console . warn ( "THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead." ) ; c = new E ; b = new D ( 6 * b , 3 ) ; c . setAttribute ( "position" , b ) ; X . call ( this , c , new P ( { color : a , linewidth : d } ) ) ; this . matrixAutoUpdate = ! 1 ; this . update ( ) } function jd ( a , b , c ) { y . call ( this ) ; this . light = a ; this . light . updateMatrixWorld ( ) ; this . matrix = a . matrixWorld ; this . matrixAutoUpdate = ! 1 ; this . color = c ; void 0 === b &&
( b = 1 ) ; a = new E ; a . setAttribute ( "position" , new D ( [ - b , b , 0 , b , b , 0 , b , - b , 0 , - b , - b , 0 , - b , b , 0 ] , 3 ) ) ; b = new P ( { fog : ! 1 } ) ; this . lightPlane = new wa ( a , b ) ; this . add ( this . lightPlane ) ; a = new E ; a . setAttribute ( "position" , new D ( [ 0 , 0 , 0 , 0 , 0 , 1 ] , 3 ) ) ; this . targetLine = new wa ( a , b ) ; this . add ( this . targetLine ) ; this . update ( ) } function te ( a ) { function b ( a , b , d ) { c ( a , d ) ; c ( b , d ) } function c ( a , b ) { f . push ( 0 , 0 , 0 ) ; g . push ( b . r , b . g , b . b ) ; void 0 === h [ a ] && ( h [ a ] = [ ] ) ; h [ a ] . push ( f . length / 3 - 1 ) } var d = new E , e = new P ( { color : 16777215 , vertexColors : 1 } ) , f = [ ] , g = [ ] , h = { } , l =
new H ( 16755200 ) , m = new H ( 16711680 ) , k = new H ( 43775 ) , p = new H ( 16777215 ) , t = new H ( 3355443 ) ; b ( "n1" , "n2" , l ) ; b ( "n2" , "n4" , l ) ; b ( "n4" , "n3" , l ) ; b ( "n3" , "n1" , l ) ; b ( "f1" , "f2" , l ) ; b ( "f2" , "f4" , l ) ; b ( "f4" , "f3" , l ) ; b ( "f3" , "f1" , l ) ; b ( "n1" , "f1" , l ) ; b ( "n2" , "f2" , l ) ; b ( "n3" , "f3" , l ) ; b ( "n4" , "f4" , l ) ; b ( "p" , "n1" , m ) ; b ( "p" , "n2" , m ) ; b ( "p" , "n3" , m ) ; b ( "p" , "n4" , m ) ; b ( "u1" , "u2" , k ) ; b ( "u2" , "u3" , k ) ; b ( "u3" , "u1" , k ) ; b ( "c" , "t" , p ) ; b ( "p" , "c" , t ) ; b ( "cn1" , "cn2" , t ) ; b ( "cn3" , "cn4" , t ) ; b ( "cf1" , "cf2" , t ) ; b ( "cf3" , "cf4" , t ) ; d . setAttribute ( "position" , new D ( f , 3 ) ) ; d . setAttribute ( "color" ,
new D ( g , 3 ) ) ; X . call ( this , d , e ) ; this . camera = a ; this . camera . updateProjectionMatrix && this . camera . updateProjectionMatrix ( ) ; this . matrix = a . matrixWorld ; this . matrixAutoUpdate = ! 1 ; this . pointMap = h ; this . update ( ) } function pa ( a , b , c , d , e , f , g ) { zf . set ( e , f , g ) . unproject ( d ) ; a = b [ a ] ; if ( void 0 !== a ) for ( c = c . getAttribute ( "position" ) , b = 0 , d = a . length ; b < d ; b ++ ) c . setXYZ ( a [ b ] , zf . x , zf . y , zf . z ) } function tb ( a , b ) { this . object = a ; void 0 === b && ( b = 16776960 ) ; a = 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 ] ) ; var c = new Float32Array ( 24 ) ,
d = new E ; d . setIndex ( new N ( a , 1 ) ) ; d . setAttribute ( "position" , new N ( c , 3 ) ) ; X . call ( this , d , new P ( { color : b } ) ) ; this . matrixAutoUpdate = ! 1 ; this . update ( ) } function ue ( a , b ) { this . type = "Box3Helper" ; this . box = a ; b = b || 16776960 ; a = 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 ] ) ; var c = new E ; c . setIndex ( new N ( a , 1 ) ) ; c . setAttribute ( "position" , new D ( [ 1 , 1 , 1 , - 1 , 1 , 1 , - 1 , - 1 , 1 , 1 , - 1 , 1 , 1 , 1 , - 1 , - 1 , 1 , - 1 , - 1 , - 1 , - 1 , 1 , - 1 , - 1 ] , 3 ) ) ; X . call ( this , c , new P ( { color : b } ) ) ; this . geometry . computeBoundingSphere ( ) } function ve ( a , b , c ) { this . type =
"PlaneHelper" ; this . plane = a ; this . size = void 0 === b ? 1 : b ; a = void 0 !== c ? c : 16776960 ; b = new E ; b . setAttribute ( "position" , new D ( [ 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 ] , 3 ) ) ; b . computeBoundingSphere ( ) ; wa . call ( this , b , new P ( { color : a } ) ) ; b = new E ; b . setAttribute ( "position" , new D ( [ 1 , 1 , 1 , - 1 , 1 , 1 , - 1 , - 1 , 1 , 1 , 1 , 1 , - 1 , - 1 , 1 , 1 , - 1 , 1 ] , 3 ) ) ; b . computeBoundingSphere ( ) ; this . add ( new ja ( b , new Ga ( { color : a , opacity : . 2 , transparent : ! 0 , depthWrite : ! 1 } ) ) ) } function ub ( a , b , c , d , e , f ) { y . call ( this ) ; void 0 === a && ( a = new n ( 0 ,
0 , 1 ) ) ; void 0 === b && ( b = new n ( 0 , 0 , 0 ) ) ; void 0 === c && ( c = 1 ) ; void 0 === d && ( d = 16776960 ) ; void 0 === e && ( e = . 2 * c ) ; void 0 === f && ( f = . 2 * e ) ; void 0 === Af && ( Af = new E , Af . setAttribute ( "position" , new D ( [ 0 , 0 , 0 , 0 , 1 , 0 ] , 3 ) ) , Sg = new rb ( 0 , . 5 , 1 , 5 , 1 ) , Sg . translate ( 0 , - . 5 , 0 ) ) ; this . position . copy ( b ) ; this . line = new wa ( Af , new P ( { color : d } ) ) ; this . line . matrixAutoUpdate = ! 1 ; this . add ( this . line ) ; this . cone = new ja ( Sg , new Ga ( { color : d } ) ) ; this . cone . matrixAutoUpdate = ! 1 ; this . add ( this . cone ) ; this . setDirection ( a ) ; this . setLength ( c , e , f ) } function we ( a ) { a = a ||
1 ; var b = [ 0 , 0 , 0 , a , 0 , 0 , 0 , 0 , 0 , 0 , a , 0 , 0 , 0 , 0 , 0 , 0 , a ] ; a = new E ; a . setAttribute ( "position" , new D ( b , 3 ) ) ; a . setAttribute ( "color" , new D ( [ 1 , 0 , 0 , 1 , . 6 , 0 , 0 , 1 , 0 , . 6 , 1 , 0 , 0 , 0 , 1 , 0 , . 6 , 1 ] , 3 ) ) ; b = new P ( { vertexColors : 2 } ) ; X . call ( this , a , b ) } function ni ( a ) { console . warn ( "THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead." ) ; xa . call ( this , a ) ; this . type = "catmullrom" ; this . closed = ! 0 } function oi ( a ) { console . warn ( "THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead." ) ; xa . call ( this , a ) ; this . type =
"catmullrom" } function Tg ( a ) { console . warn ( "THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead." ) ; xa . call ( this , a ) ; this . type = "catmullrom" } void 0 === Number . EPSILON && ( Number . EPSILON = Math . pow ( 2 , - 52 ) ) ; void 0 === Number . isInteger && ( Number . isInteger = function ( a ) { return "number" === typeof a && isFinite ( a ) && Math . floor ( a ) === a } ) ; void 0 === Math . sign && ( Math . sign = function ( a ) { return 0 > a ? - 1 : 0 < a ? 1 : + a } ) ; ! 1 === "name" in Function . prototype && Object . defineProperty ( Function . prototype , "name" , { get : function ( ) { return this . toString ( ) . match ( /^\s*function\s*([^\(\s]*)/ ) [ 1 ] } } ) ;
void 0 === Object . assign && ( Object . assign = function ( a ) { if ( void 0 === a || null === a ) throw new TypeError ( "Cannot convert undefined or null to object" ) ; for ( var b = Object ( a ) , c = 1 ; c < arguments . length ; c ++ ) { var d = arguments [ c ] ; if ( void 0 !== d && null !== d ) for ( var e in d ) Object . prototype . hasOwnProperty . call ( d , e ) && ( b [ e ] = d [ e ] ) } return b } ) ; Object . assign ( Aa . prototype , { addEventListener : function ( a , b ) { void 0 === this . _listeners && ( this . _listeners = { } ) ; var c = this . _listeners ; void 0 === c [ a ] && ( c [ a ] = [ ] ) ; - 1 === c [ a ] . indexOf ( b ) && c [ a ] . push ( b ) } ,
hasEventListener : function ( a , b ) { if ( void 0 === this . _listeners ) return ! 1 ; var c = this . _listeners ; return void 0 !== c [ a ] && - 1 !== c [ a ] . indexOf ( b ) } , removeEventListener : function ( a , b ) { void 0 !== this . _listeners && ( a = this . _listeners [ a ] , void 0 !== a && ( b = a . indexOf ( b ) , - 1 !== b && a . splice ( b , 1 ) ) ) } , dispatchEvent : function ( a ) { if ( void 0 !== this . _listeners ) { var b = this . _listeners [ a . type ] ; if ( void 0 !== b ) { a . target = this ; b = b . slice ( 0 ) ; for ( var c = 0 , d = b . length ; c < d ; c ++ ) b [ c ] . call ( this , a ) } } } } ) ; for ( var va = [ ] , xe = 0 ; 256 > xe ; xe ++ ) va [ xe ] = ( 16 > xe ? "0" : "" ) +
xe . toString ( 16 ) ; var R = { DEG2RAD : Math . PI / 180 , RAD2DEG : 180 / Math . PI , generateUUID : function ( ) { var a = 4294967295 * Math . random ( ) | 0 , b = 4294967295 * Math . random ( ) | 0 , c = 4294967295 * Math . random ( ) | 0 , d = 4294967295 * Math . random ( ) | 0 ; return ( va [ a & 255 ] + va [ a >> 8 & 255 ] + va [ a >> 16 & 255 ] + va [ a >> 24 & 255 ] + "-" + va [ b & 255 ] + va [ b >> 8 & 255 ] + "-" + va [ b >> 16 & 15 | 64 ] + va [ b >> 24 & 255 ] + "-" + va [ c & 63 | 128 ] + va [ c >> 8 & 255 ] + "-" + va [ c >> 16 & 255 ] + va [ c >> 24 & 255 ] + va [ d & 255 ] + va [ d >> 8 & 255 ] + va [ d >> 16 & 255 ] + va [ d >> 24 & 255 ] ) . toUpperCase ( ) } , clamp : function ( a , b , c ) { return Math . max ( b , Math . min ( c ,
2019-10-25 18:42:56 +08:00
a ) ) } , euclideanModulo : function ( a , b ) { return ( a % b + b ) % b } , mapLinear : function ( a , b , c , d , e ) { return d + ( a - b ) * ( e - d ) / ( c - b ) } , lerp : function ( a , b , c ) { return ( 1 - c ) * a + c * b } , smoothstep : function ( a , b , c ) { if ( a <= b ) return 0 ; if ( a >= c ) return 1 ; a = ( a - b ) / ( c - b ) ; return a * a * ( 3 - 2 * a ) } , smootherstep : function ( a , b , c ) { if ( a <= b ) return 0 ; if ( a >= c ) return 1 ; a = ( a - b ) / ( c - b ) ; return a * a * a * ( a * ( 6 * a - 15 ) + 10 ) } , randInt : function ( a , b ) { return a + Math . floor ( Math . random ( ) * ( b - a + 1 ) ) } , randFloat : function ( a , b ) { return a + Math . random ( ) * ( b - a ) } , randFloatSpread : function ( a ) { return a *
2019-12-11 10:47:24 +08:00
( . 5 - Math . random ( ) ) } , degToRad : function ( a ) { return a * R . DEG2RAD } , radToDeg : function ( a ) { return a * R . RAD2DEG } , isPowerOfTwo : function ( a ) { return 0 === ( a & a - 1 ) && 0 !== a } , ceilPowerOfTwo : function ( a ) { return Math . pow ( 2 , Math . ceil ( Math . log ( a ) / Math . LN2 ) ) } , floorPowerOfTwo : function ( a ) { return Math . pow ( 2 , Math . floor ( Math . log ( a ) / Math . LN2 ) ) } } ; Object . defineProperties ( B . prototype , { width : { get : function ( ) { return this . x } , set : function ( a ) { this . x = a } } , height : { get : function ( ) { return this . y } , set : function ( a ) { this . y = a } } } ) ; Object . assign ( B . prototype ,
2019-10-25 18:42:56 +08:00
{ isVector2 : ! 0 , set : function ( a , b ) { this . x = a ; this . y = b ; return this } , setScalar : function ( a ) { this . y = this . x = a ; return this } , setX : function ( a ) { this . x = a ; return this } , setY : function ( a ) { this . y = a ; return this } , setComponent : function ( a , b ) { switch ( a ) { case 0 : this . x = b ; break ; case 1 : this . y = b ; break ; default : throw Error ( "index is out of range: " + a ) ; } return this } , getComponent : function ( a ) { switch ( a ) { case 0 : return this . x ; case 1 : return this . y ; default : throw Error ( "index is out of range: " + a ) ; } } , clone : function ( ) { return new this . constructor ( this . x ,
this . y ) } , copy : function ( a ) { this . x = a . x ; this . y = a . y ; return this } , add : function ( a , b ) { if ( void 0 !== b ) return console . warn ( "THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead." ) , this . addVectors ( a , b ) ; this . x += a . x ; this . y += a . y ; return this } , addScalar : function ( a ) { this . x += a ; this . y += a ; return this } , addVectors : function ( a , b ) { this . x = a . x + b . x ; this . y = a . y + b . y ; return this } , addScaledVector : function ( a , b ) { this . x += a . x * b ; this . y += a . y * b ; return this } , sub : function ( a , b ) { if ( void 0 !== b ) return console . warn ( "THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead." ) ,
this . subVectors ( a , b ) ; this . x -= a . x ; this . y -= a . y ; return this } , subScalar : function ( a ) { this . x -= a ; this . y -= a ; return this } , subVectors : function ( a , b ) { this . x = a . x - b . x ; this . y = a . y - b . y ; return this } , multiply : function ( a ) { this . x *= a . x ; this . y *= a . y ; return this } , multiplyScalar : function ( a ) { this . x *= a ; this . y *= a ; return this } , divide : function ( a ) { this . x /= a . x ; this . y /= a . y ; return this } , divideScalar : function ( a ) { return this . multiplyScalar ( 1 / a ) } , applyMatrix3 : function ( a ) { var b = this . x , c = this . y ; a = a . elements ; this . x = a [ 0 ] * b + a [ 3 ] * c + a [ 6 ] ; this . y =
a [ 1 ] * b + a [ 4 ] * c + a [ 7 ] ; return this } , min : function ( a ) { this . x = Math . min ( this . x , a . x ) ; this . y = Math . min ( this . y , a . y ) ; return this } , max : function ( a ) { this . x = Math . max ( this . x , a . x ) ; this . y = Math . max ( this . y , a . y ) ; return this } , clamp : function ( a , b ) { this . x = Math . max ( a . x , Math . min ( b . x , this . x ) ) ; this . y = Math . max ( a . y , Math . min ( b . y , this . y ) ) ; return this } , clampScalar : function ( a , b ) { this . x = Math . max ( a , Math . min ( b , this . x ) ) ; this . y = Math . max ( a , Math . min ( b , this . y ) ) ; return this } , clampLength : function ( a , b ) { var c = this . length ( ) ; return this . divideScalar ( c ||
1 ) . multiplyScalar ( Math . max ( a , Math . min ( b , c ) ) ) } , floor : function ( ) { this . x = Math . floor ( this . x ) ; this . y = Math . floor ( this . y ) ; return this } , ceil : function ( ) { this . x = Math . ceil ( this . x ) ; this . y = Math . ceil ( this . y ) ; return this } , round : function ( ) { this . x = Math . round ( this . x ) ; this . y = Math . round ( this . y ) ; return this } , roundToZero : function ( ) { this . x = 0 > this . x ? Math . ceil ( this . x ) : Math . floor ( this . x ) ; this . y = 0 > this . y ? Math . ceil ( this . y ) : Math . floor ( this . y ) ; return this } , negate : function ( ) { this . x = - this . x ; this . y = - this . y ; return this } , dot : function ( a ) { return this . x *
a . x + this . y * a . y } , cross : function ( a ) { return this . x * a . y - this . y * a . x } , lengthSq : function ( ) { return this . x * this . x + this . y * this . y } , length : function ( ) { return Math . sqrt ( this . x * this . x + this . y * this . y ) } , manhattanLength : function ( ) { return Math . abs ( this . x ) + Math . abs ( this . y ) } , normalize : function ( ) { return this . divideScalar ( this . length ( ) || 1 ) } , angle : function ( ) { var a = Math . atan2 ( this . y , this . x ) ; 0 > a && ( a += 2 * Math . PI ) ; return a } , distanceTo : function ( a ) { return Math . sqrt ( this . distanceToSquared ( a ) ) } , distanceToSquared : function ( a ) { var b =
this . x - a . x ; a = this . y - a . y ; return b * b + a * a } , manhattanDistanceTo : function ( a ) { return Math . abs ( this . x - a . x ) + Math . abs ( this . y - a . y ) } , setLength : function ( a ) { return this . normalize ( ) . multiplyScalar ( a ) } , lerp : function ( a , b ) { this . x += ( a . x - this . x ) * b ; this . y += ( a . y - this . y ) * b ; return this } , lerpVectors : function ( a , b , c ) { return this . subVectors ( b , a ) . multiplyScalar ( c ) . add ( a ) } , equals : function ( a ) { return a . x === this . x && a . y === this . y } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; this . x = a [ b ] ; this . y = a [ b + 1 ] ; return this } , toArray : function ( a ,
b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; a [ b ] = this . x ; a [ b + 1 ] = this . y ; return a } , fromBufferAttribute : function ( a , b , c ) { void 0 !== c && console . warn ( "THREE.Vector2: offset has been removed from .fromBufferAttribute()." ) ; this . x = a . getX ( b ) ; this . y = a . getY ( b ) ; return this } , rotateAround : function ( a , b ) { var c = Math . cos ( b ) ; b = Math . sin ( b ) ; var d = this . x - a . x , e = this . y - a . y ; this . x = d * c - e * b + a . x ; this . y = d * b + e * c + a . y ; return this } } ) ; Object . assign ( ua , { slerp : function ( a , b , c , d ) { return c . copy ( a ) . slerp ( b , d ) } , slerpFlat : function ( a , b , c , d , e , f , g ) { var h =
2019-12-11 10:47:24 +08:00
c [ d + 0 ] , l = c [ d + 1 ] , m = c [ d + 2 ] ; c = c [ d + 3 ] ; d = e [ f + 0 ] ; var k = e [ f + 1 ] , p = e [ f + 2 ] ; e = e [ f + 3 ] ; if ( c !== e || h !== d || l !== k || m !== p ) { f = 1 - g ; var t = h * d + l * k + m * p + c * e , n = 0 <= t ? 1 : - 1 , q = 1 - t * t ; q > Number . EPSILON && ( q = Math . sqrt ( q ) , t = Math . atan2 ( q , t * n ) , f = Math . sin ( f * t ) / q , g = Math . sin ( g * t ) / q ) ; n *= g ; h = h * f + d * n ; l = l * f + k * n ; m = m * f + p * n ; c = c * f + e * n ; f === 1 - g && ( g = 1 / Math . sqrt ( h * h + l * l + m * m + c * c ) , h *= g , l *= g , m *= g , c *= g ) } a [ b ] = h ; a [ b + 1 ] = l ; a [ b + 2 ] = m ; a [ b + 3 ] = c } } ) ; Object . defineProperties ( ua . prototype , { x : { get : function ( ) { return this . _x } , set : function ( a ) { this . _x = a ; this . _onChangeCallback ( ) } } ,
2019-10-25 18:42:56 +08:00
y : { get : function ( ) { return this . _y } , set : function ( a ) { this . _y = a ; this . _onChangeCallback ( ) } } , z : { get : function ( ) { return this . _z } , set : function ( a ) { this . _z = a ; this . _onChangeCallback ( ) } } , w : { get : function ( ) { return this . _w } , set : function ( a ) { this . _w = a ; this . _onChangeCallback ( ) } } } ) ; Object . assign ( ua . prototype , { isQuaternion : ! 0 , set : function ( a , b , c , d ) { this . _x = a ; this . _y = b ; this . _z = c ; this . _w = d ; this . _onChangeCallback ( ) ; return this } , clone : function ( ) { return new this . constructor ( this . _x , this . _y , this . _z , this . _w ) } , copy : function ( a ) { this . _x =
a . x ; this . _y = a . y ; this . _z = a . z ; this . _w = a . w ; this . _onChangeCallback ( ) ; return this } , setFromEuler : function ( a , b ) { if ( ! a || ! a . isEuler ) throw Error ( "THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order." ) ; var c = a . _x , d = a . _y , e = a . _z ; a = a . order ; var f = Math . cos , g = Math . sin , h = f ( c / 2 ) , l = f ( d / 2 ) ; f = f ( e / 2 ) ; c = g ( c / 2 ) ; d = g ( d / 2 ) ; e = g ( e / 2 ) ; "XYZ" === a ? ( this . _x = c * l * f + h * d * e , this . _y = h * d * f - c * l * e , this . _z = h * l * e + c * d * f , this . _w = h * l * f - c * d * e ) : "YXZ" === a ? ( this . _x = c * l * f + h * d * e , this . _y = h * d * f - c * l * e , this . _z =
h * l * e - c * d * f , this . _w = h * l * f + c * d * e ) : "ZXY" === a ? ( this . _x = c * l * f - h * d * e , this . _y = h * d * f + c * l * e , this . _z = h * l * e + c * d * f , this . _w = h * l * f - c * d * e ) : "ZYX" === a ? ( this . _x = c * l * f - h * d * e , this . _y = h * d * f + c * l * e , this . _z = h * l * e - c * d * f , this . _w = h * l * f + c * d * e ) : "YZX" === a ? ( this . _x = c * l * f + h * d * e , this . _y = h * d * f + c * l * e , this . _z = h * l * e - c * d * f , this . _w = h * l * f - c * d * e ) : "XZY" === a && ( this . _x = c * l * f - h * d * e , this . _y = h * d * f - c * l * e , this . _z = h * l * e + c * d * f , this . _w = h * l * f + c * d * e ) ; ! 1 !== b && this . _onChangeCallback ( ) ; return this } , setFromAxisAngle : function ( a , b ) { b /= 2 ; var c = Math . sin ( b ) ;
this . _x = a . x * c ; this . _y = a . y * c ; this . _z = a . z * c ; this . _w = Math . cos ( b ) ; this . _onChangeCallback ( ) ; return this } , setFromRotationMatrix : function ( a ) { var b = a . elements , c = b [ 0 ] ; a = b [ 4 ] ; var d = b [ 8 ] , e = b [ 1 ] , f = b [ 5 ] , g = b [ 9 ] , h = b [ 2 ] , l = b [ 6 ] ; b = b [ 10 ] ; var m = c + f + b ; 0 < m ? ( c = . 5 / Math . sqrt ( m + 1 ) , this . _w = . 25 / c , this . _x = ( l - g ) * c , this . _y = ( d - h ) * c , this . _z = ( e - a ) * c ) : c > f && c > b ? ( c = 2 * Math . sqrt ( 1 + c - f - b ) , this . _w = ( l - g ) / c , this . _x = . 25 * c , this . _y = ( a + e ) / c , this . _z = ( d + h ) / c ) : f > b ? ( c = 2 * Math . sqrt ( 1 + f - c - b ) , this . _w = ( d - h ) / c , this . _x = ( a + e ) / c , this . _y = . 25 * c , this . _z = ( g + l ) /
2019-12-11 10:47:24 +08:00
c ) : ( c = 2 * Math . sqrt ( 1 + b - c - f ) , this . _w = ( e - a ) / c , this . _x = ( d + h ) / c , this . _y = ( g + l ) / c , this . _z = . 25 * c ) ; this . _onChangeCallback ( ) ; return this } , setFromUnitVectors : function ( a , b ) { var c = a . dot ( b ) + 1 ; 1E-6 > c ? ( c = 0 , Math . abs ( a . x ) > Math . abs ( a . z ) ? ( this . _x = - a . y , this . _y = a . x , this . _z = 0 ) : ( this . _x = 0 , this . _y = - a . z , this . _z = a . y ) ) : ( this . _x = a . y * b . z - a . z * b . y , this . _y = a . z * b . x - a . x * b . z , this . _z = a . x * b . y - a . y * b . x ) ; this . _w = c ; return this . normalize ( ) } , angleTo : function ( a ) { return 2 * Math . acos ( Math . abs ( R . clamp ( this . dot ( a ) , - 1 , 1 ) ) ) } , rotateTowards : function ( a ,
2019-10-25 18:42:56 +08:00
b ) { var c = this . angleTo ( a ) ; if ( 0 === c ) return this ; this . slerp ( a , Math . min ( 1 , b / c ) ) ; return this } , inverse : function ( ) { return this . conjugate ( ) } , conjugate : function ( ) { this . _x *= - 1 ; this . _y *= - 1 ; this . _z *= - 1 ; this . _onChangeCallback ( ) ; return this } , dot : function ( a ) { return this . _x * a . _x + this . _y * a . _y + this . _z * a . _z + this . _w * a . _w } , lengthSq : function ( ) { return this . _x * this . _x + this . _y * this . _y + this . _z * this . _z + this . _w * this . _w } , length : function ( ) { return Math . sqrt ( this . _x * this . _x + this . _y * this . _y + this . _z * this . _z + this . _w * this . _w ) } , normalize : function ( ) { var a =
this . length ( ) ; 0 === a ? ( this . _z = this . _y = this . _x = 0 , this . _w = 1 ) : ( a = 1 / a , this . _x *= a , this . _y *= a , this . _z *= a , this . _w *= a ) ; this . _onChangeCallback ( ) ; return this } , multiply : function ( a , b ) { return void 0 !== b ? ( console . warn ( "THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead." ) , this . multiplyQuaternions ( a , b ) ) : this . multiplyQuaternions ( this , a ) } , premultiply : function ( a ) { return this . multiplyQuaternions ( a , this ) } , multiplyQuaternions : function ( a , b ) { var c = a . _x , d = a . _y , e = a . _z ; a = a . _w ;
var f = b . _x , g = b . _y , h = b . _z ; b = b . _w ; this . _x = c * b + a * f + d * h - e * g ; this . _y = d * b + a * g + e * f - c * h ; this . _z = e * b + a * h + c * g - d * f ; this . _w = a * b - c * f - d * g - e * h ; this . _onChangeCallback ( ) ; return this } , slerp : function ( a , b ) { if ( 0 === b ) return this ; if ( 1 === b ) return this . copy ( a ) ; var c = this . _x , d = this . _y , e = this . _z , f = this . _w , g = f * a . _w + c * a . _x + d * a . _y + e * a . _z ; 0 > g ? ( this . _w = - a . _w , this . _x = - a . _x , this . _y = - a . _y , this . _z = - a . _z , g = - g ) : this . copy ( a ) ; if ( 1 <= g ) return this . _w = f , this . _x = c , this . _y = d , this . _z = e , this ; a = 1 - g * g ; if ( a <= Number . EPSILON ) return g = 1 - b , this . _w = g *
f + b * this . _w , this . _x = g * c + b * this . _x , this . _y = g * d + b * this . _y , this . _z = g * e + b * this . _z , this . normalize ( ) , this . _onChangeCallback ( ) , this ; a = Math . sqrt ( a ) ; var h = Math . atan2 ( a , g ) ; g = Math . sin ( ( 1 - b ) * h ) / a ; b = Math . sin ( b * h ) / a ; this . _w = f * g + this . _w * b ; this . _x = c * g + this . _x * b ; this . _y = d * g + this . _y * b ; this . _z = e * g + this . _z * b ; this . _onChangeCallback ( ) ; return this } , equals : function ( a ) { return a . _x === this . _x && a . _y === this . _y && a . _z === this . _z && a . _w === this . _w } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; this . _x = a [ b ] ; this . _y = a [ b + 1 ] ; this . _z = a [ b + 2 ] ;
2019-12-11 10:47:24 +08:00
this . _w = a [ b + 3 ] ; this . _onChangeCallback ( ) ; return this } , toArray : function ( a , b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; a [ b ] = this . _x ; a [ b + 1 ] = this . _y ; a [ b + 2 ] = this . _z ; a [ b + 3 ] = this . _w ; return a } , _onChange : function ( a ) { this . _onChangeCallback = a ; return this } , _onChangeCallback : function ( ) { } } ) ; var Ug = new n , pi = new ua ; Object . assign ( n . prototype , { isVector3 : ! 0 , set : function ( a , b , c ) { this . x = a ; this . y = b ; this . z = c ; return this } , setScalar : function ( a ) { this . z = this . y = this . x = a ; return this } , setX : function ( a ) { this . x = a ; return this } , setY : function ( a ) { this . y =
2019-10-25 18:42:56 +08:00
a ; return this } , setZ : function ( a ) { this . z = a ; return this } , setComponent : function ( a , b ) { switch ( a ) { case 0 : this . x = b ; break ; case 1 : this . y = b ; break ; case 2 : this . z = b ; break ; default : throw Error ( "index is out of range: " + a ) ; } return this } , getComponent : function ( a ) { switch ( a ) { case 0 : return this . x ; case 1 : return this . y ; case 2 : return this . z ; default : throw Error ( "index is out of range: " + a ) ; } } , clone : function ( ) { return new this . constructor ( this . x , this . y , this . z ) } , copy : function ( a ) { this . x = a . x ; this . y = a . y ; this . z = a . z ; return this } ,
add : function ( a , b ) { if ( void 0 !== b ) return console . warn ( "THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead." ) , this . addVectors ( a , b ) ; this . x += a . x ; this . y += a . y ; this . z += a . z ; return this } , addScalar : function ( a ) { this . x += a ; this . y += a ; this . z += a ; return this } , addVectors : function ( a , b ) { this . x = a . x + b . x ; this . y = a . y + b . y ; this . z = a . z + b . z ; return this } , addScaledVector : function ( a , b ) { this . x += a . x * b ; this . y += a . y * b ; this . z += a . z * b ; return this } , sub : function ( a , b ) { if ( void 0 !== b ) return console . warn ( "THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead." ) ,
this . subVectors ( a , b ) ; this . x -= a . x ; this . y -= a . y ; this . z -= a . z ; return this } , subScalar : function ( a ) { this . x -= a ; this . y -= a ; this . z -= a ; return this } , subVectors : function ( a , b ) { this . x = a . x - b . x ; this . y = a . y - b . y ; this . z = a . z - b . z ; return this } , multiply : function ( a , b ) { if ( void 0 !== b ) return console . warn ( "THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead." ) , this . multiplyVectors ( a , b ) ; this . x *= a . x ; this . y *= a . y ; this . z *= a . z ; return this } , multiplyScalar : function ( a ) { this . x *= a ; this . y *= a ; this . z *=
2019-12-11 10:47:24 +08:00
a ; return this } , multiplyVectors : function ( a , b ) { this . x = a . x * b . x ; this . y = a . y * b . y ; this . z = a . z * b . z ; return this } , applyEuler : function ( a ) { a && a . isEuler || console . error ( "THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order." ) ; return this . applyQuaternion ( pi . setFromEuler ( a ) ) } , applyAxisAngle : function ( a , b ) { return this . applyQuaternion ( pi . setFromAxisAngle ( a , b ) ) } , applyMatrix3 : function ( a ) { var b = this . x , c = this . y , d = this . z ; a = a . elements ; this . x = a [ 0 ] * b + a [ 3 ] * c + a [ 6 ] * d ; this . y = a [ 1 ] * b + a [ 4 ] * c + a [ 7 ] *
d ; this . z = a [ 2 ] * b + a [ 5 ] * c + a [ 8 ] * d ; return this } , applyNormalMatrix : function ( a ) { return this . applyMatrix3 ( a ) . normalize ( ) } , applyMatrix4 : function ( a ) { var b = this . x , c = this . y , d = this . z ; a = a . elements ; var e = 1 / ( a [ 3 ] * b + a [ 7 ] * c + a [ 11 ] * d + a [ 15 ] ) ; this . x = ( a [ 0 ] * b + a [ 4 ] * c + a [ 8 ] * d + a [ 12 ] ) * e ; this . y = ( a [ 1 ] * b + a [ 5 ] * c + a [ 9 ] * d + a [ 13 ] ) * e ; this . z = ( a [ 2 ] * b + a [ 6 ] * c + a [ 10 ] * d + a [ 14 ] ) * e ; return this } , applyQuaternion : function ( a ) { var b = this . x , c = this . y , d = this . z , e = a . x , f = a . y , g = a . z ; a = a . w ; var h = a * b + f * d - g * c , l = a * c + g * b - e * d , m = a * d + e * c - f * b ; b = - e * b - f * c - g * d ; this . x = h *
a + b * - e + l * - g - m * - f ; this . y = l * a + b * - f + m * - e - h * - g ; this . z = m * a + b * - g + h * - f - l * - e ; return this } , project : function ( a ) { return this . applyMatrix4 ( a . matrixWorldInverse ) . applyMatrix4 ( a . projectionMatrix ) } , unproject : function ( a ) { return this . applyMatrix4 ( a . projectionMatrixInverse ) . applyMatrix4 ( a . matrixWorld ) } , transformDirection : function ( a ) { var b = this . x , c = this . y , d = this . z ; a = a . elements ; this . x = a [ 0 ] * b + a [ 4 ] * c + a [ 8 ] * d ; this . y = a [ 1 ] * b + a [ 5 ] * c + a [ 9 ] * d ; this . z = a [ 2 ] * b + a [ 6 ] * c + a [ 10 ] * d ; return this . normalize ( ) } , divide : function ( a ) { this . x /= a . x ;
this . y /= a . y ; this . z /= a . z ; return this } , divideScalar : function ( a ) { return this . multiplyScalar ( 1 / a ) } , min : function ( a ) { this . x = Math . min ( this . x , a . x ) ; this . y = Math . min ( this . y , a . y ) ; this . z = Math . min ( this . z , a . z ) ; return this } , max : function ( a ) { this . x = Math . max ( this . x , a . x ) ; this . y = Math . max ( this . y , a . y ) ; this . z = Math . max ( this . z , a . z ) ; return this } , clamp : function ( a , b ) { this . x = Math . max ( a . x , Math . min ( b . x , this . x ) ) ; this . y = Math . max ( a . y , Math . min ( b . y , this . y ) ) ; this . z = Math . max ( a . z , Math . min ( b . z , this . z ) ) ; return this } , clampScalar : function ( a ,
b ) { this . x = Math . max ( a , Math . min ( b , this . x ) ) ; this . y = Math . max ( a , Math . min ( b , this . y ) ) ; this . z = Math . max ( a , Math . min ( b , this . z ) ) ; return this } , clampLength : function ( a , b ) { var c = this . length ( ) ; return this . divideScalar ( c || 1 ) . multiplyScalar ( Math . max ( a , Math . min ( b , c ) ) ) } , floor : function ( ) { this . x = Math . floor ( this . x ) ; this . y = Math . floor ( this . y ) ; this . z = Math . floor ( this . z ) ; return this } , ceil : function ( ) { this . x = Math . ceil ( this . x ) ; this . y = Math . ceil ( this . y ) ; this . z = Math . ceil ( this . z ) ; return this } , round : function ( ) { this . x = Math . round ( this . x ) ;
this . y = Math . round ( this . y ) ; this . z = Math . round ( this . z ) ; return this } , roundToZero : function ( ) { this . x = 0 > this . x ? Math . ceil ( this . x ) : Math . floor ( this . x ) ; this . y = 0 > this . y ? Math . ceil ( this . y ) : Math . floor ( this . y ) ; this . z = 0 > this . z ? Math . ceil ( this . z ) : Math . floor ( this . z ) ; return this } , negate : function ( ) { this . x = - this . x ; this . y = - this . y ; this . z = - this . z ; return this } , dot : function ( a ) { return this . x * a . x + this . y * a . y + this . z * a . z } , lengthSq : function ( ) { return this . x * this . x + this . y * this . y + this . z * this . z } , length : function ( ) { return Math . sqrt ( this . x *
this . x + this . y * this . y + this . z * this . z ) } , manhattanLength : function ( ) { return Math . abs ( this . x ) + Math . abs ( this . y ) + Math . abs ( this . z ) } , normalize : function ( ) { return this . divideScalar ( this . length ( ) || 1 ) } , setLength : function ( a ) { return this . normalize ( ) . multiplyScalar ( a ) } , lerp : function ( a , b ) { this . x += ( a . x - this . x ) * b ; this . y += ( a . y - this . y ) * b ; this . z += ( a . z - this . z ) * b ; return this } , lerpVectors : function ( a , b , c ) { return this . subVectors ( b , a ) . multiplyScalar ( c ) . add ( a ) } , cross : function ( a , b ) { return void 0 !== b ? ( console . warn ( "THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead." ) ,
this . crossVectors ( a , b ) ) : this . crossVectors ( this , a ) } , crossVectors : function ( a , b ) { var c = a . x , d = a . y ; a = a . z ; var e = b . x , f = b . y ; b = b . z ; this . x = d * b - a * f ; this . y = a * e - c * b ; this . z = c * f - d * e ; return this } , projectOnVector : function ( a ) { var b = a . dot ( this ) / a . lengthSq ( ) ; return this . copy ( a ) . multiplyScalar ( b ) } , projectOnPlane : function ( a ) { Ug . copy ( this ) . projectOnVector ( a ) ; return this . sub ( Ug ) } , reflect : function ( a ) { return this . sub ( Ug . copy ( a ) . multiplyScalar ( 2 * this . dot ( a ) ) ) } , angleTo : function ( a ) { var b = Math . sqrt ( this . lengthSq ( ) * a . lengthSq ( ) ) ;
0 === b && console . error ( "THREE.Vector3: angleTo() can't handle zero length vectors." ) ; a = this . dot ( a ) / b ; return Math . acos ( R . clamp ( a , - 1 , 1 ) ) } , distanceTo : function ( a ) { return Math . sqrt ( this . distanceToSquared ( a ) ) } , distanceToSquared : function ( a ) { var b = this . x - a . x , c = this . y - a . y ; a = this . z - a . z ; return b * b + c * c + a * a } , manhattanDistanceTo : function ( a ) { return Math . abs ( this . x - a . x ) + Math . abs ( this . y - a . y ) + Math . abs ( this . z - a . z ) } , setFromSpherical : function ( a ) { return this . setFromSphericalCoords ( a . radius , a . phi , a . theta ) } , setFromSphericalCoords : function ( a ,
b , c ) { var d = Math . sin ( b ) * a ; this . x = d * Math . sin ( c ) ; this . y = Math . cos ( b ) * a ; this . z = d * Math . cos ( c ) ; return this } , setFromCylindrical : function ( a ) { return this . setFromCylindricalCoords ( a . radius , a . theta , a . y ) } , setFromCylindricalCoords : function ( a , b , c ) { this . x = a * Math . sin ( b ) ; this . y = c ; this . z = a * Math . cos ( b ) ; return this } , setFromMatrixPosition : function ( a ) { a = a . elements ; this . x = a [ 12 ] ; this . y = a [ 13 ] ; this . z = a [ 14 ] ; return this } , setFromMatrixScale : function ( a ) { var b = this . setFromMatrixColumn ( a , 0 ) . length ( ) , c = this . setFromMatrixColumn ( a ,
1 ) . length ( ) ; a = this . setFromMatrixColumn ( a , 2 ) . length ( ) ; this . x = b ; this . y = c ; this . z = a ; return this } , setFromMatrixColumn : function ( a , b ) { return this . fromArray ( a . elements , 4 * b ) } , equals : function ( a ) { return a . x === this . x && a . y === this . y && a . z === this . z } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; this . x = a [ b ] ; this . y = a [ b + 1 ] ; this . z = a [ b + 2 ] ; return this } , toArray : function ( a , b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; a [ b ] = this . x ; a [ b + 1 ] = this . y ; a [ b + 2 ] = this . z ; return a } , fromBufferAttribute : function ( a , b , c ) { void 0 !== c && console . warn ( "THREE.Vector3: offset has been removed from .fromBufferAttribute()." ) ;
this . x = a . getX ( b ) ; this . y = a . getY ( b ) ; this . z = a . getZ ( b ) ; return this } } ) ; var oc = new n ; Object . assign ( ca . prototype , { isMatrix3 : ! 0 , set : function ( a , b , c , d , e , f , g , h , l ) { var m = this . elements ; m [ 0 ] = a ; m [ 1 ] = d ; m [ 2 ] = g ; m [ 3 ] = b ; m [ 4 ] = e ; m [ 5 ] = h ; m [ 6 ] = c ; m [ 7 ] = f ; m [ 8 ] = l ; return this } , identity : function ( ) { this . set ( 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 ) ; return this } , clone : function ( ) { return ( new this . constructor ) . fromArray ( this . elements ) } , copy : function ( a ) { var b = this . elements ; a = a . elements ; b [ 0 ] = a [ 0 ] ; b [ 1 ] = a [ 1 ] ; b [ 2 ] = a [ 2 ] ; b [ 3 ] = a [ 3 ] ; b [ 4 ] = a [ 4 ] ; b [ 5 ] = a [ 5 ] ; b [ 6 ] = a [ 6 ] ;
b [ 7 ] = a [ 7 ] ; b [ 8 ] = a [ 8 ] ; return this } , setFromMatrix4 : function ( a ) { a = a . elements ; this . set ( a [ 0 ] , a [ 4 ] , a [ 8 ] , a [ 1 ] , a [ 5 ] , a [ 9 ] , a [ 2 ] , a [ 6 ] , a [ 10 ] ) ; return this } , applyToBufferAttribute : function ( a ) { for ( var b = 0 , c = a . count ; b < c ; b ++ ) oc . x = a . getX ( b ) , oc . y = a . getY ( b ) , oc . z = a . getZ ( b ) , oc . applyMatrix3 ( this ) , a . setXYZ ( b , oc . x , oc . y , oc . z ) ; return a } , multiply : function ( a ) { return this . multiplyMatrices ( this , a ) } , premultiply : function ( a ) { return this . multiplyMatrices ( a , this ) } , multiplyMatrices : function ( a , b ) { var c = a . elements , d = b . elements ; b = this . elements ;
a = c [ 0 ] ; var e = c [ 3 ] , f = c [ 6 ] , g = c [ 1 ] , h = c [ 4 ] , l = c [ 7 ] , m = c [ 2 ] , k = c [ 5 ] ; c = c [ 8 ] ; var p = d [ 0 ] , t = d [ 3 ] , n = d [ 6 ] , q = d [ 1 ] , v = d [ 4 ] , A = d [ 7 ] , w = d [ 2 ] , x = d [ 5 ] ; d = d [ 8 ] ; b [ 0 ] = a * p + e * q + f * w ; b [ 3 ] = a * t + e * v + f * x ; b [ 6 ] = a * n + e * A + f * d ; b [ 1 ] = g * p + h * q + l * w ; b [ 4 ] = g * t + h * v + l * x ; b [ 7 ] = g * n + h * A + l * d ; b [ 2 ] = m * p + k * q + c * w ; b [ 5 ] = m * t + k * v + c * x ; b [ 8 ] = m * n + k * A + c * d ; return this } , multiplyScalar : function ( a ) { var b = this . elements ; b [ 0 ] *= a ; b [ 3 ] *= a ; b [ 6 ] *= a ; b [ 1 ] *= a ; b [ 4 ] *= a ; b [ 7 ] *= a ; b [ 2 ] *= a ; b [ 5 ] *= a ; b [ 8 ] *= a ; return this } , determinant : function ( ) { var a = this . elements , b = a [ 0 ] , c = a [ 1 ] , d = a [ 2 ] , e = a [ 3 ] ,
f = a [ 4 ] , g = a [ 5 ] , h = a [ 6 ] , l = a [ 7 ] ; a = a [ 8 ] ; return b * f * a - b * g * l - c * e * a + c * g * h + d * e * l - d * f * h } , getInverse : function ( a , b ) { a && a . isMatrix4 && console . error ( "THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument." ) ; var c = a . elements ; a = this . elements ; var d = c [ 0 ] , e = c [ 1 ] , f = c [ 2 ] , g = c [ 3 ] , h = c [ 4 ] , l = c [ 5 ] , m = c [ 6 ] , k = c [ 7 ] ; c = c [ 8 ] ; var p = c * h - l * k , t = l * m - c * g , n = k * g - h * m , q = d * p + e * t + f * n ; if ( 0 === q ) { if ( ! 0 === b ) throw Error ( "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0" ) ; console . warn ( "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0" ) ;
return this . identity ( ) } b = 1 / q ; a [ 0 ] = p * b ; a [ 1 ] = ( f * k - c * e ) * b ; a [ 2 ] = ( l * e - f * h ) * b ; a [ 3 ] = t * b ; a [ 4 ] = ( c * d - f * m ) * b ; a [ 5 ] = ( f * g - l * d ) * b ; a [ 6 ] = n * b ; a [ 7 ] = ( e * m - k * d ) * b ; a [ 8 ] = ( h * d - e * g ) * b ; return this } , transpose : function ( ) { var a = this . elements ; var b = a [ 1 ] ; a [ 1 ] = a [ 3 ] ; a [ 3 ] = b ; b = a [ 2 ] ; a [ 2 ] = a [ 6 ] ; a [ 6 ] = b ; b = a [ 5 ] ; a [ 5 ] = a [ 7 ] ; a [ 7 ] = b ; return this } , getNormalMatrix : function ( a ) { return this . setFromMatrix4 ( a ) . getInverse ( this ) . transpose ( ) } , transposeIntoArray : function ( a ) { var b = this . elements ; a [ 0 ] = b [ 0 ] ; a [ 1 ] = b [ 3 ] ; a [ 2 ] = b [ 6 ] ; a [ 3 ] = b [ 1 ] ; a [ 4 ] = b [ 4 ] ; a [ 5 ] = b [ 7 ] ; a [ 6 ] =
2019-10-25 18:42:56 +08:00
b [ 2 ] ; a [ 7 ] = b [ 5 ] ; a [ 8 ] = b [ 8 ] ; return this } , setUvTransform : function ( a , b , c , d , e , f , g ) { var h = Math . cos ( e ) ; e = Math . sin ( e ) ; this . set ( c * h , c * e , - c * ( h * f + e * g ) + f + a , - d * e , d * h , - d * ( - e * f + h * g ) + g + b , 0 , 0 , 1 ) } , scale : function ( a , b ) { var c = this . elements ; c [ 0 ] *= a ; c [ 3 ] *= a ; c [ 6 ] *= a ; c [ 1 ] *= b ; c [ 4 ] *= b ; c [ 7 ] *= b ; return this } , rotate : function ( a ) { var b = Math . cos ( a ) ; a = Math . sin ( a ) ; var c = this . elements , d = c [ 0 ] , e = c [ 3 ] , f = c [ 6 ] , g = c [ 1 ] , h = c [ 4 ] , l = c [ 7 ] ; c [ 0 ] = b * d + a * g ; c [ 3 ] = b * e + a * h ; c [ 6 ] = b * f + a * l ; c [ 1 ] = - a * d + b * g ; c [ 4 ] = - a * e + b * h ; c [ 7 ] = - a * f + b * l ; return this } , translate : function ( a ,
b ) { var c = this . elements ; c [ 0 ] += a * c [ 2 ] ; c [ 3 ] += a * c [ 5 ] ; c [ 6 ] += a * c [ 8 ] ; c [ 1 ] += b * c [ 2 ] ; c [ 4 ] += b * c [ 5 ] ; c [ 7 ] += b * c [ 8 ] ; return this } , equals : function ( a ) { var b = this . elements ; a = a . elements ; for ( var c = 0 ; 9 > c ; c ++ ) if ( b [ c ] !== a [ c ] ) return ! 1 ; return ! 0 } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; for ( var c = 0 ; 9 > c ; c ++ ) this . elements [ c ] = a [ c + b ] ; return this } , toArray : function ( a , b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; var c = this . elements ; a [ b ] = c [ 0 ] ; a [ b + 1 ] = c [ 1 ] ; a [ b + 2 ] = c [ 2 ] ; a [ b + 3 ] = c [ 3 ] ; a [ b + 4 ] = c [ 4 ] ; a [ b + 5 ] = c [ 5 ] ; a [ b + 6 ] = c [ 6 ] ; a [ b + 7 ] = c [ 7 ] ; a [ b + 8 ] = c [ 8 ] ;
2019-12-11 10:47:24 +08:00
return a } } ) ; var kd , Jb = { getDataURL : function ( a ) { if ( "undefined" == typeof HTMLCanvasElement ) return a . src ; if ( ! ( a instanceof HTMLCanvasElement ) ) { void 0 === kd && ( kd = document . createElementNS ( "http://www.w3.org/1999/xhtml" , "canvas" ) ) ; kd . width = a . width ; kd . height = a . height ; var b = kd . getContext ( "2d" ) ; a instanceof ImageData ? b . putImageData ( a , 0 , 0 ) : b . drawImage ( a , 0 , 0 , a . width , a . height ) ; a = kd } return 2048 < a . width || 2048 < a . height ? a . toDataURL ( "image/jpeg" , . 6 ) : a . toDataURL ( "image/png" ) } } , Yi = 0 ; Y . DEFAULT _IMAGE = void 0 ; Y . DEFAULT _MAPPING =
300 ; Y . prototype = Object . assign ( Object . create ( Aa . prototype ) , { constructor : Y , isTexture : ! 0 , updateMatrix : function ( ) { this . matrix . setUvTransform ( this . offset . x , this . offset . y , this . repeat . x , this . repeat . y , this . rotation , this . center . x , this . center . y ) } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . name = a . name ; this . image = a . image ; this . mipmaps = a . mipmaps . slice ( 0 ) ; this . mapping = a . mapping ; this . wrapS = a . wrapS ; this . wrapT = a . wrapT ; this . magFilter = a . magFilter ; this . minFilter = a . minFilter ; this . anisotropy =
2019-10-25 18:42:56 +08:00
a . anisotropy ; this . format = a . format ; this . type = a . type ; this . offset . copy ( a . offset ) ; this . repeat . copy ( a . repeat ) ; this . center . copy ( a . center ) ; this . rotation = a . rotation ; this . matrixAutoUpdate = a . matrixAutoUpdate ; this . matrix . copy ( a . matrix ) ; this . generateMipmaps = a . generateMipmaps ; this . premultiplyAlpha = a . premultiplyAlpha ; this . flipY = a . flipY ; this . unpackAlignment = a . unpackAlignment ; this . encoding = a . encoding ; return this } , toJSON : function ( a ) { var b = void 0 === a || "string" === typeof a ; if ( ! b && void 0 !== a . textures [ this . uuid ] ) return a . textures [ this . uuid ] ;
var c = { metadata : { version : 4.5 , type : "Texture" , generator : "Texture.toJSON" } , uuid : this . uuid , name : this . name , mapping : this . mapping , repeat : [ this . repeat . x , this . repeat . y ] , offset : [ this . offset . x , this . offset . y ] , center : [ this . center . x , this . center . y ] , rotation : this . rotation , wrap : [ this . wrapS , this . wrapT ] , format : this . format , type : this . type , encoding : this . encoding , minFilter : this . minFilter , magFilter : this . magFilter , anisotropy : this . anisotropy , flipY : this . flipY , premultiplyAlpha : this . premultiplyAlpha , unpackAlignment : this . unpackAlignment } ;
2019-12-11 10:47:24 +08:00
if ( void 0 !== this . image ) { var d = this . image ; void 0 === d . uuid && ( d . uuid = R . generateUUID ( ) ) ; if ( ! b && void 0 === a . images [ d . uuid ] ) { if ( Array . isArray ( d ) ) { var e = [ ] ; for ( var f = 0 , g = d . length ; f < g ; f ++ ) e . push ( Jb . getDataURL ( d [ f ] ) ) } else e = Jb . getDataURL ( d ) ; a . images [ d . uuid ] = { uuid : d . uuid , url : e } } c . image = d . uuid } b || ( a . textures [ this . uuid ] = c ) ; return c } , dispose : function ( ) { this . dispatchEvent ( { type : "dispose" } ) } , transformUv : function ( a ) { if ( 300 !== this . mapping ) return a ; a . applyMatrix3 ( this . matrix ) ; if ( 0 > a . x || 1 < a . x ) switch ( this . wrapS ) { case 1E3 : a . x -=
Math . floor ( a . x ) ; break ; case 1001 : a . x = 0 > a . x ? 0 : 1 ; break ; case 1002 : a . x = 1 === Math . abs ( Math . floor ( a . x ) % 2 ) ? Math . ceil ( a . x ) - a . x : a . x - Math . floor ( a . x ) } if ( 0 > a . y || 1 < a . y ) switch ( this . wrapT ) { case 1E3 : a . y -= Math . floor ( a . y ) ; break ; case 1001 : a . y = 0 > a . y ? 0 : 1 ; break ; case 1002 : a . y = 1 === Math . abs ( Math . floor ( a . y ) % 2 ) ? Math . ceil ( a . y ) - a . y : a . y - Math . floor ( a . y ) } this . flipY && ( a . y = 1 - a . y ) ; return a } } ) ; Object . defineProperty ( Y . prototype , "needsUpdate" , { set : function ( a ) { ! 0 === a && this . version ++ } } ) ; Object . defineProperties ( ba . prototype , { width : { get : function ( ) { return this . z } ,
set : function ( a ) { this . z = a } } , height : { get : function ( ) { return this . w } , set : function ( a ) { this . w = a } } } ) ; Object . assign ( ba . prototype , { isVector4 : ! 0 , set : function ( a , b , c , d ) { this . x = a ; this . y = b ; this . z = c ; this . w = d ; return this } , setScalar : function ( a ) { this . w = this . z = this . y = this . x = a ; return this } , setX : function ( a ) { this . x = a ; return this } , setY : function ( a ) { this . y = a ; return this } , setZ : function ( a ) { this . z = a ; return this } , setW : function ( a ) { this . w = a ; return this } , setComponent : function ( a , b ) { switch ( a ) { case 0 : this . x = b ; break ; case 1 : this . y = b ;
2019-10-25 18:42:56 +08:00
break ; case 2 : this . z = b ; break ; case 3 : this . w = b ; break ; default : throw Error ( "index is out of range: " + a ) ; } return this } , getComponent : function ( a ) { switch ( a ) { case 0 : return this . x ; case 1 : return this . y ; case 2 : return this . z ; case 3 : return this . w ; default : throw Error ( "index is out of range: " + a ) ; } } , clone : function ( ) { return new this . constructor ( this . x , this . y , this . z , this . w ) } , copy : function ( a ) { this . x = a . x ; this . y = a . y ; this . z = a . z ; this . w = void 0 !== a . w ? a . w : 1 ; return this } , add : function ( a , b ) { if ( void 0 !== b ) return console . warn ( "THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead." ) ,
2019-08-08 10:52:06 +08:00
this . addVectors ( a , b ) ; this . x += a . x ; this . y += a . y ; this . z += a . z ; this . w += a . w ; return this } , addScalar : function ( a ) { this . x += a ; this . y += a ; this . z += a ; this . w += a ; return this } , addVectors : function ( a , b ) { this . x = a . x + b . x ; this . y = a . y + b . y ; this . z = a . z + b . z ; this . w = a . w + b . w ; return this } , addScaledVector : function ( a , b ) { this . x += a . x * b ; this . y += a . y * b ; this . z += a . z * b ; this . w += a . w * b ; return this } , sub : function ( a , b ) { if ( void 0 !== b ) return console . warn ( "THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead." ) , this . subVectors ( a ,
b ) ; this . x -= a . x ; this . y -= a . y ; this . z -= a . z ; this . w -= a . w ; return this } , subScalar : function ( a ) { this . x -= a ; this . y -= a ; this . z -= a ; this . w -= a ; return this } , subVectors : function ( a , b ) { this . x = a . x - b . x ; this . y = a . y - b . y ; this . z = a . z - b . z ; this . w = a . w - b . w ; return this } , multiplyScalar : function ( a ) { this . x *= a ; this . y *= a ; this . z *= a ; this . w *= a ; return this } , applyMatrix4 : function ( a ) { var b = this . x , c = this . y , d = this . z , e = this . w ; a = a . elements ; this . x = a [ 0 ] * b + a [ 4 ] * c + a [ 8 ] * d + a [ 12 ] * e ; this . y = a [ 1 ] * b + a [ 5 ] * c + a [ 9 ] * d + a [ 13 ] * e ; this . z = a [ 2 ] * b + a [ 6 ] * c + a [ 10 ] * d + a [ 14 ] *
2019-10-25 18:42:56 +08:00
e ; this . w = a [ 3 ] * b + a [ 7 ] * c + a [ 11 ] * d + a [ 15 ] * e ; return this } , divideScalar : function ( a ) { return this . multiplyScalar ( 1 / a ) } , setAxisAngleFromQuaternion : function ( a ) { this . w = 2 * Math . acos ( a . w ) ; var b = Math . sqrt ( 1 - a . w * a . w ) ; 1E-4 > b ? ( this . x = 1 , this . z = this . y = 0 ) : ( this . x = a . x / b , this . y = a . y / b , this . z = a . z / b ) ; return this } , setAxisAngleFromRotationMatrix : function ( a ) { a = a . elements ; var b = a [ 0 ] ; var c = a [ 4 ] ; var d = a [ 8 ] , e = a [ 1 ] , f = a [ 5 ] , g = a [ 9 ] ; var h = a [ 2 ] ; var l = a [ 6 ] ; var m = a [ 10 ] ; if ( . 01 > Math . abs ( c - e ) && . 01 > Math . abs ( d - h ) && . 01 > Math . abs ( g - l ) ) { if ( . 1 > Math . abs ( c +
e ) && . 1 > Math . abs ( d + h ) && . 1 > Math . abs ( g + l ) && . 1 > Math . abs ( b + f + m - 3 ) ) return this . set ( 1 , 0 , 0 , 0 ) , this ; a = Math . PI ; b = ( b + 1 ) / 2 ; f = ( f + 1 ) / 2 ; m = ( m + 1 ) / 2 ; c = ( c + e ) / 4 ; d = ( d + h ) / 4 ; g = ( g + l ) / 4 ; b > f && b > m ? . 01 > b ? ( l = 0 , c = h = . 707106781 ) : ( l = Math . sqrt ( b ) , h = c / l , c = d / l ) : f > m ? . 01 > f ? ( l = . 707106781 , h = 0 , c = . 707106781 ) : ( h = Math . sqrt ( f ) , l = c / h , c = g / h ) : . 01 > m ? ( h = l = . 707106781 , c = 0 ) : ( c = Math . sqrt ( m ) , l = d / c , h = g / c ) ; this . set ( l , h , c , a ) ; return this } a = Math . sqrt ( ( l - g ) * ( l - g ) + ( d - h ) * ( d - h ) + ( e - c ) * ( e - c ) ) ; . 001 > Math . abs ( a ) && ( a = 1 ) ; this . x = ( l - g ) / a ; this . y = ( d - h ) / a ; this . z = ( e - c ) / a ;
2019-08-08 10:52:06 +08:00
this . w = Math . acos ( ( b + f + m - 1 ) / 2 ) ; return this } , min : function ( a ) { this . x = Math . min ( this . x , a . x ) ; this . y = Math . min ( this . y , a . y ) ; this . z = Math . min ( this . z , a . z ) ; this . w = Math . min ( this . w , a . w ) ; return this } , max : function ( a ) { this . x = Math . max ( this . x , a . x ) ; this . y = Math . max ( this . y , a . y ) ; this . z = Math . max ( this . z , a . z ) ; this . w = Math . max ( this . w , a . w ) ; return this } , clamp : function ( a , b ) { this . x = Math . max ( a . x , Math . min ( b . x , this . x ) ) ; this . y = Math . max ( a . y , Math . min ( b . y , this . y ) ) ; this . z = Math . max ( a . z , Math . min ( b . z , this . z ) ) ; this . w = Math . max ( a . w , Math . min ( b . w ,
2019-10-25 18:42:56 +08:00
this . w ) ) ; return this } , clampScalar : function ( a , b ) { this . x = Math . max ( a , Math . min ( b , this . x ) ) ; this . y = Math . max ( a , Math . min ( b , this . y ) ) ; this . z = Math . max ( a , Math . min ( b , this . z ) ) ; this . w = Math . max ( a , Math . min ( b , this . w ) ) ; return this } , clampLength : function ( a , b ) { var c = this . length ( ) ; return this . divideScalar ( c || 1 ) . multiplyScalar ( Math . max ( a , Math . min ( b , c ) ) ) } , floor : function ( ) { this . x = Math . floor ( this . x ) ; this . y = Math . floor ( this . y ) ; this . z = Math . floor ( this . z ) ; this . w = Math . floor ( this . w ) ; return this } , ceil : function ( ) { this . x = Math . ceil ( this . x ) ;
this . y = Math . ceil ( this . y ) ; this . z = Math . ceil ( this . z ) ; this . w = Math . ceil ( this . w ) ; return this } , round : function ( ) { this . x = Math . round ( this . x ) ; this . y = Math . round ( this . y ) ; this . z = Math . round ( this . z ) ; this . w = Math . round ( this . w ) ; return this } , roundToZero : function ( ) { this . x = 0 > this . x ? Math . ceil ( this . x ) : Math . floor ( this . x ) ; this . y = 0 > this . y ? Math . ceil ( this . y ) : Math . floor ( this . y ) ; this . z = 0 > this . z ? Math . ceil ( this . z ) : Math . floor ( this . z ) ; this . w = 0 > this . w ? Math . ceil ( this . w ) : Math . floor ( this . w ) ; return this } , negate : function ( ) { this . x = - this . x ;
this . y = - this . y ; this . z = - this . z ; this . w = - this . w ; return this } , dot : function ( a ) { return this . x * a . x + this . y * a . y + this . z * a . z + this . w * a . w } , lengthSq : function ( ) { return this . x * this . x + this . y * this . y + this . z * this . z + this . w * this . w } , length : function ( ) { return Math . sqrt ( this . x * this . x + this . y * this . y + this . z * this . z + this . w * this . w ) } , manhattanLength : function ( ) { return Math . abs ( this . x ) + Math . abs ( this . y ) + Math . abs ( this . z ) + Math . abs ( this . w ) } , normalize : function ( ) { return this . divideScalar ( this . length ( ) || 1 ) } , setLength : function ( a ) { return this . normalize ( ) . multiplyScalar ( a ) } ,
lerp : function ( a , b ) { this . x += ( a . x - this . x ) * b ; this . y += ( a . y - this . y ) * b ; this . z += ( a . z - this . z ) * b ; this . w += ( a . w - this . w ) * b ; return this } , lerpVectors : function ( a , b , c ) { return this . subVectors ( b , a ) . multiplyScalar ( c ) . add ( a ) } , equals : function ( a ) { return a . x === this . x && a . y === this . y && a . z === this . z && a . w === this . w } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; this . x = a [ b ] ; this . y = a [ b + 1 ] ; this . z = a [ b + 2 ] ; this . w = a [ b + 3 ] ; return this } , toArray : function ( a , b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; a [ b ] = this . x ; a [ b + 1 ] = this . y ; a [ b + 2 ] = this . z ; a [ b + 3 ] =
2019-12-11 10:47:24 +08:00
this . w ; return a } , fromBufferAttribute : function ( a , b , c ) { void 0 !== c && console . warn ( "THREE.Vector4: offset has been removed from .fromBufferAttribute()." ) ; this . x = a . getX ( b ) ; this . y = a . getY ( b ) ; this . z = a . getZ ( b ) ; this . w = a . getW ( b ) ; return this } } ) ; la . prototype = Object . assign ( Object . create ( Aa . prototype ) , { constructor : la , isWebGLRenderTarget : ! 0 , setSize : function ( a , b ) { if ( this . width !== a || this . height !== b ) this . width = a , this . height = b , this . texture . image . width = a , this . texture . image . height = b , this . dispose ( ) ; this . viewport . set ( 0 , 0 ,
a , b ) ; this . scissor . set ( 0 , 0 , a , b ) } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . width = a . width ; this . height = a . height ; this . viewport . copy ( a . viewport ) ; this . texture = a . texture . clone ( ) ; this . depthBuffer = a . depthBuffer ; this . stencilBuffer = a . stencilBuffer ; this . depthTexture = a . depthTexture ; return this } , dispose : function ( ) { this . dispatchEvent ( { type : "dispose" } ) } } ) ; Zf . prototype = Object . assign ( Object . create ( la . prototype ) , { constructor : Zf , isWebGLMultisampleRenderTarget : ! 0 , copy : function ( a ) { la . prototype . copy . call ( this ,
a ) ; this . samples = a . samples ; return this } } ) ; var Ka = new n , fa = new S , zk = new n ( 0 , 0 , 0 ) , Ak = new n ( 1 , 1 , 1 ) , Kb = new n , Bf = new n , ia = new n ; Object . assign ( S . prototype , { isMatrix4 : ! 0 , set : function ( a , b , c , d , e , f , g , h , l , m , k , p , t , n , q , v ) { var r = this . elements ; r [ 0 ] = a ; r [ 4 ] = b ; r [ 8 ] = c ; r [ 12 ] = d ; r [ 1 ] = e ; r [ 5 ] = f ; r [ 9 ] = g ; r [ 13 ] = h ; r [ 2 ] = l ; r [ 6 ] = m ; r [ 10 ] = k ; r [ 14 ] = p ; r [ 3 ] = t ; r [ 7 ] = n ; r [ 11 ] = q ; r [ 15 ] = v ; return this } , identity : function ( ) { this . set ( 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 ) ; return this } , clone : function ( ) { return ( new S ) . fromArray ( this . elements ) } , copy : function ( a ) { var b =
2019-10-25 18:42:56 +08:00
this . elements ; a = a . elements ; b [ 0 ] = a [ 0 ] ; b [ 1 ] = a [ 1 ] ; b [ 2 ] = a [ 2 ] ; b [ 3 ] = a [ 3 ] ; b [ 4 ] = a [ 4 ] ; b [ 5 ] = a [ 5 ] ; b [ 6 ] = a [ 6 ] ; b [ 7 ] = a [ 7 ] ; b [ 8 ] = a [ 8 ] ; b [ 9 ] = a [ 9 ] ; b [ 10 ] = a [ 10 ] ; b [ 11 ] = a [ 11 ] ; b [ 12 ] = a [ 12 ] ; b [ 13 ] = a [ 13 ] ; b [ 14 ] = a [ 14 ] ; b [ 15 ] = a [ 15 ] ; return this } , copyPosition : function ( a ) { var b = this . elements ; a = a . elements ; b [ 12 ] = a [ 12 ] ; b [ 13 ] = a [ 13 ] ; b [ 14 ] = a [ 14 ] ; return this } , extractBasis : function ( a , b , c ) { a . setFromMatrixColumn ( this , 0 ) ; b . setFromMatrixColumn ( this , 1 ) ; c . setFromMatrixColumn ( this , 2 ) ; return this } , makeBasis : function ( a , b , c ) { this . set ( a . x , b . x , c . x , 0 , a . y ,
b . y , c . y , 0 , a . z , b . z , c . z , 0 , 0 , 0 , 0 , 1 ) ; return this } , extractRotation : function ( a ) { var b = this . elements , c = a . elements , d = 1 / Ka . setFromMatrixColumn ( a , 0 ) . length ( ) , e = 1 / Ka . setFromMatrixColumn ( a , 1 ) . length ( ) ; a = 1 / Ka . setFromMatrixColumn ( a , 2 ) . length ( ) ; b [ 0 ] = c [ 0 ] * d ; b [ 1 ] = c [ 1 ] * d ; b [ 2 ] = c [ 2 ] * d ; b [ 3 ] = 0 ; b [ 4 ] = c [ 4 ] * e ; b [ 5 ] = c [ 5 ] * e ; b [ 6 ] = c [ 6 ] * e ; b [ 7 ] = 0 ; b [ 8 ] = c [ 8 ] * a ; b [ 9 ] = c [ 9 ] * a ; b [ 10 ] = c [ 10 ] * a ; b [ 11 ] = 0 ; b [ 12 ] = 0 ; b [ 13 ] = 0 ; b [ 14 ] = 0 ; b [ 15 ] = 1 ; return this } , makeRotationFromEuler : function ( a ) { a && a . isEuler || console . error ( "THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order." ) ;
var b = this . elements , c = a . x , d = a . y , e = a . z , f = Math . cos ( c ) ; c = Math . sin ( c ) ; var g = Math . cos ( d ) ; d = Math . sin ( d ) ; var h = Math . cos ( e ) ; e = Math . sin ( e ) ; if ( "XYZ" === a . order ) { a = f * h ; var l = f * e , m = c * h , k = c * e ; b [ 0 ] = g * h ; b [ 4 ] = - g * e ; b [ 8 ] = d ; b [ 1 ] = l + m * d ; b [ 5 ] = a - k * d ; b [ 9 ] = - c * g ; b [ 2 ] = k - a * d ; b [ 6 ] = m + l * d ; b [ 10 ] = f * g } else "YXZ" === a . order ? ( a = g * h , l = g * e , m = d * h , k = d * e , b [ 0 ] = a + k * c , b [ 4 ] = m * c - l , b [ 8 ] = f * d , b [ 1 ] = f * e , b [ 5 ] = f * h , b [ 9 ] = - c , b [ 2 ] = l * c - m , b [ 6 ] = k + a * c , b [ 10 ] = f * g ) : "ZXY" === a . order ? ( a = g * h , l = g * e , m = d * h , k = d * e , b [ 0 ] = a - k * c , b [ 4 ] = - f * e , b [ 8 ] = m + l * c , b [ 1 ] = l + m * c , b [ 5 ] = f * h , b [ 9 ] =
2019-12-11 10:47:24 +08:00
k - a * c , b [ 2 ] = - f * d , b [ 6 ] = c , b [ 10 ] = f * g ) : "ZYX" === a . order ? ( a = f * h , l = f * e , m = c * h , k = c * e , b [ 0 ] = g * h , b [ 4 ] = m * d - l , b [ 8 ] = a * d + k , b [ 1 ] = g * e , b [ 5 ] = k * d + a , b [ 9 ] = l * d - m , b [ 2 ] = - d , b [ 6 ] = c * g , b [ 10 ] = f * g ) : "YZX" === a . order ? ( a = f * g , l = f * d , m = c * g , k = c * d , b [ 0 ] = g * h , b [ 4 ] = k - a * e , b [ 8 ] = m * e + l , b [ 1 ] = e , b [ 5 ] = f * h , b [ 9 ] = - c * h , b [ 2 ] = - d * h , b [ 6 ] = l * e + m , b [ 10 ] = a - k * e ) : "XZY" === a . order && ( a = f * g , l = f * d , m = c * g , k = c * d , b [ 0 ] = g * h , b [ 4 ] = - e , b [ 8 ] = d * h , b [ 1 ] = a * e + k , b [ 5 ] = f * h , b [ 9 ] = l * e - m , b [ 2 ] = m * e - l , b [ 6 ] = c * h , b [ 10 ] = k * e + a ) ; b [ 3 ] = 0 ; b [ 7 ] = 0 ; b [ 11 ] = 0 ; b [ 12 ] = 0 ; b [ 13 ] = 0 ; b [ 14 ] = 0 ; b [ 15 ] = 1 ; return this } , makeRotationFromQuaternion : function ( a ) { return this . compose ( zk ,
a , Ak ) } , lookAt : function ( a , b , c ) { var d = this . elements ; ia . subVectors ( a , b ) ; 0 === ia . lengthSq ( ) && ( ia . z = 1 ) ; ia . normalize ( ) ; Kb . crossVectors ( c , ia ) ; 0 === Kb . lengthSq ( ) && ( 1 === Math . abs ( c . z ) ? ia . x += 1E-4 : ia . z += 1E-4 , ia . normalize ( ) , Kb . crossVectors ( c , ia ) ) ; Kb . normalize ( ) ; Bf . crossVectors ( ia , Kb ) ; d [ 0 ] = Kb . x ; d [ 4 ] = Bf . x ; d [ 8 ] = ia . x ; d [ 1 ] = Kb . y ; d [ 5 ] = Bf . y ; d [ 9 ] = ia . y ; d [ 2 ] = Kb . z ; d [ 6 ] = Bf . z ; d [ 10 ] = ia . z ; return this } , multiply : function ( a , b ) { return void 0 !== b ? ( console . warn ( "THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead." ) ,
this . multiplyMatrices ( a , b ) ) : this . multiplyMatrices ( this , a ) } , premultiply : function ( a ) { return this . multiplyMatrices ( a , this ) } , multiplyMatrices : function ( a , b ) { var c = a . elements , d = b . elements ; b = this . elements ; a = c [ 0 ] ; var e = c [ 4 ] , f = c [ 8 ] , g = c [ 12 ] , h = c [ 1 ] , l = c [ 5 ] , m = c [ 9 ] , k = c [ 13 ] , p = c [ 2 ] , t = c [ 6 ] , n = c [ 10 ] , q = c [ 14 ] , v = c [ 3 ] , A = c [ 7 ] , w = c [ 11 ] ; c = c [ 15 ] ; var x = d [ 0 ] , B = d [ 4 ] , G = d [ 8 ] , z = d [ 12 ] , y = d [ 1 ] , D = d [ 5 ] , E = d [ 9 ] , C = d [ 13 ] , F = d [ 2 ] , H = d [ 6 ] , K = d [ 10 ] , N = d [ 14 ] , O = d [ 3 ] , P = d [ 7 ] , Q = d [ 11 ] ; d = d [ 15 ] ; b [ 0 ] = a * x + e * y + f * F + g * O ; b [ 4 ] = a * B + e * D + f * H + g * P ; b [ 8 ] = a * G + e * E + f * K +
g * Q ; b [ 12 ] = a * z + e * C + f * N + g * d ; b [ 1 ] = h * x + l * y + m * F + k * O ; b [ 5 ] = h * B + l * D + m * H + k * P ; b [ 9 ] = h * G + l * E + m * K + k * Q ; b [ 13 ] = h * z + l * C + m * N + k * d ; b [ 2 ] = p * x + t * y + n * F + q * O ; b [ 6 ] = p * B + t * D + n * H + q * P ; b [ 10 ] = p * G + t * E + n * K + q * Q ; b [ 14 ] = p * z + t * C + n * N + q * d ; b [ 3 ] = v * x + A * y + w * F + c * O ; b [ 7 ] = v * B + A * D + w * H + c * P ; b [ 11 ] = v * G + A * E + w * K + c * Q ; b [ 15 ] = v * z + A * C + w * N + c * d ; return this } , multiplyScalar : function ( a ) { var b = this . elements ; b [ 0 ] *= a ; b [ 4 ] *= a ; b [ 8 ] *= a ; b [ 12 ] *= a ; b [ 1 ] *= a ; b [ 5 ] *= a ; b [ 9 ] *= a ; b [ 13 ] *= a ; b [ 2 ] *= a ; b [ 6 ] *= a ; b [ 10 ] *= a ; b [ 14 ] *= a ; b [ 3 ] *= a ; b [ 7 ] *= a ; b [ 11 ] *= a ; b [ 15 ] *= a ; return this } , applyToBufferAttribute : function ( a ) { for ( var b =
0 , c = a . count ; b < c ; b ++ ) Ka . x = a . getX ( b ) , Ka . y = a . getY ( b ) , Ka . z = a . getZ ( b ) , Ka . applyMatrix4 ( this ) , a . setXYZ ( b , Ka . x , Ka . y , Ka . z ) ; return a } , determinant : function ( ) { var a = this . elements , b = a [ 0 ] , c = a [ 4 ] , d = a [ 8 ] , e = a [ 12 ] , f = a [ 1 ] , g = a [ 5 ] , h = a [ 9 ] , l = a [ 13 ] , m = a [ 2 ] , k = a [ 6 ] , p = a [ 10 ] , t = a [ 14 ] ; return a [ 3 ] * ( + e * h * k - d * l * k - e * g * p + c * l * p + d * g * t - c * h * t ) + a [ 7 ] * ( + b * h * t - b * l * p + e * f * p - d * f * t + d * l * m - e * h * m ) + a [ 11 ] * ( + b * l * k - b * g * t - e * f * k + c * f * t + e * g * m - c * l * m ) + a [ 15 ] * ( - d * g * m - b * h * k + b * g * p + d * f * k - c * f * p + c * h * m ) } , transpose : function ( ) { var a = this . elements ; var b = a [ 1 ] ; a [ 1 ] = a [ 4 ] ;
a [ 4 ] = b ; b = a [ 2 ] ; a [ 2 ] = a [ 8 ] ; a [ 8 ] = b ; b = a [ 6 ] ; a [ 6 ] = a [ 9 ] ; a [ 9 ] = b ; b = a [ 3 ] ; a [ 3 ] = a [ 12 ] ; a [ 12 ] = b ; b = a [ 7 ] ; a [ 7 ] = a [ 13 ] ; a [ 13 ] = b ; b = a [ 11 ] ; a [ 11 ] = a [ 14 ] ; a [ 14 ] = b ; return this } , setPosition : function ( a , b , c ) { var d = this . elements ; a . isVector3 ? ( d [ 12 ] = a . x , d [ 13 ] = a . y , d [ 14 ] = a . z ) : ( d [ 12 ] = a , d [ 13 ] = b , d [ 14 ] = c ) ; return this } , getInverse : function ( a , b ) { var c = this . elements , d = a . elements ; a = d [ 0 ] ; var e = d [ 1 ] , f = d [ 2 ] , g = d [ 3 ] , h = d [ 4 ] , l = d [ 5 ] , m = d [ 6 ] , k = d [ 7 ] , p = d [ 8 ] , t = d [ 9 ] , n = d [ 10 ] , q = d [ 11 ] , v = d [ 12 ] , A = d [ 13 ] , w = d [ 14 ] ; d = d [ 15 ] ; var x = t * w * k - A * n * k + A * m * q - l * w * q - t * m * d + l * n * d ,
B = v * n * k - p * w * k - v * m * q + h * w * q + p * m * d - h * n * d , G = p * A * k - v * t * k + v * l * q - h * A * q - p * l * d + h * t * d , z = v * t * m - p * A * m - v * l * n + h * A * n + p * l * w - h * t * w , y = a * x + e * B + f * G + g * z ; if ( 0 === y ) { if ( ! 0 === b ) throw Error ( "THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0" ) ; console . warn ( "THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0" ) ; return this . identity ( ) } b = 1 / y ; c [ 0 ] = x * b ; c [ 1 ] = ( A * n * g - t * w * g - A * f * q + e * w * q + t * f * d - e * n * d ) * b ; c [ 2 ] = ( l * w * g - A * m * g + A * f * k - e * w * k - l * f * d + e * m * d ) * b ; c [ 3 ] = ( t * m * g - l * n * g - t * f * k + e * n * k + l * f * q - e * m * q ) * b ; c [ 4 ] = B * b ; c [ 5 ] =
( p * w * g - v * n * g + v * f * q - a * w * q - p * f * d + a * n * d ) * b ; c [ 6 ] = ( v * m * g - h * w * g - v * f * k + a * w * k + h * f * d - a * m * d ) * b ; c [ 7 ] = ( h * n * g - p * m * g + p * f * k - a * n * k - h * f * q + a * m * q ) * b ; c [ 8 ] = G * b ; c [ 9 ] = ( v * t * g - p * A * g - v * e * q + a * A * q + p * e * d - a * t * d ) * b ; c [ 10 ] = ( h * A * g - v * l * g + v * e * k - a * A * k - h * e * d + a * l * d ) * b ; c [ 11 ] = ( p * l * g - h * t * g - p * e * k + a * t * k + h * e * q - a * l * q ) * b ; c [ 12 ] = z * b ; c [ 13 ] = ( p * A * f - v * t * f + v * e * n - a * A * n - p * e * w + a * t * w ) * b ; c [ 14 ] = ( v * l * f - h * A * f - v * e * m + a * A * m + h * e * w - a * l * w ) * b ; c [ 15 ] = ( h * t * f - p * l * f + p * e * m - a * t * m - h * e * n + a * l * n ) * b ; return this } , scale : function ( a ) { var b = this . elements , c = a . x , d = a . y ; a = a . z ; b [ 0 ] *= c ;
2019-10-25 18:42:56 +08:00
b [ 4 ] *= d ; b [ 8 ] *= a ; b [ 1 ] *= c ; b [ 5 ] *= d ; b [ 9 ] *= a ; b [ 2 ] *= c ; b [ 6 ] *= d ; b [ 10 ] *= a ; b [ 3 ] *= c ; b [ 7 ] *= d ; b [ 11 ] *= a ; return this } , getMaxScaleOnAxis : function ( ) { var a = this . elements ; return Math . sqrt ( Math . max ( a [ 0 ] * a [ 0 ] + a [ 1 ] * a [ 1 ] + a [ 2 ] * a [ 2 ] , a [ 4 ] * a [ 4 ] + a [ 5 ] * a [ 5 ] + a [ 6 ] * a [ 6 ] , a [ 8 ] * a [ 8 ] + a [ 9 ] * a [ 9 ] + a [ 10 ] * a [ 10 ] ) ) } , makeTranslation : function ( a , b , c ) { this . set ( 1 , 0 , 0 , a , 0 , 1 , 0 , b , 0 , 0 , 1 , c , 0 , 0 , 0 , 1 ) ; return this } , makeRotationX : function ( a ) { var b = Math . cos ( a ) ; a = Math . sin ( a ) ; this . set ( 1 , 0 , 0 , 0 , 0 , b , - a , 0 , 0 , a , b , 0 , 0 , 0 , 0 , 1 ) ; return this } , makeRotationY : function ( a ) { var b =
Math . cos ( a ) ; a = Math . sin ( a ) ; this . set ( b , 0 , a , 0 , 0 , 1 , 0 , 0 , - a , 0 , b , 0 , 0 , 0 , 0 , 1 ) ; return this } , makeRotationZ : function ( a ) { var b = Math . cos ( a ) ; a = Math . sin ( a ) ; this . set ( b , - a , 0 , 0 , a , b , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 ) ; return this } , makeRotationAxis : function ( a , b ) { var c = Math . cos ( b ) ; b = Math . sin ( b ) ; var d = 1 - c , e = a . x , f = a . y ; a = a . z ; var g = d * e , h = d * f ; this . set ( g * e + c , g * f - b * a , g * a + b * f , 0 , g * f + b * a , h * f + c , h * a - b * e , 0 , g * a - b * f , h * a + b * e , d * a * a + c , 0 , 0 , 0 , 0 , 1 ) ; return this } , makeScale : function ( a , b , c ) { this . set ( a , 0 , 0 , 0 , 0 , b , 0 , 0 , 0 , 0 , c , 0 , 0 , 0 , 0 , 1 ) ; return this } , makeShear : function ( a ,
2019-12-11 10:47:24 +08:00
b , c ) { this . set ( 1 , b , c , 0 , a , 1 , c , 0 , a , b , 1 , 0 , 0 , 0 , 0 , 1 ) ; return this } , compose : function ( a , b , c ) { var d = this . elements , e = b . _x , f = b . _y , g = b . _z , h = b . _w , l = e + e , m = f + f , k = g + g ; b = e * l ; var p = e * m ; e *= k ; var n = f * m ; f *= k ; g *= k ; l *= h ; m *= h ; h *= k ; k = c . x ; var u = c . y ; c = c . z ; d [ 0 ] = ( 1 - ( n + g ) ) * k ; d [ 1 ] = ( p + h ) * k ; d [ 2 ] = ( e - m ) * k ; d [ 3 ] = 0 ; d [ 4 ] = ( p - h ) * u ; d [ 5 ] = ( 1 - ( b + g ) ) * u ; d [ 6 ] = ( f + l ) * u ; d [ 7 ] = 0 ; d [ 8 ] = ( e + m ) * c ; d [ 9 ] = ( f - l ) * c ; d [ 10 ] = ( 1 - ( b + n ) ) * c ; d [ 11 ] = 0 ; d [ 12 ] = a . x ; d [ 13 ] = a . y ; d [ 14 ] = a . z ; d [ 15 ] = 1 ; return this } , decompose : function ( a , b , c ) { var d = this . elements , e = Ka . set ( d [ 0 ] , d [ 1 ] , d [ 2 ] ) . length ( ) ,
f = Ka . set ( d [ 4 ] , d [ 5 ] , d [ 6 ] ) . length ( ) , g = Ka . set ( d [ 8 ] , d [ 9 ] , d [ 10 ] ) . length ( ) ; 0 > this . determinant ( ) && ( e = - e ) ; a . x = d [ 12 ] ; a . y = d [ 13 ] ; a . z = d [ 14 ] ; fa . copy ( this ) ; a = 1 / e ; d = 1 / f ; var h = 1 / g ; fa . elements [ 0 ] *= a ; fa . elements [ 1 ] *= a ; fa . elements [ 2 ] *= a ; fa . elements [ 4 ] *= d ; fa . elements [ 5 ] *= d ; fa . elements [ 6 ] *= d ; fa . elements [ 8 ] *= h ; fa . elements [ 9 ] *= h ; fa . elements [ 10 ] *= h ; b . setFromRotationMatrix ( fa ) ; c . x = e ; c . y = f ; c . z = g ; return this } , makePerspective : function ( a , b , c , d , e , f ) { void 0 === f && console . warn ( "THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs." ) ;
2019-10-25 18:42:56 +08:00
var g = this . elements ; g [ 0 ] = 2 * e / ( b - a ) ; g [ 4 ] = 0 ; g [ 8 ] = ( b + a ) / ( b - a ) ; g [ 12 ] = 0 ; g [ 1 ] = 0 ; g [ 5 ] = 2 * e / ( c - d ) ; g [ 9 ] = ( c + d ) / ( c - d ) ; g [ 13 ] = 0 ; g [ 2 ] = 0 ; g [ 6 ] = 0 ; g [ 10 ] = - ( f + e ) / ( f - e ) ; g [ 14 ] = - 2 * f * e / ( f - e ) ; g [ 3 ] = 0 ; g [ 7 ] = 0 ; g [ 11 ] = - 1 ; g [ 15 ] = 0 ; return this } , makeOrthographic : function ( a , b , c , d , e , f ) { var g = this . elements , h = 1 / ( b - a ) , l = 1 / ( c - d ) , m = 1 / ( f - e ) ; g [ 0 ] = 2 * h ; g [ 4 ] = 0 ; g [ 8 ] = 0 ; g [ 12 ] = - ( ( b + a ) * h ) ; g [ 1 ] = 0 ; g [ 5 ] = 2 * l ; g [ 9 ] = 0 ; g [ 13 ] = - ( ( c + d ) * l ) ; g [ 2 ] = 0 ; g [ 6 ] = 0 ; g [ 10 ] = - 2 * m ; g [ 14 ] = - ( ( f + e ) * m ) ; g [ 3 ] = 0 ; g [ 7 ] = 0 ; g [ 11 ] = 0 ; g [ 15 ] = 1 ; return this } , equals : function ( a ) { var b = this . elements ;
2019-12-11 10:47:24 +08:00
a = a . elements ; for ( var c = 0 ; 16 > c ; c ++ ) if ( b [ c ] !== a [ c ] ) return ! 1 ; return ! 0 } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; for ( var c = 0 ; 16 > c ; c ++ ) this . elements [ c ] = a [ c + b ] ; return this } , toArray : function ( a , b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; var c = this . elements ; a [ b ] = c [ 0 ] ; a [ b + 1 ] = c [ 1 ] ; a [ b + 2 ] = c [ 2 ] ; a [ b + 3 ] = c [ 3 ] ; a [ b + 4 ] = c [ 4 ] ; a [ b + 5 ] = c [ 5 ] ; a [ b + 6 ] = c [ 6 ] ; a [ b + 7 ] = c [ 7 ] ; a [ b + 8 ] = c [ 8 ] ; a [ b + 9 ] = c [ 9 ] ; a [ b + 10 ] = c [ 10 ] ; a [ b + 11 ] = c [ 11 ] ; a [ b + 12 ] = c [ 12 ] ; a [ b + 13 ] = c [ 13 ] ; a [ b + 14 ] = c [ 14 ] ; a [ b + 15 ] = c [ 15 ] ; return a } } ) ; var qi = new S , ri = new ua ; Pb . RotationOrders =
"XYZ YZX ZXY XZY YXZ ZYX" . split ( " " ) ; Pb . DefaultOrder = "XYZ" ; Object . defineProperties ( Pb . prototype , { x : { get : function ( ) { return this . _x } , set : function ( a ) { this . _x = a ; this . _onChangeCallback ( ) } } , y : { get : function ( ) { return this . _y } , set : function ( a ) { this . _y = a ; this . _onChangeCallback ( ) } } , z : { get : function ( ) { return this . _z } , set : function ( a ) { this . _z = a ; this . _onChangeCallback ( ) } } , order : { get : function ( ) { return this . _order } , set : function ( a ) { this . _order = a ; this . _onChangeCallback ( ) } } } ) ; Object . assign ( Pb . prototype , { isEuler : ! 0 , set : function ( a ,
b , c , d ) { this . _x = a ; this . _y = b ; this . _z = c ; this . _order = d || this . _order ; this . _onChangeCallback ( ) ; return this } , clone : function ( ) { return new this . constructor ( this . _x , this . _y , this . _z , this . _order ) } , copy : function ( a ) { this . _x = a . _x ; this . _y = a . _y ; this . _z = a . _z ; this . _order = a . _order ; this . _onChangeCallback ( ) ; return this } , setFromRotationMatrix : function ( a , b , c ) { var d = R . clamp , e = a . elements ; a = e [ 0 ] ; var f = e [ 4 ] , g = e [ 8 ] , h = e [ 1 ] , l = e [ 5 ] , m = e [ 9 ] , k = e [ 2 ] , p = e [ 6 ] ; e = e [ 10 ] ; b = b || this . _order ; "XYZ" === b ? ( this . _y = Math . asin ( d ( g , - 1 , 1 ) ) , . 9999999 > Math . abs ( g ) ?
( this . _x = Math . atan2 ( - m , e ) , this . _z = Math . atan2 ( - f , a ) ) : ( this . _x = Math . atan2 ( p , l ) , this . _z = 0 ) ) : "YXZ" === b ? ( this . _x = Math . asin ( - d ( m , - 1 , 1 ) ) , . 9999999 > Math . abs ( m ) ? ( this . _y = Math . atan2 ( g , e ) , this . _z = Math . atan2 ( h , l ) ) : ( this . _y = Math . atan2 ( - k , a ) , this . _z = 0 ) ) : "ZXY" === b ? ( this . _x = Math . asin ( d ( p , - 1 , 1 ) ) , . 9999999 > Math . abs ( p ) ? ( this . _y = Math . atan2 ( - k , e ) , this . _z = Math . atan2 ( - f , l ) ) : ( this . _y = 0 , this . _z = Math . atan2 ( h , a ) ) ) : "ZYX" === b ? ( this . _y = Math . asin ( - d ( k , - 1 , 1 ) ) , . 9999999 > Math . abs ( k ) ? ( this . _x = Math . atan2 ( p , e ) , this . _z = Math . atan2 ( h , a ) ) :
( this . _x = 0 , this . _z = Math . atan2 ( - f , l ) ) ) : "YZX" === b ? ( this . _z = Math . asin ( d ( h , - 1 , 1 ) ) , . 9999999 > Math . abs ( h ) ? ( this . _x = Math . atan2 ( - m , l ) , this . _y = Math . atan2 ( - k , a ) ) : ( this . _x = 0 , this . _y = Math . atan2 ( g , e ) ) ) : "XZY" === b ? ( this . _z = Math . asin ( - d ( f , - 1 , 1 ) ) , . 9999999 > Math . abs ( f ) ? ( this . _x = Math . atan2 ( p , l ) , this . _y = Math . atan2 ( g , a ) ) : ( this . _x = Math . atan2 ( - m , e ) , this . _y = 0 ) ) : console . warn ( "THREE.Euler: .setFromRotationMatrix() given unsupported order: " + b ) ; this . _order = b ; ! 1 !== c && this . _onChangeCallback ( ) ; return this } , setFromQuaternion : function ( a ,
b , c ) { qi . makeRotationFromQuaternion ( a ) ; return this . setFromRotationMatrix ( qi , b , c ) } , setFromVector3 : function ( a , b ) { return this . set ( a . x , a . y , a . z , b || this . _order ) } , reorder : function ( a ) { ri . setFromEuler ( this ) ; return this . setFromQuaternion ( ri , a ) } , equals : function ( a ) { return a . _x === this . _x && a . _y === this . _y && a . _z === this . _z && a . _order === this . _order } , fromArray : function ( a ) { this . _x = a [ 0 ] ; this . _y = a [ 1 ] ; this . _z = a [ 2 ] ; void 0 !== a [ 3 ] && ( this . _order = a [ 3 ] ) ; this . _onChangeCallback ( ) ; return this } , toArray : function ( a , b ) { void 0 === a && ( a =
[ ] ) ; void 0 === b && ( b = 0 ) ; a [ b ] = this . _x ; a [ b + 1 ] = this . _y ; a [ b + 2 ] = this . _z ; a [ b + 3 ] = this . _order ; return a } , toVector3 : function ( a ) { return a ? a . set ( this . _x , this . _y , this . _z ) : new n ( this . _x , this . _y , this . _z ) } , _onChange : function ( a ) { this . _onChangeCallback = a ; return this } , _onChangeCallback : function ( ) { } } ) ; Object . assign ( $f . prototype , { set : function ( a ) { this . mask = 1 << a | 0 } , enable : function ( a ) { this . mask = this . mask | 1 << a | 0 } , enableAll : function ( ) { this . mask = - 1 } , toggle : function ( a ) { this . mask ^= 1 << a | 0 } , disable : function ( a ) { this . mask &= ~ ( 1 << a |
0 ) } , disableAll : function ( ) { this . mask = 0 } , test : function ( a ) { return 0 !== ( this . mask & a . mask ) } } ) ; var Zi = 0 , si = new n , ld = new ua , vb = new S , Cf = new n , ye = new n , Bk = new n , Ck = new ua , ti = new n ( 1 , 0 , 0 ) , ui = new n ( 0 , 1 , 0 ) , vi = new n ( 0 , 0 , 1 ) , Dk = { type : "added" } , Ek = { type : "removed" } ; y . DefaultUp = new n ( 0 , 1 , 0 ) ; y . DefaultMatrixAutoUpdate = ! 0 ; y . prototype = Object . assign ( Object . create ( Aa . prototype ) , { constructor : y , isObject3D : ! 0 , onBeforeRender : function ( ) { } , onAfterRender : function ( ) { } , applyMatrix : function ( a ) { this . matrixAutoUpdate && this . updateMatrix ( ) ;
this . matrix . premultiply ( a ) ; this . matrix . decompose ( this . position , this . quaternion , this . scale ) } , applyQuaternion : function ( a ) { this . quaternion . premultiply ( a ) ; return this } , setRotationFromAxisAngle : function ( a , b ) { this . quaternion . setFromAxisAngle ( a , b ) } , setRotationFromEuler : function ( a ) { this . quaternion . setFromEuler ( a , ! 0 ) } , setRotationFromMatrix : function ( a ) { this . quaternion . setFromRotationMatrix ( a ) } , setRotationFromQuaternion : function ( a ) { this . quaternion . copy ( a ) } , rotateOnAxis : function ( a , b ) { ld . setFromAxisAngle ( a , b ) ;
this . quaternion . multiply ( ld ) ; return this } , rotateOnWorldAxis : function ( a , b ) { ld . setFromAxisAngle ( a , b ) ; this . quaternion . premultiply ( ld ) ; return this } , rotateX : function ( a ) { return this . rotateOnAxis ( ti , a ) } , rotateY : function ( a ) { return this . rotateOnAxis ( ui , a ) } , rotateZ : function ( a ) { return this . rotateOnAxis ( vi , a ) } , translateOnAxis : function ( a , b ) { si . copy ( a ) . applyQuaternion ( this . quaternion ) ; this . position . add ( si . multiplyScalar ( b ) ) ; return this } , translateX : function ( a ) { return this . translateOnAxis ( ti , a ) } , translateY : function ( a ) { return this . translateOnAxis ( ui ,
a ) } , translateZ : function ( a ) { return this . translateOnAxis ( vi , a ) } , localToWorld : function ( a ) { return a . applyMatrix4 ( this . matrixWorld ) } , worldToLocal : function ( a ) { return a . applyMatrix4 ( vb . getInverse ( this . matrixWorld ) ) } , lookAt : function ( a , b , c ) { a . isVector3 ? Cf . copy ( a ) : Cf . set ( a , b , c ) ; a = this . parent ; this . updateWorldMatrix ( ! 0 , ! 1 ) ; ye . setFromMatrixPosition ( this . matrixWorld ) ; this . isCamera || this . isLight ? vb . lookAt ( ye , Cf , this . up ) : vb . lookAt ( Cf , ye , this . up ) ; this . quaternion . setFromRotationMatrix ( vb ) ; a && ( vb . extractRotation ( a . matrixWorld ) ,
ld . setFromRotationMatrix ( vb ) , this . quaternion . premultiply ( ld . inverse ( ) ) ) } , add : function ( a ) { if ( 1 < arguments . length ) { for ( var b = 0 ; b < arguments . length ; b ++ ) this . add ( arguments [ b ] ) ; return this } if ( a === this ) return console . error ( "THREE.Object3D.add: object can't be added as a child of itself." , a ) , this ; a && a . isObject3D ? ( null !== a . parent && a . parent . remove ( a ) , a . parent = this , this . children . push ( a ) , a . dispatchEvent ( Dk ) ) : console . error ( "THREE.Object3D.add: object not an instance of THREE.Object3D." , a ) ; return this } , remove : function ( a ) { if ( 1 <
arguments . length ) { for ( var b = 0 ; b < arguments . length ; b ++ ) this . remove ( arguments [ b ] ) ; return this } b = this . children . indexOf ( a ) ; - 1 !== b && ( a . parent = null , this . children . splice ( b , 1 ) , a . dispatchEvent ( Ek ) ) ; return this } , attach : function ( a ) { this . updateWorldMatrix ( ! 0 , ! 1 ) ; vb . getInverse ( this . matrixWorld ) ; null !== a . parent && ( a . parent . updateWorldMatrix ( ! 0 , ! 1 ) , vb . multiply ( a . parent . matrixWorld ) ) ; a . applyMatrix ( vb ) ; a . updateWorldMatrix ( ! 1 , ! 1 ) ; this . add ( a ) ; return this } , getObjectById : function ( a ) { return this . getObjectByProperty ( "id" ,
2019-10-25 18:42:56 +08:00
a ) } , getObjectByName : function ( a ) { return this . getObjectByProperty ( "name" , a ) } , getObjectByProperty : function ( a , b ) { if ( this [ a ] === b ) return this ; for ( var c = 0 , d = this . children . length ; c < d ; c ++ ) { var e = this . children [ c ] . getObjectByProperty ( a , b ) ; if ( void 0 !== e ) return e } } , getWorldPosition : function ( a ) { void 0 === a && ( console . warn ( "THREE.Object3D: .getWorldPosition() target is now required" ) , a = new n ) ; this . updateMatrixWorld ( ! 0 ) ; return a . setFromMatrixPosition ( this . matrixWorld ) } , getWorldQuaternion : function ( a ) { void 0 === a && ( console . warn ( "THREE.Object3D: .getWorldQuaternion() target is now required" ) ,
2019-12-11 10:47:24 +08:00
a = new ua ) ; this . updateMatrixWorld ( ! 0 ) ; this . matrixWorld . decompose ( ye , a , Bk ) ; return a } , getWorldScale : function ( a ) { void 0 === a && ( console . warn ( "THREE.Object3D: .getWorldScale() target is now required" ) , a = new n ) ; this . updateMatrixWorld ( ! 0 ) ; this . matrixWorld . decompose ( ye , Ck , a ) ; return a } , getWorldDirection : function ( a ) { void 0 === a && ( console . warn ( "THREE.Object3D: .getWorldDirection() target is now required" ) , a = new n ) ; this . updateMatrixWorld ( ! 0 ) ; var b = this . matrixWorld . elements ; return a . set ( b [ 8 ] , b [ 9 ] , b [ 10 ] ) . normalize ( ) } ,
2019-10-25 18:42:56 +08:00
raycast : function ( ) { } , traverse : function ( a ) { a ( this ) ; for ( var b = this . children , c = 0 , d = b . length ; c < d ; c ++ ) b [ c ] . traverse ( a ) } , traverseVisible : function ( a ) { if ( ! 1 !== this . visible ) { a ( this ) ; for ( var b = this . children , c = 0 , d = b . length ; c < d ; c ++ ) b [ c ] . traverseVisible ( a ) } } , traverseAncestors : function ( a ) { var b = this . parent ; null !== b && ( a ( b ) , b . traverseAncestors ( a ) ) } , updateMatrix : function ( ) { this . matrix . compose ( this . position , this . quaternion , this . scale ) ; this . matrixWorldNeedsUpdate = ! 0 } , updateMatrixWorld : function ( a ) { this . matrixAutoUpdate &&
this . updateMatrix ( ) ; if ( this . matrixWorldNeedsUpdate || a ) null === this . parent ? this . matrixWorld . copy ( this . matrix ) : this . matrixWorld . multiplyMatrices ( this . parent . matrixWorld , this . matrix ) , this . matrixWorldNeedsUpdate = ! 1 , a = ! 0 ; for ( var b = this . children , c = 0 , d = b . length ; c < d ; c ++ ) b [ c ] . updateMatrixWorld ( a ) } , updateWorldMatrix : function ( a , b ) { var c = this . parent ; ! 0 === a && null !== c && c . updateWorldMatrix ( ! 0 , ! 1 ) ; this . matrixAutoUpdate && this . updateMatrix ( ) ; null === this . parent ? this . matrixWorld . copy ( this . matrix ) : this . matrixWorld . multiplyMatrices ( this . parent . matrixWorld ,
this . matrix ) ; if ( ! 0 === b ) for ( a = this . children , b = 0 , c = a . length ; b < c ; b ++ ) a [ b ] . updateWorldMatrix ( ! 1 , ! 0 ) } , toJSON : function ( a ) { function b ( b , c ) { void 0 === b [ c . uuid ] && ( b [ c . uuid ] = c . toJSON ( a ) ) ; return c . uuid } function c ( a ) { var b = [ ] , c ; for ( c in a ) { var d = a [ c ] ; delete d . metadata ; b . push ( d ) } return b } var d = void 0 === a || "string" === typeof a , e = { } ; d && ( a = { geometries : { } , materials : { } , textures : { } , images : { } , shapes : { } } , e . metadata = { version : 4.5 , type : "Object" , generator : "Object3D.toJSON" } ) ; var f = { } ; f . uuid = this . uuid ; f . type = this . type ; "" !==
2019-12-11 10:47:24 +08:00
this . name && ( f . name = this . name ) ; ! 0 === this . castShadow && ( f . castShadow = ! 0 ) ; ! 0 === this . receiveShadow && ( f . receiveShadow = ! 0 ) ; ! 1 === this . visible && ( f . visible = ! 1 ) ; ! 1 === this . frustumCulled && ( f . frustumCulled = ! 1 ) ; 0 !== this . renderOrder && ( f . renderOrder = this . renderOrder ) ; "{}" !== JSON . stringify ( this . userData ) && ( f . userData = this . userData ) ; f . layers = this . layers . mask ; f . matrix = this . matrix . toArray ( ) ; ! 1 === this . matrixAutoUpdate && ( f . matrixAutoUpdate = ! 1 ) ; this . isMesh && 0 !== this . drawMode && ( f . drawMode = this . drawMode ) ; this . isInstancedMesh &&
( f . type = "InstancedMesh" , f . count = this . count , f . instanceMatrix = this . instanceMatrix . toJSON ( ) ) ; if ( this . isMesh || this . isLine || this . isPoints ) { f . geometry = b ( a . geometries , this . geometry ) ; var g = this . geometry . parameters ; if ( void 0 !== g && void 0 !== g . shapes ) if ( g = g . shapes , Array . isArray ( g ) ) for ( var h = 0 , l = g . length ; h < l ; h ++ ) b ( a . shapes , g [ h ] ) ; else b ( a . shapes , g ) } if ( void 0 !== this . material ) if ( Array . isArray ( this . material ) ) { g = [ ] ; h = 0 ; for ( l = this . material . length ; h < l ; h ++ ) g . push ( b ( a . materials , this . material [ h ] ) ) ; f . material = g } else f . material =
b ( a . materials , this . material ) ; if ( 0 < this . children . length ) for ( f . children = [ ] , h = 0 ; h < this . children . length ; h ++ ) f . children . push ( this . children [ h ] . toJSON ( a ) . object ) ; if ( d ) { d = c ( a . geometries ) ; h = c ( a . materials ) ; l = c ( a . textures ) ; var m = c ( a . images ) ; g = c ( a . shapes ) ; 0 < d . length && ( e . geometries = d ) ; 0 < h . length && ( e . materials = h ) ; 0 < l . length && ( e . textures = l ) ; 0 < m . length && ( e . images = m ) ; 0 < g . length && ( e . shapes = g ) } e . object = f ; return e } , clone : function ( a ) { return ( new this . constructor ) . copy ( this , a ) } , copy : function ( a , b ) { void 0 === b && ( b = ! 0 ) ; this . name =
a . name ; this . up . copy ( a . up ) ; this . position . copy ( a . position ) ; this . quaternion . copy ( a . quaternion ) ; this . scale . copy ( a . scale ) ; this . matrix . copy ( a . matrix ) ; this . matrixWorld . copy ( a . matrixWorld ) ; this . matrixAutoUpdate = a . matrixAutoUpdate ; this . matrixWorldNeedsUpdate = a . matrixWorldNeedsUpdate ; this . layers . mask = a . layers . mask ; this . visible = a . visible ; this . castShadow = a . castShadow ; this . receiveShadow = a . receiveShadow ; this . frustumCulled = a . frustumCulled ; this . renderOrder = a . renderOrder ; this . userData = JSON . parse ( JSON . stringify ( a . userData ) ) ;
if ( ! 0 === b ) for ( b = 0 ; b < a . children . length ; b ++ ) this . add ( a . children [ b ] . clone ( ) ) ; return this } } ) ; wd . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : wd , isScene : ! 0 , copy : function ( a , b ) { y . prototype . copy . call ( this , a , b ) ; null !== a . background && ( this . background = a . background . clone ( ) ) ; null !== a . fog && ( this . fog = a . fog . clone ( ) ) ; null !== a . overrideMaterial && ( this . overrideMaterial = a . overrideMaterial . clone ( ) ) ; this . autoUpdate = a . autoUpdate ; this . matrixAutoUpdate = a . matrixAutoUpdate ; return this } , toJSON : function ( a ) { var b =
y . prototype . toJSON . call ( this , a ) ; null !== this . background && ( b . object . background = this . background . toJSON ( a ) ) ; null !== this . fog && ( b . object . fog = this . fog . toJSON ( ) ) ; return b } , dispose : function ( ) { this . dispatchEvent ( { type : "dispose" } ) } } ) ; var wb = [ new n , new n , new n , new n , new n , new n , new n , new n ] , ze = new n , Df = new Qa , md = new n , nd = new n , od = new n , Lb = new n , Mb = new n , pc = new n , Ae = new n , Ef = new n , Ff = new n , Qb = new n ; Object . assign ( Qa . prototype , { isBox3 : ! 0 , set : function ( a , b ) { this . min . copy ( a ) ; this . max . copy ( b ) ; return this } , setFromArray : function ( a ) { for ( var b =
Infinity , c = Infinity , d = Infinity , e = - Infinity , f = - Infinity , g = - Infinity , h = 0 , l = a . length ; h < l ; h += 3 ) { var m = a [ h ] , k = a [ h + 1 ] , p = a [ h + 2 ] ; m < b && ( b = m ) ; k < c && ( c = k ) ; p < d && ( d = p ) ; m > e && ( e = m ) ; k > f && ( f = k ) ; p > g && ( g = p ) } this . min . set ( b , c , d ) ; this . max . set ( e , f , g ) ; return this } , setFromBufferAttribute : function ( a ) { for ( var b = Infinity , c = Infinity , d = Infinity , e = - Infinity , f = - Infinity , g = - Infinity , h = 0 , l = a . count ; h < l ; h ++ ) { var m = a . getX ( h ) , k = a . getY ( h ) , p = a . getZ ( h ) ; m < b && ( b = m ) ; k < c && ( c = k ) ; p < d && ( d = p ) ; m > e && ( e = m ) ; k > f && ( f = k ) ; p > g && ( g = p ) } this . min . set ( b , c , d ) ;
this . max . set ( e , f , g ) ; return this } , setFromPoints : function ( a ) { this . makeEmpty ( ) ; for ( var b = 0 , c = a . length ; b < c ; b ++ ) this . expandByPoint ( a [ b ] ) ; return this } , setFromCenterAndSize : function ( a , b ) { b = ze . copy ( b ) . multiplyScalar ( . 5 ) ; this . min . copy ( a ) . sub ( b ) ; this . max . copy ( a ) . add ( b ) ; return this } , setFromObject : function ( a ) { this . makeEmpty ( ) ; return this . expandByObject ( a ) } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . min . copy ( a . min ) ; this . max . copy ( a . max ) ; return this } , makeEmpty : function ( ) { this . min . x =
this . min . y = this . min . z = Infinity ; this . max . x = this . max . y = this . max . z = - Infinity ; return this } , isEmpty : function ( ) { return this . max . x < this . min . x || this . max . y < this . min . y || this . max . z < this . min . z } , getCenter : function ( a ) { void 0 === a && ( console . warn ( "THREE.Box3: .getCenter() target is now required" ) , a = new n ) ; return this . isEmpty ( ) ? a . set ( 0 , 0 , 0 ) : a . addVectors ( this . min , this . max ) . multiplyScalar ( . 5 ) } , getSize : function ( a ) { void 0 === a && ( console . warn ( "THREE.Box3: .getSize() target is now required" ) , a = new n ) ; return this . isEmpty ( ) ?
a . set ( 0 , 0 , 0 ) : a . subVectors ( this . max , this . min ) } , expandByPoint : function ( a ) { this . min . min ( a ) ; this . max . max ( a ) ; return this } , expandByVector : function ( a ) { this . min . sub ( a ) ; this . max . add ( a ) ; return this } , expandByScalar : function ( a ) { this . min . addScalar ( - a ) ; this . max . addScalar ( a ) ; return this } , expandByObject : function ( a ) { a . updateWorldMatrix ( ! 1 , ! 1 ) ; var b = a . geometry ; void 0 !== b && ( null === b . boundingBox && b . computeBoundingBox ( ) , Df . copy ( b . boundingBox ) , Df . applyMatrix4 ( a . matrixWorld ) , this . expandByPoint ( Df . min ) , this . expandByPoint ( Df . max ) ) ;
a = a . children ; b = 0 ; for ( var c = a . length ; b < c ; b ++ ) this . expandByObject ( a [ b ] ) ; return this } , containsPoint : function ( a ) { return a . x < this . min . x || a . x > this . max . x || a . y < this . min . y || a . y > this . max . y || a . z < this . min . z || a . z > this . max . z ? ! 1 : ! 0 } , containsBox : function ( a ) { return this . min . x <= a . min . x && a . max . x <= this . max . x && this . min . y <= a . min . y && a . max . y <= this . max . y && this . min . z <= a . min . z && a . max . z <= this . max . z } , getParameter : function ( a , b ) { void 0 === b && ( console . warn ( "THREE.Box3: .getParameter() target is now required" ) , b = new n ) ; return b . set ( ( a . x -
this . min . x ) / ( this . max . x - this . min . x ) , ( a . y - this . min . y ) / ( this . max . y - this . min . y ) , ( a . z - this . min . z ) / ( this . max . z - this . min . z ) ) } , intersectsBox : function ( a ) { return a . max . x < this . min . x || a . min . x > this . max . x || a . max . y < this . min . y || a . min . y > this . max . y || a . max . z < this . min . z || a . min . z > this . max . z ? ! 1 : ! 0 } , intersectsSphere : function ( a ) { this . clampPoint ( a . center , ze ) ; return ze . distanceToSquared ( a . center ) <= a . radius * a . radius } , intersectsPlane : function ( a ) { if ( 0 < a . normal . x ) { var b = a . normal . x * this . min . x ; var c = a . normal . x * this . max . x } else b =
a . normal . x * this . max . x , c = a . normal . x * this . min . x ; 0 < a . normal . y ? ( b += a . normal . y * this . min . y , c += a . normal . y * this . max . y ) : ( b += a . normal . y * this . max . y , c += a . normal . y * this . min . y ) ; 0 < a . normal . z ? ( b += a . normal . z * this . min . z , c += a . normal . z * this . max . z ) : ( b += a . normal . z * this . max . z , c += a . normal . z * this . min . z ) ; return b <= - a . constant && c >= - a . constant } , intersectsTriangle : function ( a ) { if ( this . isEmpty ( ) ) return ! 1 ; this . getCenter ( Ae ) ; Ef . subVectors ( this . max , Ae ) ; md . subVectors ( a . a , Ae ) ; nd . subVectors ( a . b , Ae ) ; od . subVectors ( a . c , Ae ) ; Lb . subVectors ( nd ,
md ) ; Mb . subVectors ( od , nd ) ; pc . subVectors ( md , od ) ; a = [ 0 , - Lb . z , Lb . y , 0 , - Mb . z , Mb . y , 0 , - pc . z , pc . y , Lb . z , 0 , - Lb . x , Mb . z , 0 , - Mb . x , pc . z , 0 , - pc . x , - Lb . y , Lb . x , 0 , - Mb . y , Mb . x , 0 , - pc . y , pc . x , 0 ] ; if ( ! ag ( a , md , nd , od , Ef ) ) return ! 1 ; a = [ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 ] ; if ( ! ag ( a , md , nd , od , Ef ) ) return ! 1 ; Ff . crossVectors ( Lb , Mb ) ; a = [ Ff . x , Ff . y , Ff . z ] ; return ag ( a , md , nd , od , Ef ) } , clampPoint : function ( a , b ) { void 0 === b && ( console . warn ( "THREE.Box3: .clampPoint() target is now required" ) , b = new n ) ; return b . copy ( a ) . clamp ( this . min , this . max ) } , distanceToPoint : function ( a ) { return ze . copy ( a ) . clamp ( this . min ,
this . max ) . sub ( a ) . length ( ) } , getBoundingSphere : function ( a ) { void 0 === a && console . error ( "THREE.Box3: .getBoundingSphere() target is now required" ) ; this . getCenter ( a . center ) ; a . radius = . 5 * this . getSize ( ze ) . length ( ) ; return a } , intersect : function ( a ) { this . min . max ( a . min ) ; this . max . min ( a . max ) ; this . isEmpty ( ) && this . makeEmpty ( ) ; return this } , union : function ( a ) { this . min . min ( a . min ) ; this . max . max ( a . max ) ; return this } , applyMatrix4 : function ( a ) { if ( this . isEmpty ( ) ) return this ; wb [ 0 ] . set ( this . min . x , this . min . y , this . min . z ) . applyMatrix4 ( a ) ;
wb [ 1 ] . set ( this . min . x , this . min . y , this . max . z ) . applyMatrix4 ( a ) ; wb [ 2 ] . set ( this . min . x , this . max . y , this . min . z ) . applyMatrix4 ( a ) ; wb [ 3 ] . set ( this . min . x , this . max . y , this . max . z ) . applyMatrix4 ( a ) ; wb [ 4 ] . set ( this . max . x , this . min . y , this . min . z ) . applyMatrix4 ( a ) ; wb [ 5 ] . set ( this . max . x , this . min . y , this . max . z ) . applyMatrix4 ( a ) ; wb [ 6 ] . set ( this . max . x , this . max . y , this . min . z ) . applyMatrix4 ( a ) ; wb [ 7 ] . set ( this . max . x , this . max . y , this . max . z ) . applyMatrix4 ( a ) ; this . setFromPoints ( wb ) ; return this } , translate : function ( a ) { this . min . add ( a ) ; this . max . add ( a ) ;
return this } , equals : function ( a ) { return a . min . equals ( this . min ) && a . max . equals ( this . max ) } } ) ; var Fk = new Qa ; Object . assign ( mb . prototype , { set : function ( a , b ) { this . center . copy ( a ) ; this . radius = b ; return this } , setFromPoints : function ( a , b ) { var c = this . center ; void 0 !== b ? c . copy ( b ) : Fk . setFromPoints ( a ) . getCenter ( c ) ; for ( var d = b = 0 , e = a . length ; d < e ; d ++ ) b = Math . max ( b , c . distanceToSquared ( a [ d ] ) ) ; this . radius = Math . sqrt ( b ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . center . copy ( a . center ) ;
this . radius = a . radius ; return this } , empty : function ( ) { return 0 >= this . radius } , containsPoint : function ( a ) { return a . distanceToSquared ( this . center ) <= this . radius * this . radius } , distanceToPoint : function ( a ) { return a . distanceTo ( this . center ) - this . radius } , intersectsSphere : function ( a ) { var b = this . radius + a . radius ; return a . center . distanceToSquared ( this . center ) <= b * b } , intersectsBox : function ( a ) { return a . intersectsSphere ( this ) } , intersectsPlane : function ( a ) { return Math . abs ( a . distanceToPoint ( this . center ) ) <= this . radius } , clampPoint : function ( a ,
b ) { var c = this . center . distanceToSquared ( a ) ; void 0 === b && ( console . warn ( "THREE.Sphere: .clampPoint() target is now required" ) , b = new n ) ; b . copy ( a ) ; c > this . radius * this . radius && ( b . sub ( this . center ) . normalize ( ) , b . multiplyScalar ( this . radius ) . add ( this . center ) ) ; return b } , getBoundingBox : function ( a ) { void 0 === a && ( console . warn ( "THREE.Sphere: .getBoundingBox() target is now required" ) , a = new Qa ) ; a . set ( this . center , this . center ) ; a . expandByScalar ( this . radius ) ; return a } , applyMatrix4 : function ( a ) { this . center . applyMatrix4 ( a ) ;
this . radius *= a . getMaxScaleOnAxis ( ) ; return this } , translate : function ( a ) { this . center . add ( a ) ; return this } , equals : function ( a ) { return a . center . equals ( this . center ) && a . radius === this . radius } } ) ; var xb = new n , Vg = new n , Gf = new n , Nb = new n , Wg = new n , Hf = new n , Xg = new n ; Object . assign ( Rb . prototype , { set : function ( a , b ) { this . origin . copy ( a ) ; this . direction . copy ( b ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . origin . copy ( a . origin ) ; this . direction . copy ( a . direction ) ; return this } ,
at : function ( a , b ) { void 0 === b && ( console . warn ( "THREE.Ray: .at() target is now required" ) , b = new n ) ; return b . copy ( this . direction ) . multiplyScalar ( a ) . add ( this . origin ) } , lookAt : function ( a ) { this . direction . copy ( a ) . sub ( this . origin ) . normalize ( ) ; return this } , recast : function ( a ) { this . origin . copy ( this . at ( a , xb ) ) ; return this } , closestPointToPoint : function ( a , b ) { void 0 === b && ( console . warn ( "THREE.Ray: .closestPointToPoint() target is now required" ) , b = new n ) ; b . subVectors ( a , this . origin ) ; a = b . dot ( this . direction ) ; return 0 > a ?
b . copy ( this . origin ) : b . copy ( this . direction ) . multiplyScalar ( a ) . add ( this . origin ) } , distanceToPoint : function ( a ) { return Math . sqrt ( this . distanceSqToPoint ( a ) ) } , distanceSqToPoint : function ( a ) { var b = xb . subVectors ( a , this . origin ) . dot ( this . direction ) ; if ( 0 > b ) return this . origin . distanceToSquared ( a ) ; xb . copy ( this . direction ) . multiplyScalar ( b ) . add ( this . origin ) ; return xb . distanceToSquared ( a ) } , distanceSqToSegment : function ( a , b , c , d ) { Vg . copy ( a ) . add ( b ) . multiplyScalar ( . 5 ) ; Gf . copy ( b ) . sub ( a ) . normalize ( ) ; Nb . copy ( this . origin ) . sub ( Vg ) ;
var e = . 5 * a . distanceTo ( b ) , f = - this . direction . dot ( Gf ) , g = Nb . dot ( this . direction ) , h = - Nb . dot ( Gf ) , l = Nb . lengthSq ( ) , m = Math . abs ( 1 - f * f ) ; if ( 0 < m ) { a = f * h - g ; b = f * g - h ; var k = e * m ; 0 <= a ? b >= - k ? b <= k ? ( e = 1 / m , a *= e , b *= e , f = a * ( a + f * b + 2 * g ) + b * ( f * a + b + 2 * h ) + l ) : ( b = e , a = Math . max ( 0 , - ( f * b + g ) ) , f = - a * a + b * ( b + 2 * h ) + l ) : ( b = - e , a = Math . max ( 0 , - ( f * b + g ) ) , f = - a * a + b * ( b + 2 * h ) + l ) : b <= - k ? ( a = Math . max ( 0 , - ( - f * e + g ) ) , b = 0 < a ? - e : Math . min ( Math . max ( - e , - h ) , e ) , f = - a * a + b * ( b + 2 * h ) + l ) : b <= k ? ( a = 0 , b = Math . min ( Math . max ( - e , - h ) , e ) , f = b * ( b + 2 * h ) + l ) : ( a = Math . max ( 0 , - ( f * e + g ) ) , b = 0 < a ? e : Math . min ( Math . max ( - e ,
- h ) , e ) , f = - a * a + b * ( b + 2 * h ) + l ) } else b = 0 < f ? - e : e , a = Math . max ( 0 , - ( f * b + g ) ) , f = - a * a + b * ( b + 2 * h ) + l ; c && c . copy ( this . direction ) . multiplyScalar ( a ) . add ( this . origin ) ; d && d . copy ( Gf ) . multiplyScalar ( b ) . add ( Vg ) ; return f } , intersectSphere : function ( a , b ) { xb . subVectors ( a . center , this . origin ) ; var c = xb . dot ( this . direction ) , d = xb . dot ( xb ) - c * c ; a = a . radius * a . radius ; if ( d > a ) return null ; a = Math . sqrt ( a - d ) ; d = c - a ; c += a ; return 0 > d && 0 > c ? null : 0 > d ? this . at ( c , b ) : this . at ( d , b ) } , intersectsSphere : function ( a ) { return this . distanceSqToPoint ( a . center ) <= a . radius *
a . radius } , distanceToPlane : function ( a ) { var b = a . normal . dot ( this . direction ) ; if ( 0 === b ) return 0 === a . distanceToPoint ( this . origin ) ? 0 : null ; a = - ( this . origin . dot ( a . normal ) + a . constant ) / b ; return 0 <= a ? a : null } , intersectPlane : function ( a , b ) { a = this . distanceToPlane ( a ) ; return null === a ? null : this . at ( a , b ) } , intersectsPlane : function ( a ) { var b = a . distanceToPoint ( this . origin ) ; return 0 === b || 0 > a . normal . dot ( this . direction ) * b ? ! 0 : ! 1 } , intersectBox : function ( a , b ) { var c = 1 / this . direction . x ; var d = 1 / this . direction . y ; var e = 1 / this . direction . z ,
f = this . origin ; if ( 0 <= c ) { var g = ( a . min . x - f . x ) * c ; c *= a . max . x - f . x } else g = ( a . max . x - f . x ) * c , c *= a . min . x - f . x ; if ( 0 <= d ) { var h = ( a . min . y - f . y ) * d ; d *= a . max . y - f . y } else h = ( a . max . y - f . y ) * d , d *= a . min . y - f . y ; if ( g > d || h > c ) return null ; if ( h > g || g !== g ) g = h ; if ( d < c || c !== c ) c = d ; 0 <= e ? ( h = ( a . min . z - f . z ) * e , a = ( a . max . z - f . z ) * e ) : ( h = ( a . max . z - f . z ) * e , a = ( a . min . z - f . z ) * e ) ; if ( g > a || h > c ) return null ; if ( h > g || g !== g ) g = h ; if ( a < c || c !== c ) c = a ; return 0 > c ? null : this . at ( 0 <= g ? g : c , b ) } , intersectsBox : function ( a ) { return null !== this . intersectBox ( a , xb ) } , intersectTriangle : function ( a ,
b , c , d , e ) { Wg . subVectors ( b , a ) ; Hf . subVectors ( c , a ) ; Xg . crossVectors ( Wg , Hf ) ; b = this . direction . dot ( Xg ) ; if ( 0 < b ) { if ( d ) return null ; d = 1 } else if ( 0 > b ) d = - 1 , b = - b ; else return null ; Nb . subVectors ( this . origin , a ) ; a = d * this . direction . dot ( Hf . crossVectors ( Nb , Hf ) ) ; if ( 0 > a ) return null ; c = d * this . direction . dot ( Wg . cross ( Nb ) ) ; if ( 0 > c || a + c > b ) return null ; a = - d * Nb . dot ( Xg ) ; return 0 > a ? null : this . at ( a / b , e ) } , applyMatrix4 : function ( a ) { this . origin . applyMatrix4 ( a ) ; this . direction . transformDirection ( a ) ; return this } , equals : function ( a ) { return a . origin . equals ( this . origin ) &&
a . direction . equals ( this . direction ) } } ) ; var Yg = new n , Gk = new n , Hk = new ca ; Object . assign ( Ra . prototype , { isPlane : ! 0 , set : function ( a , b ) { this . normal . copy ( a ) ; this . constant = b ; return this } , setComponents : function ( a , b , c , d ) { this . normal . set ( a , b , c ) ; this . constant = d ; return this } , setFromNormalAndCoplanarPoint : function ( a , b ) { this . normal . copy ( a ) ; this . constant = - b . dot ( this . normal ) ; return this } , setFromCoplanarPoints : function ( a , b , c ) { b = Yg . subVectors ( c , b ) . cross ( Gk . subVectors ( a , b ) ) . normalize ( ) ; this . setFromNormalAndCoplanarPoint ( b ,
a ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . normal . copy ( a . normal ) ; this . constant = a . constant ; return this } , normalize : function ( ) { var a = 1 / this . normal . length ( ) ; this . normal . multiplyScalar ( a ) ; this . constant *= a ; return this } , negate : function ( ) { this . constant *= - 1 ; this . normal . negate ( ) ; return this } , distanceToPoint : function ( a ) { return this . normal . dot ( a ) + this . constant } , distanceToSphere : function ( a ) { return this . distanceToPoint ( a . center ) - a . radius } , projectPoint : function ( a ,
b ) { void 0 === b && ( console . warn ( "THREE.Plane: .projectPoint() target is now required" ) , b = new n ) ; return b . copy ( this . normal ) . multiplyScalar ( - this . distanceToPoint ( a ) ) . add ( a ) } , intersectLine : function ( a , b ) { void 0 === b && ( console . warn ( "THREE.Plane: .intersectLine() target is now required" ) , b = new n ) ; var c = a . delta ( Yg ) , d = this . normal . dot ( c ) ; if ( 0 === d ) { if ( 0 === this . distanceToPoint ( a . start ) ) return b . copy ( a . start ) } else if ( d = - ( a . start . dot ( this . normal ) + this . constant ) / d , ! ( 0 > d || 1 < d ) ) return b . copy ( c ) . multiplyScalar ( d ) . add ( a . start ) } ,
intersectsLine : function ( a ) { var b = this . distanceToPoint ( a . start ) ; a = this . distanceToPoint ( a . end ) ; return 0 > b && 0 < a || 0 > a && 0 < b } , intersectsBox : function ( a ) { return a . intersectsPlane ( this ) } , intersectsSphere : function ( a ) { return a . intersectsPlane ( this ) } , coplanarPoint : function ( a ) { void 0 === a && ( console . warn ( "THREE.Plane: .coplanarPoint() target is now required" ) , a = new n ) ; return a . copy ( this . normal ) . multiplyScalar ( - this . constant ) } , applyMatrix4 : function ( a , b ) { b = b || Hk . getNormalMatrix ( a ) ; a = this . coplanarPoint ( Yg ) . applyMatrix4 ( a ) ;
b = this . normal . applyMatrix3 ( b ) . normalize ( ) ; this . constant = - a . dot ( b ) ; return this } , translate : function ( a ) { this . constant -= a . dot ( this . normal ) ; return this } , equals : function ( a ) { return a . normal . equals ( this . normal ) && a . constant === this . constant } } ) ; var ab = new n , yb = new n , Zg = new n , zb = new n , pd = new n , qd = new n , wi = new n , $g = new n , ah = new n , bh = new n ; Object . assign ( ma , { getNormal : function ( a , b , c , d ) { void 0 === d && ( console . warn ( "THREE.Triangle: .getNormal() target is now required" ) , d = new n ) ; d . subVectors ( c , b ) ; ab . subVectors ( a , b ) ;
d . cross ( ab ) ; a = d . lengthSq ( ) ; return 0 < a ? d . multiplyScalar ( 1 / Math . sqrt ( a ) ) : d . set ( 0 , 0 , 0 ) } , getBarycoord : function ( a , b , c , d , e ) { ab . subVectors ( d , b ) ; yb . subVectors ( c , b ) ; Zg . subVectors ( a , b ) ; a = ab . dot ( ab ) ; b = ab . dot ( yb ) ; c = ab . dot ( Zg ) ; var f = yb . dot ( yb ) ; d = yb . dot ( Zg ) ; var g = a * f - b * b ; void 0 === e && ( console . warn ( "THREE.Triangle: .getBarycoord() target is now required" ) , e = new n ) ; if ( 0 === g ) return e . set ( - 2 , - 1 , - 1 ) ; g = 1 / g ; f = ( f * c - b * d ) * g ; a = ( a * d - b * c ) * g ; return e . set ( 1 - f - a , a , f ) } , containsPoint : function ( a , b , c , d ) { ma . getBarycoord ( a , b , c , d , zb ) ;
return 0 <= zb . x && 0 <= zb . y && 1 >= zb . x + zb . y } , getUV : function ( a , b , c , d , e , f , g , h ) { this . getBarycoord ( a , b , c , d , zb ) ; h . set ( 0 , 0 ) ; h . addScaledVector ( e , zb . x ) ; h . addScaledVector ( f , zb . y ) ; h . addScaledVector ( g , zb . z ) ; return h } , isFrontFacing : function ( a , b , c , d ) { ab . subVectors ( c , b ) ; yb . subVectors ( a , b ) ; return 0 > ab . cross ( yb ) . dot ( d ) ? ! 0 : ! 1 } } ) ; Object . assign ( ma . prototype , { set : function ( a , b , c ) { this . a . copy ( a ) ; this . b . copy ( b ) ; this . c . copy ( c ) ; return this } , setFromPointsAndIndices : function ( a , b , c , d ) { this . a . copy ( a [ b ] ) ; this . b . copy ( a [ c ] ) ; this . c . copy ( a [ d ] ) ;
return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . a . copy ( a . a ) ; this . b . copy ( a . b ) ; this . c . copy ( a . c ) ; return this } , getArea : function ( ) { ab . subVectors ( this . c , this . b ) ; yb . subVectors ( this . a , this . b ) ; return . 5 * ab . cross ( yb ) . length ( ) } , getMidpoint : function ( a ) { void 0 === a && ( console . warn ( "THREE.Triangle: .getMidpoint() target is now required" ) , a = new n ) ; return a . addVectors ( this . a , this . b ) . add ( this . c ) . multiplyScalar ( 1 / 3 ) } , getNormal : function ( a ) { return ma . getNormal ( this . a , this . b ,
this . c , a ) } , getPlane : function ( a ) { void 0 === a && ( console . warn ( "THREE.Triangle: .getPlane() target is now required" ) , a = new Ra ) ; return a . setFromCoplanarPoints ( this . a , this . b , this . c ) } , getBarycoord : function ( a , b ) { return ma . getBarycoord ( a , this . a , this . b , this . c , b ) } , getUV : function ( a , b , c , d , e ) { return ma . getUV ( a , this . a , this . b , this . c , b , c , d , e ) } , containsPoint : function ( a ) { return ma . containsPoint ( a , this . a , this . b , this . c ) } , isFrontFacing : function ( a ) { return ma . isFrontFacing ( this . a , this . b , this . c , a ) } , intersectsBox : function ( a ) { return a . intersectsTriangle ( this ) } ,
closestPointToPoint : function ( a , b ) { void 0 === b && ( console . warn ( "THREE.Triangle: .closestPointToPoint() target is now required" ) , b = new n ) ; var c = this . a , d = this . b , e = this . c ; pd . subVectors ( d , c ) ; qd . subVectors ( e , c ) ; $g . subVectors ( a , c ) ; var f = pd . dot ( $g ) , g = qd . dot ( $g ) ; if ( 0 >= f && 0 >= g ) return b . copy ( c ) ; ah . subVectors ( a , d ) ; var h = pd . dot ( ah ) , l = qd . dot ( ah ) ; if ( 0 <= h && l <= h ) return b . copy ( d ) ; var m = f * l - h * g ; if ( 0 >= m && 0 <= f && 0 >= h ) return d = f / ( f - h ) , b . copy ( c ) . addScaledVector ( pd , d ) ; bh . subVectors ( a , e ) ; a = pd . dot ( bh ) ; var k = qd . dot ( bh ) ; if ( 0 <=
k && a <= k ) return b . copy ( e ) ; f = a * g - f * k ; if ( 0 >= f && 0 <= g && 0 >= k ) return m = g / ( g - k ) , b . copy ( c ) . addScaledVector ( qd , m ) ; g = h * k - a * l ; if ( 0 >= g && 0 <= l - h && 0 <= a - k ) return wi . subVectors ( e , d ) , m = ( l - h ) / ( l - h + ( a - k ) ) , b . copy ( d ) . addScaledVector ( wi , m ) ; e = 1 / ( g + f + m ) ; d = f * e ; m *= e ; return b . copy ( c ) . addScaledVector ( pd , d ) . addScaledVector ( qd , m ) } , equals : function ( a ) { return a . a . equals ( this . a ) && a . b . equals ( this . b ) && a . c . equals ( this . c ) } } ) ; var xi = { aliceblue : 15792383 , antiquewhite : 16444375 , aqua : 65535 , aquamarine : 8388564 , azure : 15794175 , beige : 16119260 , bisque : 16770244 ,
black : 0 , blanchedalmond : 16772045 , blue : 255 , blueviolet : 9055202 , brown : 10824234 , burlywood : 14596231 , cadetblue : 6266528 , chartreuse : 8388352 , chocolate : 13789470 , coral : 16744272 , cornflowerblue : 6591981 , cornsilk : 16775388 , crimson : 14423100 , cyan : 65535 , darkblue : 139 , darkcyan : 35723 , darkgoldenrod : 12092939 , darkgray : 11119017 , darkgreen : 25600 , darkgrey : 11119017 , darkkhaki : 12433259 , darkmagenta : 9109643 , darkolivegreen : 5597999 , darkorange : 16747520 , darkorchid : 10040012 , darkred : 9109504 , darksalmon : 15308410 , darkseagreen : 9419919 , darkslateblue : 4734347 ,
darkslategray : 3100495 , darkslategrey : 3100495 , darkturquoise : 52945 , darkviolet : 9699539 , deeppink : 16716947 , deepskyblue : 49151 , dimgray : 6908265 , dimgrey : 6908265 , dodgerblue : 2003199 , firebrick : 11674146 , floralwhite : 16775920 , forestgreen : 2263842 , fuchsia : 16711935 , gainsboro : 14474460 , ghostwhite : 16316671 , gold : 16766720 , goldenrod : 14329120 , gray : 8421504 , green : 32768 , greenyellow : 11403055 , grey : 8421504 , honeydew : 15794160 , hotpink : 16738740 , indianred : 13458524 , indigo : 4915330 , ivory : 16777200 , khaki : 15787660 , lavender : 15132410 , lavenderblush : 16773365 ,
lawngreen : 8190976 , lemonchiffon : 16775885 , lightblue : 11393254 , lightcoral : 15761536 , lightcyan : 14745599 , lightgoldenrodyellow : 16448210 , lightgray : 13882323 , lightgreen : 9498256 , lightgrey : 13882323 , lightpink : 16758465 , lightsalmon : 16752762 , lightseagreen : 2142890 , lightskyblue : 8900346 , lightslategray : 7833753 , lightslategrey : 7833753 , lightsteelblue : 11584734 , lightyellow : 16777184 , lime : 65280 , limegreen : 3329330 , linen : 16445670 , magenta : 16711935 , maroon : 8388608 , mediumaquamarine : 6737322 , mediumblue : 205 , mediumorchid : 12211667 , mediumpurple : 9662683 ,
mediumseagreen : 3978097 , mediumslateblue : 8087790 , mediumspringgreen : 64154 , mediumturquoise : 4772300 , mediumvioletred : 13047173 , midnightblue : 1644912 , mintcream : 16121850 , mistyrose : 16770273 , moccasin : 16770229 , navajowhite : 16768685 , navy : 128 , oldlace : 16643558 , olive : 8421376 , olivedrab : 7048739 , orange : 16753920 , orangered : 16729344 , orchid : 14315734 , palegoldenrod : 15657130 , palegreen : 10025880 , paleturquoise : 11529966 , palevioletred : 14381203 , papayawhip : 16773077 , peachpuff : 16767673 , peru : 13468991 , pink : 16761035 , plum : 14524637 , powderblue : 11591910 ,
purple : 8388736 , rebeccapurple : 6697881 , red : 16711680 , rosybrown : 12357519 , royalblue : 4286945 , saddlebrown : 9127187 , salmon : 16416882 , sandybrown : 16032864 , seagreen : 3050327 , seashell : 16774638 , sienna : 10506797 , silver : 12632256 , skyblue : 8900331 , slateblue : 6970061 , slategray : 7372944 , slategrey : 7372944 , snow : 16775930 , springgreen : 65407 , steelblue : 4620980 , tan : 13808780 , teal : 32896 , thistle : 14204888 , tomato : 16737095 , turquoise : 4251856 , violet : 15631086 , wheat : 16113331 , white : 16777215 , whitesmoke : 16119285 , yellow : 16776960 , yellowgreen : 10145074 } ,
Fa = { h : 0 , s : 0 , l : 0 } , If = { h : 0 , s : 0 , l : 0 } ; Object . assign ( H . prototype , { isColor : ! 0 , r : 1 , g : 1 , b : 1 , set : function ( a ) { a && a . isColor ? this . copy ( a ) : "number" === typeof a ? this . setHex ( a ) : "string" === typeof a && this . setStyle ( a ) ; return this } , setScalar : function ( a ) { this . b = this . g = this . r = a ; return this } , setHex : function ( a ) { a = Math . floor ( a ) ; this . r = ( a >> 16 & 255 ) / 255 ; this . g = ( a >> 8 & 255 ) / 255 ; this . b = ( a & 255 ) / 255 ; return this } , setRGB : function ( a , b , c ) { this . r = a ; this . g = b ; this . b = c ; return this } , setHSL : function ( a , b , c ) { a = R . euclideanModulo ( a , 1 ) ; b = R . clamp ( b ,
0 , 1 ) ; c = R . clamp ( c , 0 , 1 ) ; 0 === b ? this . r = this . g = this . b = c : ( b = . 5 >= c ? c * ( 1 + b ) : c + b - c * b , c = 2 * c - b , this . r = bg ( c , b , a + 1 / 3 ) , this . g = bg ( c , b , a ) , this . b = bg ( c , b , a - 1 / 3 ) ) ; return this } , setStyle : function ( a ) { function b ( b ) { void 0 !== b && 1 > parseFloat ( b ) && console . warn ( "THREE.Color: Alpha component of " + a + " will be ignored." ) } var c ; if ( c = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/ . exec ( a ) ) { var d = c [ 2 ] ; switch ( c [ 1 ] ) { case "rgb" : case "rgba" : if ( c = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/ . exec ( d ) ) return this . r = Math . min ( 255 , parseInt ( c [ 1 ] ,
10 ) ) / 255 , this . g = Math . min ( 255 , parseInt ( c [ 2 ] , 10 ) ) / 255 , this . b = Math . min ( 255 , parseInt ( c [ 3 ] , 10 ) ) / 255 , b ( c [ 5 ] ) , this ; if ( c = /^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/ . exec ( d ) ) return this . r = Math . min ( 100 , parseInt ( c [ 1 ] , 10 ) ) / 100 , this . g = Math . min ( 100 , parseInt ( c [ 2 ] , 10 ) ) / 100 , this . b = Math . min ( 100 , parseInt ( c [ 3 ] , 10 ) ) / 100 , b ( c [ 5 ] ) , this ; break ; case "hsl" : case "hsla" : if ( c = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/ . exec ( d ) ) { d = parseFloat ( c [ 1 ] ) / 360 ; var e = parseInt ( c [ 2 ] ,
10 ) / 100 , f = parseInt ( c [ 3 ] , 10 ) / 100 ; b ( c [ 5 ] ) ; return this . setHSL ( d , e , f ) } } } else if ( c = /^#([A-Fa-f0-9]+)$/ . exec ( a ) ) { c = c [ 1 ] ; d = c . length ; if ( 3 === d ) return this . r = parseInt ( c . charAt ( 0 ) + c . charAt ( 0 ) , 16 ) / 255 , this . g = parseInt ( c . charAt ( 1 ) + c . charAt ( 1 ) , 16 ) / 255 , this . b = parseInt ( c . charAt ( 2 ) + c . charAt ( 2 ) , 16 ) / 255 , this ; if ( 6 === d ) return this . r = parseInt ( c . charAt ( 0 ) + c . charAt ( 1 ) , 16 ) / 255 , this . g = parseInt ( c . charAt ( 2 ) + c . charAt ( 3 ) , 16 ) / 255 , this . b = parseInt ( c . charAt ( 4 ) + c . charAt ( 5 ) , 16 ) / 255 , this } return a && 0 < a . length ? this . setColorName ( a ) : this } ,
setColorName : function ( a ) { var b = xi [ a ] ; void 0 !== b ? this . setHex ( b ) : console . warn ( "THREE.Color: Unknown color " + a ) ; return this } , clone : function ( ) { return new this . constructor ( this . r , this . g , this . b ) } , copy : function ( a ) { this . r = a . r ; this . g = a . g ; this . b = a . b ; return this } , copyGammaToLinear : function ( a , b ) { void 0 === b && ( b = 2 ) ; this . r = Math . pow ( a . r , b ) ; this . g = Math . pow ( a . g , b ) ; this . b = Math . pow ( a . b , b ) ; return this } , copyLinearToGamma : function ( a , b ) { void 0 === b && ( b = 2 ) ; b = 0 < b ? 1 / b : 1 ; this . r = Math . pow ( a . r , b ) ; this . g = Math . pow ( a . g , b ) ; this . b = Math . pow ( a . b ,
b ) ; return this } , convertGammaToLinear : function ( a ) { this . copyGammaToLinear ( this , a ) ; return this } , convertLinearToGamma : function ( a ) { this . copyLinearToGamma ( this , a ) ; return this } , copySRGBToLinear : function ( a ) { this . r = cg ( a . r ) ; this . g = cg ( a . g ) ; this . b = cg ( a . b ) ; return this } , copyLinearToSRGB : function ( a ) { this . r = dg ( a . r ) ; this . g = dg ( a . g ) ; this . b = dg ( a . b ) ; return this } , convertSRGBToLinear : function ( ) { this . copySRGBToLinear ( this ) ; return this } , convertLinearToSRGB : function ( ) { this . copyLinearToSRGB ( this ) ; return this } , getHex : function ( ) { return 255 *
this . r << 16 ^ 255 * this . g << 8 ^ 255 * this . b << 0 } , getHexString : function ( ) { return ( "000000" + this . getHex ( ) . toString ( 16 ) ) . slice ( - 6 ) } , getHSL : function ( a ) { void 0 === a && ( console . warn ( "THREE.Color: .getHSL() target is now required" ) , a = { h : 0 , s : 0 , l : 0 } ) ; var b = this . r , c = this . g , d = this . b , e = Math . max ( b , c , d ) , f = Math . min ( b , c , d ) , g , h = ( f + e ) / 2 ; if ( f === e ) f = g = 0 ; else { var l = e - f ; f = . 5 >= h ? l / ( e + f ) : l / ( 2 - e - f ) ; switch ( e ) { case b : g = ( c - d ) / l + ( c < d ? 6 : 0 ) ; break ; case c : g = ( d - b ) / l + 2 ; break ; case d : g = ( b - c ) / l + 4 } g /= 6 } a . h = g ; a . s = f ; a . l = h ; return a } , getStyle : function ( ) { return "rgb(" +
( 255 * this . r | 0 ) + "," + ( 255 * this . g | 0 ) + "," + ( 255 * this . b | 0 ) + ")" } , offsetHSL : function ( a , b , c ) { this . getHSL ( Fa ) ; Fa . h += a ; Fa . s += b ; Fa . l += c ; this . setHSL ( Fa . h , Fa . s , Fa . l ) ; return this } , add : function ( a ) { this . r += a . r ; this . g += a . g ; this . b += a . b ; return this } , addColors : function ( a , b ) { this . r = a . r + b . r ; this . g = a . g + b . g ; this . b = a . b + b . b ; return this } , addScalar : function ( a ) { this . r += a ; this . g += a ; this . b += a ; return this } , sub : function ( a ) { this . r = Math . max ( 0 , this . r - a . r ) ; this . g = Math . max ( 0 , this . g - a . g ) ; this . b = Math . max ( 0 , this . b - a . b ) ; return this } , multiply : function ( a ) { this . r *=
a . r ; this . g *= a . g ; this . b *= a . b ; return this } , multiplyScalar : function ( a ) { this . r *= a ; this . g *= a ; this . b *= a ; return this } , lerp : function ( a , b ) { this . r += ( a . r - this . r ) * b ; this . g += ( a . g - this . g ) * b ; this . b += ( a . b - this . b ) * b ; return this } , lerpHSL : function ( a , b ) { this . getHSL ( Fa ) ; a . getHSL ( If ) ; a = R . lerp ( Fa . h , If . h , b ) ; var c = R . lerp ( Fa . s , If . s , b ) ; b = R . lerp ( Fa . l , If . l , b ) ; this . setHSL ( a , c , b ) ; return this } , equals : function ( a ) { return a . r === this . r && a . g === this . g && a . b === this . b } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; this . r = a [ b ] ; this . g = a [ b + 1 ] ;
this . b = a [ b + 2 ] ; return this } , toArray : function ( a , b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; a [ b ] = this . r ; a [ b + 1 ] = this . g ; a [ b + 2 ] = this . b ; return a } , toJSON : function ( ) { return this . getHex ( ) } } ) ; H . NAMES = xi ; Object . assign ( wc . prototype , { clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . a = a . a ; this . b = a . b ; this . c = a . c ; this . normal . copy ( a . normal ) ; this . color . copy ( a . color ) ; this . materialIndex = a . materialIndex ; for ( var b = 0 , c = a . vertexNormals . length ; b < c ; b ++ ) this . vertexNormals [ b ] = a . vertexNormals [ b ] . clone ( ) ;
b = 0 ; for ( c = a . vertexColors . length ; b < c ; b ++ ) this . vertexColors [ b ] = a . vertexColors [ b ] . clone ( ) ; return this } } ) ; var $i = 0 ; C . prototype = Object . assign ( Object . create ( Aa . prototype ) , { constructor : C , isMaterial : ! 0 , onBeforeCompile : function ( ) { } , setValues : function ( a ) { if ( void 0 !== a ) for ( var b in a ) { var c = a [ b ] ; if ( void 0 === c ) console . warn ( "THREE.Material: '" + b + "' parameter is undefined." ) ; else if ( "shading" === b ) console . warn ( "THREE." + this . type + ": .shading has been removed. Use the boolean .flatShading instead." ) , this . flatShading =
1 === c ? ! 0 : ! 1 ; else { var d = this [ b ] ; void 0 === d ? console . warn ( "THREE." + this . type + ": '" + b + "' is not a property of this material." ) : d && d . isColor ? d . set ( c ) : d && d . isVector3 && c && c . isVector3 ? d . copy ( c ) : this [ b ] = c } } } , toJSON : function ( a ) { function b ( a ) { var b = [ ] , c ; for ( c in a ) { var d = a [ c ] ; delete d . metadata ; b . push ( d ) } return b } var c = void 0 === a || "string" === typeof a ; c && ( a = { textures : { } , images : { } } ) ; var d = { metadata : { version : 4.5 , type : "Material" , generator : "Material.toJSON" } } ; d . uuid = this . uuid ; d . type = this . type ; "" !== this . name && ( d . name =
this . name ) ; this . color && this . color . isColor && ( d . color = this . color . getHex ( ) ) ; void 0 !== this . roughness && ( d . roughness = this . roughness ) ; void 0 !== this . metalness && ( d . metalness = this . metalness ) ; this . sheen && this . sheen . isColor && ( d . sheen = this . sheen . getHex ( ) ) ; this . emissive && this . emissive . isColor && ( d . emissive = this . emissive . getHex ( ) ) ; this . emissiveIntensity && 1 !== this . emissiveIntensity && ( d . emissiveIntensity = this . emissiveIntensity ) ; this . specular && this . specular . isColor && ( d . specular = this . specular . getHex ( ) ) ; void 0 !== this . shininess &&
( d . shininess = this . shininess ) ; void 0 !== this . clearcoat && ( d . clearcoat = this . clearcoat ) ; void 0 !== this . clearcoatRoughness && ( d . clearcoatRoughness = this . clearcoatRoughness ) ; this . clearcoatNormalMap && this . clearcoatNormalMap . isTexture && ( d . clearcoatNormalMap = this . clearcoatNormalMap . toJSON ( a ) . uuid , d . clearcoatNormalScale = this . clearcoatNormalScale . toArray ( ) ) ; this . map && this . map . isTexture && ( d . map = this . map . toJSON ( a ) . uuid ) ; this . matcap && this . matcap . isTexture && ( d . matcap = this . matcap . toJSON ( a ) . uuid ) ; this . alphaMap && this . alphaMap . isTexture &&
( d . alphaMap = this . alphaMap . toJSON ( a ) . uuid ) ; this . lightMap && this . lightMap . isTexture && ( d . lightMap = this . lightMap . toJSON ( a ) . uuid ) ; this . aoMap && this . aoMap . isTexture && ( d . aoMap = this . aoMap . toJSON ( a ) . uuid , d . aoMapIntensity = this . aoMapIntensity ) ; this . bumpMap && this . bumpMap . isTexture && ( d . bumpMap = this . bumpMap . toJSON ( a ) . uuid , d . bumpScale = this . bumpScale ) ; this . normalMap && this . normalMap . isTexture && ( d . normalMap = this . normalMap . toJSON ( a ) . uuid , d . normalMapType = this . normalMapType , d . normalScale = this . normalScale . toArray ( ) ) ; this . displacementMap &&
this . displacementMap . isTexture && ( d . displacementMap = this . displacementMap . toJSON ( a ) . uuid , d . displacementScale = this . displacementScale , d . displacementBias = this . displacementBias ) ; this . roughnessMap && this . roughnessMap . isTexture && ( d . roughnessMap = this . roughnessMap . toJSON ( a ) . uuid ) ; this . metalnessMap && this . metalnessMap . isTexture && ( d . metalnessMap = this . metalnessMap . toJSON ( a ) . uuid ) ; this . emissiveMap && this . emissiveMap . isTexture && ( d . emissiveMap = this . emissiveMap . toJSON ( a ) . uuid ) ; this . specularMap && this . specularMap . isTexture &&
( d . specularMap = this . specularMap . toJSON ( a ) . uuid ) ; this . envMap && this . envMap . isTexture && ( d . envMap = this . envMap . toJSON ( a ) . uuid , d . reflectivity = this . reflectivity , d . refractionRatio = this . refractionRatio , void 0 !== this . combine && ( d . combine = this . combine ) , void 0 !== this . envMapIntensity && ( d . envMapIntensity = this . envMapIntensity ) ) ; this . gradientMap && this . gradientMap . isTexture && ( d . gradientMap = this . gradientMap . toJSON ( a ) . uuid ) ; void 0 !== this . size && ( d . size = this . size ) ; void 0 !== this . sizeAttenuation && ( d . sizeAttenuation = this . sizeAttenuation ) ;
1 !== this . blending && ( d . blending = this . blending ) ; ! 0 === this . flatShading && ( d . flatShading = this . flatShading ) ; 0 !== this . side && ( d . side = this . side ) ; 0 !== this . vertexColors && ( d . vertexColors = this . vertexColors ) ; 1 > this . opacity && ( d . opacity = this . opacity ) ; ! 0 === this . transparent && ( d . transparent = this . transparent ) ; d . depthFunc = this . depthFunc ; d . depthTest = this . depthTest ; d . depthWrite = this . depthWrite ; d . stencilWrite = this . stencilWrite ; d . stencilWriteMask = this . stencilWriteMask ; d . stencilFunc = this . stencilFunc ; d . stencilRef = this . stencilRef ;
d . stencilFuncMask = this . stencilFuncMask ; d . stencilFail = this . stencilFail ; d . stencilZFail = this . stencilZFail ; d . stencilZPass = this . stencilZPass ; this . rotation && 0 !== this . rotation && ( d . rotation = this . rotation ) ; ! 0 === this . polygonOffset && ( d . polygonOffset = ! 0 ) ; 0 !== this . polygonOffsetFactor && ( d . polygonOffsetFactor = this . polygonOffsetFactor ) ; 0 !== this . polygonOffsetUnits && ( d . polygonOffsetUnits = this . polygonOffsetUnits ) ; this . linewidth && 1 !== this . linewidth && ( d . linewidth = this . linewidth ) ; void 0 !== this . dashSize && ( d . dashSize = this . dashSize ) ;
void 0 !== this . gapSize && ( d . gapSize = this . gapSize ) ; void 0 !== this . scale && ( d . scale = this . scale ) ; ! 0 === this . dithering && ( d . dithering = ! 0 ) ; 0 < this . alphaTest && ( d . alphaTest = this . alphaTest ) ; ! 0 === this . premultipliedAlpha && ( d . premultipliedAlpha = this . premultipliedAlpha ) ; ! 0 === this . wireframe && ( d . wireframe = this . wireframe ) ; 1 < this . wireframeLinewidth && ( d . wireframeLinewidth = this . wireframeLinewidth ) ; "round" !== this . wireframeLinecap && ( d . wireframeLinecap = this . wireframeLinecap ) ; "round" !== this . wireframeLinejoin && ( d . wireframeLinejoin =
this . wireframeLinejoin ) ; ! 0 === this . morphTargets && ( d . morphTargets = ! 0 ) ; ! 0 === this . morphNormals && ( d . morphNormals = ! 0 ) ; ! 0 === this . skinning && ( d . skinning = ! 0 ) ; ! 1 === this . visible && ( d . visible = ! 1 ) ; ! 1 === this . toneMapped && ( d . toneMapped = ! 1 ) ; "{}" !== JSON . stringify ( this . userData ) && ( d . userData = this . userData ) ; c && ( c = b ( a . textures ) , a = b ( a . images ) , 0 < c . length && ( d . textures = c ) , 0 < a . length && ( d . images = a ) ) ; return d } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . name = a . name ; this . fog = a . fog ; this . blending =
a . blending ; this . side = a . side ; this . flatShading = a . flatShading ; this . vertexTangents = a . vertexTangents ; this . vertexColors = a . vertexColors ; this . opacity = a . opacity ; this . transparent = a . transparent ; this . blendSrc = a . blendSrc ; this . blendDst = a . blendDst ; this . blendEquation = a . blendEquation ; this . blendSrcAlpha = a . blendSrcAlpha ; this . blendDstAlpha = a . blendDstAlpha ; this . blendEquationAlpha = a . blendEquationAlpha ; this . depthFunc = a . depthFunc ; this . depthTest = a . depthTest ; this . depthWrite = a . depthWrite ; this . stencilWriteMask = a . stencilWriteMask ;
this . stencilFunc = a . stencilFunc ; this . stencilRef = a . stencilRef ; this . stencilFuncMask = a . stencilFuncMask ; this . stencilFail = a . stencilFail ; this . stencilZFail = a . stencilZFail ; this . stencilZPass = a . stencilZPass ; this . stencilWrite = a . stencilWrite ; var b = a . clippingPlanes , c = null ; if ( null !== b ) { var d = b . length ; c = Array ( d ) ; for ( var e = 0 ; e !== d ; ++ e ) c [ e ] = b [ e ] . clone ( ) } this . clippingPlanes = c ; this . clipIntersection = a . clipIntersection ; this . clipShadows = a . clipShadows ; this . shadowSide = a . shadowSide ; this . colorWrite = a . colorWrite ; this . precision =
a . precision ; this . polygonOffset = a . polygonOffset ; this . polygonOffsetFactor = a . polygonOffsetFactor ; this . polygonOffsetUnits = a . polygonOffsetUnits ; this . dithering = a . dithering ; this . alphaTest = a . alphaTest ; this . premultipliedAlpha = a . premultipliedAlpha ; this . visible = a . visible ; this . toneMapped = a . toneMapped ; this . userData = JSON . parse ( JSON . stringify ( a . userData ) ) ; return this } , dispose : function ( ) { this . dispatchEvent ( { type : "dispose" } ) } } ) ; Object . defineProperty ( C . prototype , "needsUpdate" , { set : function ( a ) { ! 0 === a && this . version ++ } } ) ;
Ga . prototype = Object . create ( C . prototype ) ; Ga . prototype . constructor = Ga ; Ga . prototype . isMeshBasicMaterial = ! 0 ; Ga . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . color . copy ( a . color ) ; this . map = a . map ; this . lightMap = a . lightMap ; this . lightMapIntensity = a . lightMapIntensity ; this . aoMap = a . aoMap ; this . aoMapIntensity = a . aoMapIntensity ; this . specularMap = a . specularMap ; this . alphaMap = a . alphaMap ; this . envMap = a . envMap ; this . combine = a . combine ; this . reflectivity = a . reflectivity ; this . refractionRatio = a . refractionRatio ; this . wireframe =
a . wireframe ; this . wireframeLinewidth = a . wireframeLinewidth ; this . wireframeLinecap = a . wireframeLinecap ; this . wireframeLinejoin = a . wireframeLinejoin ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; return this } ; Object . defineProperty ( N . prototype , "needsUpdate" , { set : function ( a ) { ! 0 === a && this . version ++ } } ) ; Object . assign ( N . prototype , { isBufferAttribute : ! 0 , onUploadCallback : function ( ) { } , setUsage : function ( a ) { this . usage = a ; return this } , copy : function ( a ) { this . name = a . name ; this . array = new a . array . constructor ( a . array ) ;
this . itemSize = a . itemSize ; this . count = a . count ; this . normalized = a . normalized ; this . usage = a . usage ; return this } , copyAt : function ( a , b , c ) { a *= this . itemSize ; c *= b . itemSize ; for ( var d = 0 , e = this . itemSize ; d < e ; d ++ ) this . array [ a + d ] = b . array [ c + d ] ; return this } , copyArray : function ( a ) { this . array . set ( a ) ; return this } , copyColorsArray : function ( a ) { for ( var b = this . array , c = 0 , d = 0 , e = a . length ; d < e ; d ++ ) { var f = a [ d ] ; void 0 === f && ( console . warn ( "THREE.BufferAttribute.copyColorsArray(): color is undefined" , d ) , f = new H ) ; b [ c ++ ] = f . r ; b [ c ++ ] = f . g ; b [ c ++ ] =
f . b } return this } , copyVector2sArray : function ( a ) { for ( var b = this . array , c = 0 , d = 0 , e = a . length ; d < e ; d ++ ) { var f = a [ d ] ; void 0 === f && ( console . warn ( "THREE.BufferAttribute.copyVector2sArray(): vector is undefined" , d ) , f = new B ) ; b [ c ++ ] = f . x ; b [ c ++ ] = f . y } return this } , copyVector3sArray : function ( a ) { for ( var b = this . array , c = 0 , d = 0 , e = a . length ; d < e ; d ++ ) { var f = a [ d ] ; void 0 === f && ( console . warn ( "THREE.BufferAttribute.copyVector3sArray(): vector is undefined" , d ) , f = new n ) ; b [ c ++ ] = f . x ; b [ c ++ ] = f . y ; b [ c ++ ] = f . z } return this } , copyVector4sArray : function ( a ) { for ( var b =
this . array , c = 0 , d = 0 , e = a . length ; d < e ; d ++ ) { var f = a [ d ] ; void 0 === f && ( console . warn ( "THREE.BufferAttribute.copyVector4sArray(): vector is undefined" , d ) , f = new ba ) ; b [ c ++ ] = f . x ; b [ c ++ ] = f . y ; b [ c ++ ] = f . z ; b [ c ++ ] = f . w } return this } , set : function ( a , b ) { void 0 === b && ( b = 0 ) ; this . array . set ( a , b ) ; return this } , getX : function ( a ) { return this . array [ a * this . itemSize ] } , setX : function ( a , b ) { this . array [ a * this . itemSize ] = b ; return this } , getY : function ( a ) { return this . array [ a * this . itemSize + 1 ] } , setY : function ( a , b ) { this . array [ a * this . itemSize + 1 ] = b ;
return this } , getZ : function ( a ) { return this . array [ a * this . itemSize + 2 ] } , setZ : function ( a , b ) { this . array [ a * this . itemSize + 2 ] = b ; return this } , getW : function ( a ) { return this . array [ a * this . itemSize + 3 ] } , setW : function ( a , b ) { this . array [ a * this . itemSize + 3 ] = b ; return this } , setXY : function ( a , b , c ) { a *= this . itemSize ; this . array [ a + 0 ] = b ; this . array [ a + 1 ] = c ; return this } , setXYZ : function ( a , b , c , d ) { a *= this . itemSize ; this . array [ a + 0 ] = b ; this . array [ a + 1 ] = c ; this . array [ a + 2 ] = d ; return this } , setXYZW : function ( a , b , c , d , e ) { a *= this . itemSize ; this . array [ a +
0 ] = b ; this . array [ a + 1 ] = c ; this . array [ a + 2 ] = d ; this . array [ a + 3 ] = e ; return this } , onUpload : function ( a ) { this . onUploadCallback = a ; return this } , clone : function ( ) { return ( new this . constructor ( this . array , this . itemSize ) ) . copy ( this ) } , toJSON : function ( ) { return { itemSize : this . itemSize , type : this . array . constructor . name , array : Array . prototype . slice . call ( this . array ) , normalized : this . normalized } } } ) ; xd . prototype = Object . create ( N . prototype ) ; xd . prototype . constructor = xd ; yd . prototype = Object . create ( N . prototype ) ; yd . prototype . constructor =
yd ; zd . prototype = Object . create ( N . prototype ) ; zd . prototype . constructor = zd ; Ad . prototype = Object . create ( N . prototype ) ; Ad . prototype . constructor = Ad ; Sb . prototype = Object . create ( N . prototype ) ; Sb . prototype . constructor = Sb ; Bd . prototype = Object . create ( N . prototype ) ; Bd . prototype . constructor = Bd ; Tb . prototype = Object . create ( N . prototype ) ; Tb . prototype . constructor = Tb ; D . prototype = Object . create ( N . prototype ) ; D . prototype . constructor = D ; Cd . prototype = Object . create ( N . prototype ) ; Cd . prototype . constructor = Cd ; Object . assign ( ph . prototype ,
{ computeGroups : function ( a ) { var b = [ ] , c = void 0 ; a = a . faces ; for ( var d = 0 ; d < a . length ; d ++ ) { var e = a [ d ] ; if ( e . materialIndex !== c ) { c = e . materialIndex ; void 0 !== f && ( f . count = 3 * d - f . start , b . push ( f ) ) ; var f = { start : 3 * d , materialIndex : c } } } void 0 !== f && ( f . count = 3 * d - f . start , b . push ( f ) ) ; this . groups = b } , fromGeometry : function ( a ) { var b = a . faces , c = a . vertices , d = a . faceVertexUvs , e = d [ 0 ] && 0 < d [ 0 ] . length , f = d [ 1 ] && 0 < d [ 1 ] . length , g = a . morphTargets , h = g . length ; if ( 0 < h ) { var l = [ ] ; for ( var m = 0 ; m < h ; m ++ ) l [ m ] = { name : g [ m ] . name , data : [ ] } ; this . morphTargets . position =
l } var k = a . morphNormals , p = k . length ; if ( 0 < p ) { var n = [ ] ; for ( m = 0 ; m < p ; m ++ ) n [ m ] = { name : k [ m ] . name , data : [ ] } ; this . morphTargets . normal = n } var u = a . skinIndices , q = a . skinWeights , v = u . length === c . length , A = q . length === c . length ; 0 < c . length && 0 === b . length && console . error ( "THREE.DirectGeometry: Faceless geometries are not supported." ) ; for ( m = 0 ; m < b . length ; m ++ ) { var w = b [ m ] ; this . vertices . push ( c [ w . a ] , c [ w . b ] , c [ w . c ] ) ; var x = w . vertexNormals ; 3 === x . length ? this . normals . push ( x [ 0 ] , x [ 1 ] , x [ 2 ] ) : ( x = w . normal , this . normals . push ( x , x , x ) ) ; x = w . vertexColors ;
3 === x . length ? this . colors . push ( x [ 0 ] , x [ 1 ] , x [ 2 ] ) : ( x = w . color , this . colors . push ( x , x , x ) ) ; ! 0 === e && ( x = d [ 0 ] [ m ] , void 0 !== x ? this . uvs . push ( x [ 0 ] , x [ 1 ] , x [ 2 ] ) : ( console . warn ( "THREE.DirectGeometry.fromGeometry(): Undefined vertexUv " , m ) , this . uvs . push ( new B , new B , new B ) ) ) ; ! 0 === f && ( x = d [ 1 ] [ m ] , void 0 !== x ? this . uvs2 . push ( x [ 0 ] , x [ 1 ] , x [ 2 ] ) : ( console . warn ( "THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 " , m ) , this . uvs2 . push ( new B , new B , new B ) ) ) ; for ( x = 0 ; x < h ; x ++ ) { var y = g [ x ] . vertices ; l [ x ] . data . push ( y [ w . a ] , y [ w . b ] , y [ w . c ] ) } for ( x =
0 ; x < p ; x ++ ) y = k [ x ] . vertexNormals [ m ] , n [ x ] . data . push ( y . a , y . b , y . c ) ; v && this . skinIndices . push ( u [ w . a ] , u [ w . b ] , u [ w . c ] ) ; A && this . skinWeights . push ( q [ w . a ] , q [ w . b ] , q [ w . c ] ) } this . computeGroups ( a ) ; this . verticesNeedUpdate = a . verticesNeedUpdate ; this . normalsNeedUpdate = a . normalsNeedUpdate ; this . colorsNeedUpdate = a . colorsNeedUpdate ; this . uvsNeedUpdate = a . uvsNeedUpdate ; this . groupsNeedUpdate = a . groupsNeedUpdate ; null !== a . boundingSphere && ( this . boundingSphere = a . boundingSphere . clone ( ) ) ; null !== a . boundingBox && ( this . boundingBox = a . boundingBox . clone ( ) ) ;
return this } } ) ; var aj = 1 , jb = new S , ch = new y , rd = new n , La = new Qa , Be = new Qa , Z = new n ; E . prototype = Object . assign ( Object . create ( Aa . prototype ) , { constructor : E , isBufferGeometry : ! 0 , getIndex : function ( ) { return this . index } , setIndex : function ( a ) { Array . isArray ( a ) ? this . index = new ( 65535 < qh ( a ) ? Tb : Sb ) ( a , 1 ) : this . index = a } , getAttribute : function ( a ) { return this . attributes [ a ] } , setAttribute : function ( a , b ) { this . attributes [ a ] = b ; return this } , deleteAttribute : function ( a ) { delete this . attributes [ a ] ; return this } , addGroup : function ( a , b ,
c ) { this . groups . push ( { start : a , count : b , materialIndex : void 0 !== c ? c : 0 } ) } , clearGroups : function ( ) { this . groups = [ ] } , setDrawRange : function ( a , b ) { this . drawRange . start = a ; this . drawRange . count = b } , applyMatrix : function ( a ) { var b = this . attributes . position ; void 0 !== b && ( a . applyToBufferAttribute ( b ) , b . needsUpdate = ! 0 ) ; var c = this . attributes . normal ; void 0 !== c && ( b = ( new ca ) . getNormalMatrix ( a ) , b . applyToBufferAttribute ( c ) , c . needsUpdate = ! 0 ) ; c = this . attributes . tangent ; void 0 !== c && ( b = ( new ca ) . getNormalMatrix ( a ) , b . applyToBufferAttribute ( c ) ,
c . needsUpdate = ! 0 ) ; null !== this . boundingBox && this . computeBoundingBox ( ) ; null !== this . boundingSphere && this . computeBoundingSphere ( ) ; return this } , rotateX : function ( a ) { jb . makeRotationX ( a ) ; this . applyMatrix ( jb ) ; return this } , rotateY : function ( a ) { jb . makeRotationY ( a ) ; this . applyMatrix ( jb ) ; return this } , rotateZ : function ( a ) { jb . makeRotationZ ( a ) ; this . applyMatrix ( jb ) ; return this } , translate : function ( a , b , c ) { jb . makeTranslation ( a , b , c ) ; this . applyMatrix ( jb ) ; return this } , scale : function ( a , b , c ) { jb . makeScale ( a , b , c ) ; this . applyMatrix ( jb ) ;
return this } , lookAt : function ( a ) { ch . lookAt ( a ) ; ch . updateMatrix ( ) ; this . applyMatrix ( ch . matrix ) ; return this } , center : function ( ) { this . computeBoundingBox ( ) ; this . boundingBox . getCenter ( rd ) . negate ( ) ; this . translate ( rd . x , rd . y , rd . z ) ; return this } , setFromObject : function ( a ) { var b = a . geometry ; if ( a . isPoints || a . isLine ) { a = new D ( 3 * b . vertices . length , 3 ) ; var c = new D ( 3 * b . colors . length , 3 ) ; this . setAttribute ( "position" , a . copyVector3sArray ( b . vertices ) ) ; this . setAttribute ( "color" , c . copyColorsArray ( b . colors ) ) ; b . lineDistances && b . lineDistances . length ===
b . vertices . length && ( a = new D ( b . lineDistances . length , 1 ) , this . setAttribute ( "lineDistance" , a . copyArray ( b . lineDistances ) ) ) ; null !== b . boundingSphere && ( this . boundingSphere = b . boundingSphere . clone ( ) ) ; null !== b . boundingBox && ( this . boundingBox = b . boundingBox . clone ( ) ) } else a . isMesh && b && b . isGeometry && this . fromGeometry ( b ) ; return this } , setFromPoints : function ( a ) { for ( var b = [ ] , c = 0 , d = a . length ; c < d ; c ++ ) { var e = a [ c ] ; b . push ( e . x , e . y , e . z || 0 ) } this . setAttribute ( "position" , new D ( b , 3 ) ) ; return this } , updateFromObject : function ( a ) { var b =
a . geometry ; if ( a . isMesh ) { var c = b . _ _directGeometry ; ! 0 === b . elementsNeedUpdate && ( c = void 0 , b . elementsNeedUpdate = ! 1 ) ; if ( void 0 === c ) return this . fromGeometry ( b ) ; c . verticesNeedUpdate = b . verticesNeedUpdate ; c . normalsNeedUpdate = b . normalsNeedUpdate ; c . colorsNeedUpdate = b . colorsNeedUpdate ; c . uvsNeedUpdate = b . uvsNeedUpdate ; c . groupsNeedUpdate = b . groupsNeedUpdate ; b . verticesNeedUpdate = ! 1 ; b . normalsNeedUpdate = ! 1 ; b . colorsNeedUpdate = ! 1 ; b . uvsNeedUpdate = ! 1 ; b . groupsNeedUpdate = ! 1 ; b = c } ! 0 === b . verticesNeedUpdate && ( c = this . attributes . position ,
void 0 !== c && ( c . copyVector3sArray ( b . vertices ) , c . needsUpdate = ! 0 ) , b . verticesNeedUpdate = ! 1 ) ; ! 0 === b . normalsNeedUpdate && ( c = this . attributes . normal , void 0 !== c && ( c . copyVector3sArray ( b . normals ) , c . needsUpdate = ! 0 ) , b . normalsNeedUpdate = ! 1 ) ; ! 0 === b . colorsNeedUpdate && ( c = this . attributes . color , void 0 !== c && ( c . copyColorsArray ( b . colors ) , c . needsUpdate = ! 0 ) , b . colorsNeedUpdate = ! 1 ) ; b . uvsNeedUpdate && ( c = this . attributes . uv , void 0 !== c && ( c . copyVector2sArray ( b . uvs ) , c . needsUpdate = ! 0 ) , b . uvsNeedUpdate = ! 1 ) ; b . lineDistancesNeedUpdate &&
( c = this . attributes . lineDistance , void 0 !== c && ( c . copyArray ( b . lineDistances ) , c . needsUpdate = ! 0 ) , b . lineDistancesNeedUpdate = ! 1 ) ; b . groupsNeedUpdate && ( b . computeGroups ( a . geometry ) , this . groups = b . groups , b . groupsNeedUpdate = ! 1 ) ; return this } , fromGeometry : function ( a ) { a . _ _directGeometry = ( new ph ) . fromGeometry ( a ) ; return this . fromDirectGeometry ( a . _ _directGeometry ) } , fromDirectGeometry : function ( a ) { var b = new Float32Array ( 3 * a . vertices . length ) ; this . setAttribute ( "position" , ( new N ( b , 3 ) ) . copyVector3sArray ( a . vertices ) ) ; 0 < a . normals . length &&
( b = new Float32Array ( 3 * a . normals . length ) , this . setAttribute ( "normal" , ( new N ( b , 3 ) ) . copyVector3sArray ( a . normals ) ) ) ; 0 < a . colors . length && ( b = new Float32Array ( 3 * a . colors . length ) , this . setAttribute ( "color" , ( new N ( b , 3 ) ) . copyColorsArray ( a . colors ) ) ) ; 0 < a . uvs . length && ( b = new Float32Array ( 2 * a . uvs . length ) , this . setAttribute ( "uv" , ( new N ( b , 2 ) ) . copyVector2sArray ( a . uvs ) ) ) ; 0 < a . uvs2 . length && ( b = new Float32Array ( 2 * a . uvs2 . length ) , this . setAttribute ( "uv2" , ( new N ( b , 2 ) ) . copyVector2sArray ( a . uvs2 ) ) ) ; this . groups = a . groups ; for ( var c in a . morphTargets ) { b =
[ ] ; for ( var d = a . morphTargets [ c ] , e = 0 , f = d . length ; e < f ; e ++ ) { var g = d [ e ] , h = new D ( 3 * g . data . length , 3 ) ; h . name = g . name ; b . push ( h . copyVector3sArray ( g . data ) ) } this . morphAttributes [ c ] = b } 0 < a . skinIndices . length && ( c = new D ( 4 * a . skinIndices . length , 4 ) , this . setAttribute ( "skinIndex" , c . copyVector4sArray ( a . skinIndices ) ) ) ; 0 < a . skinWeights . length && ( c = new D ( 4 * a . skinWeights . length , 4 ) , this . setAttribute ( "skinWeight" , c . copyVector4sArray ( a . skinWeights ) ) ) ; null !== a . boundingSphere && ( this . boundingSphere = a . boundingSphere . clone ( ) ) ; null !==
a . boundingBox && ( this . boundingBox = a . boundingBox . clone ( ) ) ; return this } , computeBoundingBox : function ( ) { null === this . boundingBox && ( this . boundingBox = new Qa ) ; var a = this . attributes . position , b = this . morphAttributes . position ; if ( void 0 !== a ) { if ( this . boundingBox . setFromBufferAttribute ( a ) , b ) { a = 0 ; for ( var c = b . length ; a < c ; a ++ ) La . setFromBufferAttribute ( b [ a ] ) , this . morphTargetsRelative ? ( Z . addVectors ( this . boundingBox . min , La . min ) , this . boundingBox . expandByPoint ( Z ) , Z . addVectors ( this . boundingBox . max , La . max ) , this . boundingBox . expandByPoint ( Z ) ) :
( this . boundingBox . expandByPoint ( La . min ) , this . boundingBox . expandByPoint ( La . max ) ) } } else this . boundingBox . makeEmpty ( ) ; ( isNaN ( this . boundingBox . min . x ) || isNaN ( this . boundingBox . min . y ) || isNaN ( this . boundingBox . min . z ) ) && console . error ( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.' , this ) } , computeBoundingSphere : function ( ) { null === this . boundingSphere && ( this . boundingSphere = new mb ) ; var a = this . attributes . position , b = this . morphAttributes . position ;
if ( a ) { var c = this . boundingSphere . center ; La . setFromBufferAttribute ( a ) ; if ( b ) for ( var d = 0 , e = b . length ; d < e ; d ++ ) { var f = b [ d ] ; Be . setFromBufferAttribute ( f ) ; this . morphTargetsRelative ? ( Z . addVectors ( La . min , Be . min ) , La . expandByPoint ( Z ) , Z . addVectors ( La . max , Be . max ) , La . expandByPoint ( Z ) ) : ( La . expandByPoint ( Be . min ) , La . expandByPoint ( Be . max ) ) } La . getCenter ( c ) ; var g = 0 ; d = 0 ; for ( e = a . count ; d < e ; d ++ ) Z . fromBufferAttribute ( a , d ) , g = Math . max ( g , c . distanceToSquared ( Z ) ) ; if ( b ) for ( d = 0 , e = b . length ; d < e ; d ++ ) { f = b [ d ] ; for ( var h = this . morphTargetsRelative ,
l = 0 , m = f . count ; l < m ; l ++ ) Z . fromBufferAttribute ( f , l ) , h && ( rd . fromBufferAttribute ( a , l ) , Z . add ( rd ) ) , g = Math . max ( g , c . distanceToSquared ( Z ) ) } this . boundingSphere . radius = Math . sqrt ( g ) ; isNaN ( this . boundingSphere . radius ) && console . error ( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.' , this ) } } , computeFaceNormals : function ( ) { } , computeVertexNormals : function ( ) { var a = this . index , b = this . attributes ; if ( b . position ) { var c = b . position . array ; if ( void 0 ===
b . normal ) this . setAttribute ( "normal" , new N ( new Float32Array ( c . length ) , 3 ) ) ; else for ( var d = b . normal . array , e = 0 , f = d . length ; e < f ; e ++ ) d [ e ] = 0 ; d = b . normal . array ; var g = new n , h = new n , l = new n , m = new n , k = new n ; if ( a ) { var p = a . array ; e = 0 ; for ( f = a . count ; e < f ; e += 3 ) { a = 3 * p [ e + 0 ] ; var t = 3 * p [ e + 1 ] ; var u = 3 * p [ e + 2 ] ; g . fromArray ( c , a ) ; h . fromArray ( c , t ) ; l . fromArray ( c , u ) ; m . subVectors ( l , h ) ; k . subVectors ( g , h ) ; m . cross ( k ) ; d [ a ] += m . x ; d [ a + 1 ] += m . y ; d [ a + 2 ] += m . z ; d [ t ] += m . x ; d [ t + 1 ] += m . y ; d [ t + 2 ] += m . z ; d [ u ] += m . x ; d [ u + 1 ] += m . y ; d [ u + 2 ] += m . z } } else for ( e = 0 , f = c . length ; e <
f ; e += 9 ) g . fromArray ( c , e ) , h . fromArray ( c , e + 3 ) , l . fromArray ( c , e + 6 ) , m . subVectors ( l , h ) , k . subVectors ( g , h ) , m . cross ( k ) , d [ e ] = m . x , d [ e + 1 ] = m . y , d [ e + 2 ] = m . z , d [ e + 3 ] = m . x , d [ e + 4 ] = m . y , d [ e + 5 ] = m . z , d [ e + 6 ] = m . x , d [ e + 7 ] = m . y , d [ e + 8 ] = m . z ; this . normalizeNormals ( ) ; b . normal . needsUpdate = ! 0 } } , merge : function ( a , b ) { if ( a && a . isBufferGeometry ) { void 0 === b && ( b = 0 , console . warn ( "THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge." ) ) ; var c = this . attributes ,
d ; for ( d in c ) if ( void 0 !== a . attributes [ d ] ) { var e = c [ d ] . array , f = a . attributes [ d ] , g = f . array , h = f . itemSize * b ; f = Math . min ( g . length , e . length - h ) ; for ( var l = 0 ; l < f ; l ++ , h ++ ) e [ h ] = g [ l ] } return this } console . error ( "THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry." , a ) } , normalizeNormals : function ( ) { for ( var a = this . attributes . normal , b = 0 , c = a . count ; b < c ; b ++ ) Z . x = a . getX ( b ) , Z . y = a . getY ( b ) , Z . z = a . getZ ( b ) , Z . normalize ( ) , a . setXYZ ( b , Z . x , Z . y , Z . z ) } , toNonIndexed : function ( ) { function a ( a , b ) { var c = a . array ; a = a . itemSize ;
for ( var d = new c . constructor ( b . length * a ) , e , f = 0 , g = 0 , h = b . length ; g < h ; g ++ ) { e = b [ g ] * a ; for ( var l = 0 ; l < a ; l ++ ) d [ f ++ ] = c [ e ++ ] } return new N ( d , a ) } if ( null === this . index ) return console . warn ( "THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed." ) , this ; var b = new E , c = this . index . array , d = this . attributes , e ; for ( e in d ) { var f = d [ e ] ; f = a ( f , c ) ; b . setAttribute ( e , f ) } var g = this . morphAttributes ; for ( e in g ) { var h = [ ] , l = g [ e ] ; d = 0 ; for ( var m = l . length ; d < m ; d ++ ) f = l [ d ] , f = a ( f , c ) , h . push ( f ) ; b . morphAttributes [ e ] = h } b . morphTargetsRelative =
this . morphTargetsRelative ; c = this . groups ; d = 0 ; for ( e = c . length ; d < e ; d ++ ) f = c [ d ] , b . addGroup ( f . start , f . count , f . materialIndex ) ; return b } , toJSON : function ( ) { var a = { metadata : { version : 4.5 , type : "BufferGeometry" , generator : "BufferGeometry.toJSON" } } ; a . uuid = this . uuid ; a . type = this . type ; "" !== this . name && ( a . name = this . name ) ; 0 < Object . keys ( this . userData ) . length && ( a . userData = this . userData ) ; if ( void 0 !== this . parameters ) { var b = this . parameters ; for ( m in b ) void 0 !== b [ m ] && ( a [ m ] = b [ m ] ) ; return a } a . data = { attributes : { } } ; b = this . index ; null !==
b && ( a . data . index = { type : b . array . constructor . name , array : Array . prototype . slice . call ( b . array ) } ) ; var c = this . attributes ; for ( m in c ) { b = c [ m ] ; var d = b . toJSON ( ) ; "" !== b . name && ( d . name = b . name ) ; a . data . attributes [ m ] = d } c = { } ; var e = ! 1 ; for ( m in this . morphAttributes ) { for ( var f = this . morphAttributes [ m ] , g = [ ] , h = 0 , l = f . length ; h < l ; h ++ ) b = f [ h ] , d = b . toJSON ( ) , "" !== b . name && ( d . name = b . name ) , g . push ( d ) ; 0 < g . length && ( c [ m ] = g , e = ! 0 ) } e && ( a . data . morphAttributes = c , a . data . morphTargetsRelative = this . morphTargetsRelative ) ; var m = this . groups ; 0 < m . length &&
( a . data . groups = JSON . parse ( JSON . stringify ( m ) ) ) ; m = this . boundingSphere ; null !== m && ( a . data . boundingSphere = { center : m . center . toArray ( ) , radius : m . radius } ) ; return a } , clone : function ( ) { return ( new E ) . copy ( this ) } , copy : function ( a ) { var b ; this . index = null ; this . attributes = { } ; this . morphAttributes = { } ; this . groups = [ ] ; this . boundingSphere = this . boundingBox = null ; this . name = a . name ; var c = a . index ; null !== c && this . setIndex ( c . clone ( ) ) ; c = a . attributes ; for ( g in c ) this . setAttribute ( g , c [ g ] . clone ( ) ) ; var d = a . morphAttributes ; for ( g in d ) { var e =
[ ] , f = d [ g ] ; c = 0 ; for ( b = f . length ; c < b ; c ++ ) e . push ( f [ c ] . clone ( ) ) ; this . morphAttributes [ g ] = e } this . morphTargetsRelative = a . morphTargetsRelative ; var g = a . groups ; c = 0 ; for ( b = g . length ; c < b ; c ++ ) d = g [ c ] , this . addGroup ( d . start , d . count , d . materialIndex ) ; g = a . boundingBox ; null !== g && ( this . boundingBox = g . clone ( ) ) ; g = a . boundingSphere ; null !== g && ( this . boundingSphere = g . clone ( ) ) ; this . drawRange . start = a . drawRange . start ; this . drawRange . count = a . drawRange . count ; this . userData = a . userData ; return this } , dispose : function ( ) { this . dispatchEvent ( { type : "dispose" } ) } } ) ;
var yi = new S , qc = new Rb , dh = new mb , Ub = new n , Vb = new n , Wb = new n , eg = new n , fg = new n , gg = new n , Ke = new n , Le = new n , Me = new n , xc = new B , yc = new B , zc = new B , Dd = new n , Ie = new n ; ja . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : ja , isMesh : ! 0 , setDrawMode : function ( a ) { this . drawMode = a } , copy : function ( a ) { y . prototype . copy . call ( this , a ) ; this . drawMode = a . drawMode ; void 0 !== a . morphTargetInfluences && ( this . morphTargetInfluences = a . morphTargetInfluences . slice ( ) ) ; void 0 !== a . morphTargetDictionary && ( this . morphTargetDictionary =
Object . assign ( { } , a . morphTargetDictionary ) ) ; return this } , updateMorphTargets : function ( ) { var a = this . geometry ; if ( a . isBufferGeometry ) { a = a . morphAttributes ; var b = Object . keys ( a ) ; if ( 0 < b . length ) { var c = a [ b [ 0 ] ] ; if ( void 0 !== c ) for ( this . morphTargetInfluences = [ ] , this . morphTargetDictionary = { } , a = 0 , b = c . length ; a < b ; a ++ ) { var d = c [ a ] . name || String ( a ) ; this . morphTargetInfluences . push ( 0 ) ; this . morphTargetDictionary [ d ] = a } } } else a = a . morphTargets , void 0 !== a && 0 < a . length && console . error ( "THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead." ) } ,
raycast : function ( a , b ) { var c = this . geometry , d = this . material , e = this . matrixWorld ; if ( void 0 !== d && ( null === c . boundingSphere && c . computeBoundingSphere ( ) , dh . copy ( c . boundingSphere ) , dh . applyMatrix4 ( e ) , ! 1 !== a . ray . intersectsSphere ( dh ) && ( yi . getInverse ( e ) , qc . copy ( a . ray ) . applyMatrix4 ( yi ) , null === c . boundingBox || ! 1 !== qc . intersectsBox ( c . boundingBox ) ) ) ) if ( 0 !== this . drawMode ) console . warn ( "THREE.Mesh: TriangleStripDrawMode and TriangleFanDrawMode are not supported by .raycast()." ) ; else if ( c . isBufferGeometry ) { var f = c . index ;
e = c . attributes . position ; var g = c . morphAttributes . position , h = c . morphTargetsRelative , l = c . attributes . uv , m = c . attributes . uv2 , k = c . groups , p = c . drawRange , n , u ; if ( null !== f ) if ( Array . isArray ( d ) ) { var q = 0 ; for ( n = k . length ; q < n ; q ++ ) { var v = k [ q ] ; var A = d [ v . materialIndex ] ; var w = Math . max ( v . start , p . start ) ; for ( u = c = Math . min ( v . start + v . count , p . start + p . count ) ; w < u ; w += 3 ) { c = f . getX ( w ) ; var x = f . getX ( w + 1 ) ; var y = f . getX ( w + 2 ) ; if ( c = Je ( this , A , a , qc , e , g , h , l , m , c , x , y ) ) c . faceIndex = Math . floor ( w / 3 ) , c . face . materialIndex = v . materialIndex , b . push ( c ) } } } else for ( w =
Math . max ( 0 , p . start ) , c = Math . min ( f . count , p . start + p . count ) , q = w , n = c ; q < n ; q += 3 ) { if ( c = f . getX ( q ) , x = f . getX ( q + 1 ) , y = f . getX ( q + 2 ) , c = Je ( this , d , a , qc , e , g , h , l , m , c , x , y ) ) c . faceIndex = Math . floor ( q / 3 ) , b . push ( c ) } else if ( void 0 !== e ) if ( Array . isArray ( d ) ) for ( q = 0 , n = k . length ; q < n ; q ++ ) for ( v = k [ q ] , A = d [ v . materialIndex ] , w = Math . max ( v . start , p . start ) , u = c = Math . min ( v . start + v . count , p . start + p . count ) ; w < u ; w += 3 ) { if ( c = w , x = w + 1 , y = w + 2 , c = Je ( this , A , a , qc , e , g , h , l , m , c , x , y ) ) c . faceIndex = Math . floor ( w / 3 ) , c . face . materialIndex = v . materialIndex , b . push ( c ) } else for ( w =
Math . max ( 0 , p . start ) , c = Math . min ( e . count , p . start + p . count ) , q = w , n = c ; q < n ; q += 3 ) if ( c = q , x = q + 1 , y = q + 2 , c = Je ( this , d , a , qc , e , g , h , l , m , c , x , y ) ) c . faceIndex = Math . floor ( q / 3 ) , b . push ( c ) } else if ( c . isGeometry ) for ( e = Array . isArray ( d ) , g = c . vertices , h = c . faces , c = c . faceVertexUvs [ 0 ] , 0 < c . length && ( f = c ) , p = 0 , q = h . length ; p < q ; p ++ ) if ( n = h [ p ] , c = e ? d [ n . materialIndex ] : d , void 0 !== c && ( l = g [ n . a ] , m = g [ n . b ] , k = g [ n . c ] , c = rh ( this , c , a , qc , l , m , k , Dd ) ) ) f && f [ p ] && ( v = f [ p ] , xc . copy ( v [ 0 ] ) , yc . copy ( v [ 1 ] ) , zc . copy ( v [ 2 ] ) , c . uv = ma . getUV ( Dd , l , m , k , xc , yc , zc , new B ) ) , c . face =
n , c . faceIndex = p , b . push ( c ) } , clone : function ( ) { return ( new this . constructor ( this . geometry , this . material ) ) . copy ( this ) } } ) ; var bj = 0 , kb = new S , eh = new y , Jf = new n ; O . prototype = Object . assign ( Object . create ( Aa . prototype ) , { constructor : O , isGeometry : ! 0 , applyMatrix : function ( a ) { for ( var b = ( new ca ) . getNormalMatrix ( a ) , c = 0 , d = this . vertices . length ; c < d ; c ++ ) this . vertices [ c ] . applyMatrix4 ( a ) ; c = 0 ; for ( d = this . faces . length ; c < d ; c ++ ) { a = this . faces [ c ] ; a . normal . applyMatrix3 ( b ) . normalize ( ) ; for ( var e = 0 , f = a . vertexNormals . length ; e < f ; e ++ ) a . vertexNormals [ e ] . applyMatrix3 ( b ) . normalize ( ) } null !==
this . boundingBox && this . computeBoundingBox ( ) ; null !== this . boundingSphere && this . computeBoundingSphere ( ) ; this . normalsNeedUpdate = this . verticesNeedUpdate = ! 0 ; return this } , rotateX : function ( a ) { kb . makeRotationX ( a ) ; this . applyMatrix ( kb ) ; return this } , rotateY : function ( a ) { kb . makeRotationY ( a ) ; this . applyMatrix ( kb ) ; return this } , rotateZ : function ( a ) { kb . makeRotationZ ( a ) ; this . applyMatrix ( kb ) ; return this } , translate : function ( a , b , c ) { kb . makeTranslation ( a , b , c ) ; this . applyMatrix ( kb ) ; return this } , scale : function ( a , b , c ) { kb . makeScale ( a ,
b , c ) ; this . applyMatrix ( kb ) ; return this } , lookAt : function ( a ) { eh . lookAt ( a ) ; eh . updateMatrix ( ) ; this . applyMatrix ( eh . matrix ) ; return this } , fromBufferGeometry : function ( a ) { function b ( a , b , d , e ) { var f = void 0 === h ? [ ] : [ c . colors [ a ] . clone ( ) , c . colors [ b ] . clone ( ) , c . colors [ d ] . clone ( ) ] , k = void 0 === g ? [ ] : [ ( new n ) . fromArray ( g , 3 * a ) , ( new n ) . fromArray ( g , 3 * b ) , ( new n ) . fromArray ( g , 3 * d ) ] ; e = new wc ( a , b , d , k , f , e ) ; c . faces . push ( e ) ; void 0 !== l && c . faceVertexUvs [ 0 ] . push ( [ ( new B ) . fromArray ( l , 2 * a ) , ( new B ) . fromArray ( l , 2 * b ) , ( new B ) . fromArray ( l ,
2 * d ) ] ) ; void 0 !== m && c . faceVertexUvs [ 1 ] . push ( [ ( new B ) . fromArray ( m , 2 * a ) , ( new B ) . fromArray ( m , 2 * b ) , ( new B ) . fromArray ( m , 2 * d ) ] ) } var c = this , d = null !== a . index ? a . index . array : void 0 , e = a . attributes ; if ( void 0 === e . position ) return console . error ( "THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion." ) , this ; var f = e . position . array , g = void 0 !== e . normal ? e . normal . array : void 0 , h = void 0 !== e . color ? e . color . array : void 0 , l = void 0 !== e . uv ? e . uv . array : void 0 , m = void 0 !== e . uv2 ? e . uv2 . array : void 0 ; void 0 !==
m && ( this . faceVertexUvs [ 1 ] = [ ] ) ; for ( e = 0 ; e < f . length ; e += 3 ) c . vertices . push ( ( new n ) . fromArray ( f , e ) ) , void 0 !== h && c . colors . push ( ( new H ) . fromArray ( h , e ) ) ; var k = a . groups ; if ( 0 < k . length ) for ( e = 0 ; e < k . length ; e ++ ) { f = k [ e ] ; var p = f . start , t = p ; for ( p += f . count ; t < p ; t += 3 ) void 0 !== d ? b ( d [ t ] , d [ t + 1 ] , d [ t + 2 ] , f . materialIndex ) : b ( t , t + 1 , t + 2 , f . materialIndex ) } else if ( void 0 !== d ) for ( e = 0 ; e < d . length ; e += 3 ) b ( d [ e ] , d [ e + 1 ] , d [ e + 2 ] ) ; else for ( e = 0 ; e < f . length / 3 ; e += 3 ) b ( e , e + 1 , e + 2 ) ; this . computeFaceNormals ( ) ; null !== a . boundingBox && ( this . boundingBox = a . boundingBox . clone ( ) ) ;
null !== a . boundingSphere && ( this . boundingSphere = a . boundingSphere . clone ( ) ) ; return this } , center : function ( ) { this . computeBoundingBox ( ) ; this . boundingBox . getCenter ( Jf ) . negate ( ) ; this . translate ( Jf . x , Jf . y , Jf . z ) ; return this } , normalize : function ( ) { this . computeBoundingSphere ( ) ; var a = this . boundingSphere . center , b = this . boundingSphere . radius ; b = 0 === b ? 1 : 1 / b ; var c = new S ; c . set ( b , 0 , 0 , - b * a . x , 0 , b , 0 , - b * a . y , 0 , 0 , b , - b * a . z , 0 , 0 , 0 , 1 ) ; this . applyMatrix ( c ) ; return this } , computeFaceNormals : function ( ) { for ( var a = new n , b = new n , c = 0 , d = this . faces . length ; c <
d ; c ++ ) { var e = this . faces [ c ] , f = this . vertices [ e . a ] , g = this . vertices [ e . b ] ; a . subVectors ( this . vertices [ e . c ] , g ) ; b . subVectors ( f , g ) ; a . cross ( b ) ; a . normalize ( ) ; e . normal . copy ( a ) } } , computeVertexNormals : function ( a ) { void 0 === a && ( a = ! 0 ) ; var b ; var c = Array ( this . vertices . length ) ; var d = 0 ; for ( b = this . vertices . length ; d < b ; d ++ ) c [ d ] = new n ; if ( a ) { var e = new n , f = new n ; a = 0 ; for ( d = this . faces . length ; a < d ; a ++ ) { b = this . faces [ a ] ; var g = this . vertices [ b . a ] ; var h = this . vertices [ b . b ] ; var l = this . vertices [ b . c ] ; e . subVectors ( l , h ) ; f . subVectors ( g , h ) ;
e . cross ( f ) ; c [ b . a ] . add ( e ) ; c [ b . b ] . add ( e ) ; c [ b . c ] . add ( e ) } } else for ( this . computeFaceNormals ( ) , a = 0 , d = this . faces . length ; a < d ; a ++ ) b = this . faces [ a ] , c [ b . a ] . add ( b . normal ) , c [ b . b ] . add ( b . normal ) , c [ b . c ] . add ( b . normal ) ; d = 0 ; for ( b = this . vertices . length ; d < b ; d ++ ) c [ d ] . normalize ( ) ; a = 0 ; for ( d = this . faces . length ; a < d ; a ++ ) b = this . faces [ a ] , g = b . vertexNormals , 3 === g . length ? ( g [ 0 ] . copy ( c [ b . a ] ) , g [ 1 ] . copy ( c [ b . b ] ) , g [ 2 ] . copy ( c [ b . c ] ) ) : ( g [ 0 ] = c [ b . a ] . clone ( ) , g [ 1 ] = c [ b . b ] . clone ( ) , g [ 2 ] = c [ b . c ] . clone ( ) ) ; 0 < this . faces . length && ( this . normalsNeedUpdate =
! 0 ) } , computeFlatVertexNormals : function ( ) { var a ; this . computeFaceNormals ( ) ; var b = 0 ; for ( a = this . faces . length ; b < a ; b ++ ) { var c = this . faces [ b ] ; var d = c . vertexNormals ; 3 === d . length ? ( d [ 0 ] . copy ( c . normal ) , d [ 1 ] . copy ( c . normal ) , d [ 2 ] . copy ( c . normal ) ) : ( d [ 0 ] = c . normal . clone ( ) , d [ 1 ] = c . normal . clone ( ) , d [ 2 ] = c . normal . clone ( ) ) } 0 < this . faces . length && ( this . normalsNeedUpdate = ! 0 ) } , computeMorphNormals : function ( ) { var a , b ; var c = 0 ; for ( b = this . faces . length ; c < b ; c ++ ) { var d = this . faces [ c ] ; d . _ _originalFaceNormal ? d . _ _originalFaceNormal . copy ( d . normal ) :
d . _ _originalFaceNormal = d . normal . clone ( ) ; d . _ _originalVertexNormals || ( d . _ _originalVertexNormals = [ ] ) ; var e = 0 ; for ( a = d . vertexNormals . length ; e < a ; e ++ ) d . _ _originalVertexNormals [ e ] ? d . _ _originalVertexNormals [ e ] . copy ( d . vertexNormals [ e ] ) : d . _ _originalVertexNormals [ e ] = d . vertexNormals [ e ] . clone ( ) } var f = new O ; f . faces = this . faces ; e = 0 ; for ( a = this . morphTargets . length ; e < a ; e ++ ) { if ( ! this . morphNormals [ e ] ) { this . morphNormals [ e ] = { } ; this . morphNormals [ e ] . faceNormals = [ ] ; this . morphNormals [ e ] . vertexNormals = [ ] ; d = this . morphNormals [ e ] . faceNormals ;
var g = this . morphNormals [ e ] . vertexNormals ; c = 0 ; for ( b = this . faces . length ; c < b ; c ++ ) { var h = new n ; var l = { a : new n , b : new n , c : new n } ; d . push ( h ) ; g . push ( l ) } } g = this . morphNormals [ e ] ; f . vertices = this . morphTargets [ e ] . vertices ; f . computeFaceNormals ( ) ; f . computeVertexNormals ( ) ; c = 0 ; for ( b = this . faces . length ; c < b ; c ++ ) d = this . faces [ c ] , h = g . faceNormals [ c ] , l = g . vertexNormals [ c ] , h . copy ( d . normal ) , l . a . copy ( d . vertexNormals [ 0 ] ) , l . b . copy ( d . vertexNormals [ 1 ] ) , l . c . copy ( d . vertexNormals [ 2 ] ) } c = 0 ; for ( b = this . faces . length ; c < b ; c ++ ) d = this . faces [ c ] ,
d . normal = d . _ _originalFaceNormal , d . vertexNormals = d . _ _originalVertexNormals } , computeBoundingBox : function ( ) { null === this . boundingBox && ( this . boundingBox = new Qa ) ; this . boundingBox . setFromPoints ( this . vertices ) } , computeBoundingSphere : function ( ) { null === this . boundingSphere && ( this . boundingSphere = new mb ) ; this . boundingSphere . setFromPoints ( this . vertices ) } , merge : function ( a , b , c ) { if ( a && a . isGeometry ) { var d , e = this . vertices . length , f = this . vertices , g = a . vertices , h = this . faces , l = a . faces , m = this . colors , k = a . colors ; void 0 === c &&
( c = 0 ) ; void 0 !== b && ( d = ( new ca ) . getNormalMatrix ( b ) ) ; for ( var p = 0 , n = g . length ; p < n ; p ++ ) { var u = g [ p ] . clone ( ) ; void 0 !== b && u . applyMatrix4 ( b ) ; f . push ( u ) } p = 0 ; for ( n = k . length ; p < n ; p ++ ) m . push ( k [ p ] . clone ( ) ) ; p = 0 ; for ( n = l . length ; p < n ; p ++ ) { g = l [ p ] ; var q = g . vertexNormals ; k = g . vertexColors ; m = new wc ( g . a + e , g . b + e , g . c + e ) ; m . normal . copy ( g . normal ) ; void 0 !== d && m . normal . applyMatrix3 ( d ) . normalize ( ) ; b = 0 ; for ( f = q . length ; b < f ; b ++ ) u = q [ b ] . clone ( ) , void 0 !== d && u . applyMatrix3 ( d ) . normalize ( ) , m . vertexNormals . push ( u ) ; m . color . copy ( g . color ) ; b = 0 ; for ( f =
k . length ; b < f ; b ++ ) u = k [ b ] , m . vertexColors . push ( u . clone ( ) ) ; m . materialIndex = g . materialIndex + c ; h . push ( m ) } p = 0 ; for ( n = a . faceVertexUvs . length ; p < n ; p ++ ) for ( c = a . faceVertexUvs [ p ] , void 0 === this . faceVertexUvs [ p ] && ( this . faceVertexUvs [ p ] = [ ] ) , b = 0 , f = c . length ; b < f ; b ++ ) { d = c [ b ] ; e = [ ] ; h = 0 ; for ( l = d . length ; h < l ; h ++ ) e . push ( d [ h ] . clone ( ) ) ; this . faceVertexUvs [ p ] . push ( e ) } } else console . error ( "THREE.Geometry.merge(): geometry not an instance of THREE.Geometry." , a ) } , mergeMesh : function ( a ) { a && a . isMesh ? ( a . matrixAutoUpdate && a . updateMatrix ( ) ,
this . merge ( a . geometry , a . matrix ) ) : console . error ( "THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh." , a ) } , mergeVertices : function ( ) { var a = { } , b = [ ] , c = [ ] , d = Math . pow ( 10 , 4 ) , e ; var f = 0 ; for ( e = this . vertices . length ; f < e ; f ++ ) { var g = this . vertices [ f ] ; g = Math . round ( g . x * d ) + "_" + Math . round ( g . y * d ) + "_" + Math . round ( g . z * d ) ; void 0 === a [ g ] ? ( a [ g ] = f , b . push ( this . vertices [ f ] ) , c [ f ] = b . length - 1 ) : c [ f ] = c [ a [ g ] ] } a = [ ] ; f = 0 ; for ( e = this . faces . length ; f < e ; f ++ ) for ( d = this . faces [ f ] , d . a = c [ d . a ] , d . b = c [ d . b ] , d . c = c [ d . c ] , d = [ d . a , d . b , d . c ] , g = 0 ; 3 >
g ; g ++ ) if ( d [ g ] === d [ ( g + 1 ) % 3 ] ) { a . push ( f ) ; break } for ( f = a . length - 1 ; 0 <= f ; f -- ) for ( d = a [ f ] , this . faces . splice ( d , 1 ) , c = 0 , e = this . faceVertexUvs . length ; c < e ; c ++ ) this . faceVertexUvs [ c ] . splice ( d , 1 ) ; f = this . vertices . length - b . length ; this . vertices = b ; return f } , setFromPoints : function ( a ) { this . vertices = [ ] ; for ( var b = 0 , c = a . length ; b < c ; b ++ ) { var d = a [ b ] ; this . vertices . push ( new n ( d . x , d . y , d . z || 0 ) ) } return this } , sortFacesByMaterialIndex : function ( ) { for ( var a = this . faces , b = a . length , c = 0 ; c < b ; c ++ ) a [ c ] . _id = c ; a . sort ( function ( a , b ) { return a . materialIndex -
b . materialIndex } ) ; var d = this . faceVertexUvs [ 0 ] , e = this . faceVertexUvs [ 1 ] , f , g ; d && d . length === b && ( f = [ ] ) ; e && e . length === b && ( g = [ ] ) ; for ( c = 0 ; c < b ; c ++ ) { var h = a [ c ] . _id ; f && f . push ( d [ h ] ) ; g && g . push ( e [ h ] ) } f && ( this . faceVertexUvs [ 0 ] = f ) ; g && ( this . faceVertexUvs [ 1 ] = g ) } , toJSON : function ( ) { function a ( a , b , c ) { return c ? a | 1 << b : a & ~ ( 1 << b ) } function b ( a ) { var b = a . x . toString ( ) + a . y . toString ( ) + a . z . toString ( ) ; if ( void 0 !== m [ b ] ) return m [ b ] ; m [ b ] = l . length / 3 ; l . push ( a . x , a . y , a . z ) ; return m [ b ] } function c ( a ) { var b = a . r . toString ( ) + a . g . toString ( ) + a . b . toString ( ) ;
if ( void 0 !== n [ b ] ) return n [ b ] ; n [ b ] = k . length ; k . push ( a . getHex ( ) ) ; return n [ b ] } function d ( a ) { var b = a . x . toString ( ) + a . y . toString ( ) ; if ( void 0 !== u [ b ] ) return u [ b ] ; u [ b ] = t . length / 2 ; t . push ( a . x , a . y ) ; return u [ b ] } var e = { metadata : { version : 4.5 , type : "Geometry" , generator : "Geometry.toJSON" } } ; e . uuid = this . uuid ; e . type = this . type ; "" !== this . name && ( e . name = this . name ) ; if ( void 0 !== this . parameters ) { var f = this . parameters , g ; for ( g in f ) void 0 !== f [ g ] && ( e [ g ] = f [ g ] ) ; return e } f = [ ] ; for ( g = 0 ; g < this . vertices . length ; g ++ ) { var h = this . vertices [ g ] ;
f . push ( h . x , h . y , h . z ) } h = [ ] ; var l = [ ] , m = { } , k = [ ] , n = { } , t = [ ] , u = { } ; for ( g = 0 ; g < this . faces . length ; g ++ ) { var q = this . faces [ g ] , v = void 0 !== this . faceVertexUvs [ 0 ] [ g ] , A = 0 < q . normal . length ( ) , w = 0 < q . vertexNormals . length , x = 1 !== q . color . r || 1 !== q . color . g || 1 !== q . color . b , B = 0 < q . vertexColors . length , y = 0 ; y = a ( y , 0 , 0 ) ; y = a ( y , 1 , ! 0 ) ; y = a ( y , 2 , ! 1 ) ; y = a ( y , 3 , v ) ; y = a ( y , 4 , A ) ; y = a ( y , 5 , w ) ; y = a ( y , 6 , x ) ; y = a ( y , 7 , B ) ; h . push ( y ) ; h . push ( q . a , q . b , q . c ) ; h . push ( q . materialIndex ) ; v && ( v = this . faceVertexUvs [ 0 ] [ g ] , h . push ( d ( v [ 0 ] ) , d ( v [ 1 ] ) , d ( v [ 2 ] ) ) ) ; A && h . push ( b ( q . normal ) ) ;
w && ( A = q . vertexNormals , h . push ( b ( A [ 0 ] ) , b ( A [ 1 ] ) , b ( A [ 2 ] ) ) ) ; x && h . push ( c ( q . color ) ) ; B && ( q = q . vertexColors , h . push ( c ( q [ 0 ] ) , c ( q [ 1 ] ) , c ( q [ 2 ] ) ) ) } e . data = { } ; e . data . vertices = f ; e . data . normals = l ; 0 < k . length && ( e . data . colors = k ) ; 0 < t . length && ( e . data . uvs = [ t ] ) ; e . data . faces = h ; return e } , clone : function ( ) { return ( new O ) . copy ( this ) } , copy : function ( a ) { var b , c , d ; this . vertices = [ ] ; this . colors = [ ] ; this . faces = [ ] ; this . faceVertexUvs = [ [ ] ] ; this . morphTargets = [ ] ; this . morphNormals = [ ] ; this . skinWeights = [ ] ; this . skinIndices = [ ] ; this . lineDistances =
[ ] ; this . boundingSphere = this . boundingBox = null ; this . name = a . name ; var e = a . vertices ; var f = 0 ; for ( b = e . length ; f < b ; f ++ ) this . vertices . push ( e [ f ] . clone ( ) ) ; e = a . colors ; f = 0 ; for ( b = e . length ; f < b ; f ++ ) this . colors . push ( e [ f ] . clone ( ) ) ; e = a . faces ; f = 0 ; for ( b = e . length ; f < b ; f ++ ) this . faces . push ( e [ f ] . clone ( ) ) ; f = 0 ; for ( b = a . faceVertexUvs . length ; f < b ; f ++ ) { var g = a . faceVertexUvs [ f ] ; void 0 === this . faceVertexUvs [ f ] && ( this . faceVertexUvs [ f ] = [ ] ) ; e = 0 ; for ( c = g . length ; e < c ; e ++ ) { var h = g [ e ] , l = [ ] ; var m = 0 ; for ( d = h . length ; m < d ; m ++ ) l . push ( h [ m ] . clone ( ) ) ;
this . faceVertexUvs [ f ] . push ( l ) } } m = a . morphTargets ; f = 0 ; for ( b = m . length ; f < b ; f ++ ) { d = { } ; d . name = m [ f ] . name ; if ( void 0 !== m [ f ] . vertices ) for ( d . vertices = [ ] , e = 0 , c = m [ f ] . vertices . length ; e < c ; e ++ ) d . vertices . push ( m [ f ] . vertices [ e ] . clone ( ) ) ; if ( void 0 !== m [ f ] . normals ) for ( d . normals = [ ] , e = 0 , c = m [ f ] . normals . length ; e < c ; e ++ ) d . normals . push ( m [ f ] . normals [ e ] . clone ( ) ) ; this . morphTargets . push ( d ) } m = a . morphNormals ; f = 0 ; for ( b = m . length ; f < b ; f ++ ) { d = { } ; if ( void 0 !== m [ f ] . vertexNormals ) for ( d . vertexNormals = [ ] , e = 0 , c = m [ f ] . vertexNormals . length ; e < c ; e ++ ) g =
m [ f ] . vertexNormals [ e ] , h = { } , h . a = g . a . clone ( ) , h . b = g . b . clone ( ) , h . c = g . c . clone ( ) , d . vertexNormals . push ( h ) ; if ( void 0 !== m [ f ] . faceNormals ) for ( d . faceNormals = [ ] , e = 0 , c = m [ f ] . faceNormals . length ; e < c ; e ++ ) d . faceNormals . push ( m [ f ] . faceNormals [ e ] . clone ( ) ) ; this . morphNormals . push ( d ) } e = a . skinWeights ; f = 0 ; for ( b = e . length ; f < b ; f ++ ) this . skinWeights . push ( e [ f ] . clone ( ) ) ; e = a . skinIndices ; f = 0 ; for ( b = e . length ; f < b ; f ++ ) this . skinIndices . push ( e [ f ] . clone ( ) ) ; e = a . lineDistances ; f = 0 ; for ( b = e . length ; f < b ; f ++ ) this . lineDistances . push ( e [ f ] ) ; f = a . boundingBox ;
null !== f && ( this . boundingBox = f . clone ( ) ) ; f = a . boundingSphere ; null !== f && ( this . boundingSphere = f . clone ( ) ) ; this . elementsNeedUpdate = a . elementsNeedUpdate ; this . verticesNeedUpdate = a . verticesNeedUpdate ; this . uvsNeedUpdate = a . uvsNeedUpdate ; this . normalsNeedUpdate = a . normalsNeedUpdate ; this . colorsNeedUpdate = a . colorsNeedUpdate ; this . lineDistancesNeedUpdate = a . lineDistancesNeedUpdate ; this . groupsNeedUpdate = a . groupsNeedUpdate ; return this } , dispose : function ( ) { this . dispatchEvent ( { type : "dispose" } ) } } ) ; var fh = function ( a ) { function b ( b ,
d , e , f , g , h ) { a . call ( this ) ; this . type = "BoxGeometry" ; this . parameters = { width : b , height : d , depth : e , widthSegments : f , heightSegments : g , depthSegments : h } ; this . fromBufferGeometry ( new Gd ( b , d , e , f , g , h ) ) ; this . mergeVertices ( ) } a && ( b . _ _proto _ _ = a ) ; b . prototype = Object . create ( a && a . prototype ) ; return b . prototype . constructor = b } ( O ) , Gd = function ( a ) { function b ( b , d , e , f , g , h ) { function c ( a , b , c , d , e , f , g , h , l , r , y ) { var w = f / l , x = g / r , A = f / 2 , z = g / 2 , B = h / 2 ; g = l + 1 ; var D = r + 1 , E = f = 0 , C , G , F = new n ; for ( G = 0 ; G < D ; G ++ ) { var I = G * x - z ; for ( C = 0 ; C < g ; C ++ ) F [ a ] = ( C * w - A ) *
d , F [ b ] = I * e , F [ c ] = B , p . push ( F . x , F . y , F . z ) , F [ a ] = 0 , F [ b ] = 0 , F [ c ] = 0 < h ? 1 : - 1 , t . push ( F . x , F . y , F . z ) , u . push ( C / l ) , u . push ( 1 - G / r ) , f += 1 } for ( G = 0 ; G < r ; G ++ ) for ( C = 0 ; C < l ; C ++ ) a = q + C + g * ( G + 1 ) , b = q + ( C + 1 ) + g * ( G + 1 ) , c = q + ( C + 1 ) + g * G , k . push ( q + C + g * G , a , c ) , k . push ( a , b , c ) , E += 6 ; m . addGroup ( v , E , y ) ; v += E ; q += f } a . call ( this ) ; this . type = "BoxBufferGeometry" ; this . parameters = { width : b , height : d , depth : e , widthSegments : f , heightSegments : g , depthSegments : h } ; var m = this ; b = b || 1 ; d = d || 1 ; e = e || 1 ; f = Math . floor ( f ) || 1 ; g = Math . floor ( g ) || 1 ; h = Math . floor ( h ) || 1 ; var k = [ ] , p = [ ] , t =
[ ] , u = [ ] , q = 0 , v = 0 ; c ( "z" , "y" , "x" , - 1 , - 1 , e , d , b , h , g , 0 ) ; c ( "z" , "y" , "x" , 1 , - 1 , e , d , - b , h , g , 1 ) ; c ( "x" , "z" , "y" , 1 , 1 , b , e , d , f , h , 2 ) ; c ( "x" , "z" , "y" , 1 , - 1 , b , e , - d , f , h , 3 ) ; c ( "x" , "y" , "z" , 1 , - 1 , b , d , e , f , g , 4 ) ; c ( "x" , "y" , "z" , - 1 , - 1 , b , d , - e , f , g , 5 ) ; this . setIndex ( k ) ; this . setAttribute ( "position" , new D ( p , 3 ) ) ; this . setAttribute ( "normal" , new D ( t , 3 ) ) ; this . setAttribute ( "uv" , new D ( u , 2 ) ) } a && ( b . _ _proto _ _ = a ) ; b . prototype = Object . create ( a && a . prototype ) ; return b . prototype . constructor = b } ( E ) , Ik = { clone : Xb , merge : Da } ; na . prototype = Object . create ( C . prototype ) ;
na . prototype . constructor = na ; na . prototype . isShaderMaterial = ! 0 ; na . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . fragmentShader = a . fragmentShader ; this . vertexShader = a . vertexShader ; this . uniforms = Xb ( a . uniforms ) ; this . defines = Object . assign ( { } , a . defines ) ; this . wireframe = a . wireframe ; this . wireframeLinewidth = a . wireframeLinewidth ; this . lights = a . lights ; this . clipping = a . clipping ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; this . morphNormals = a . morphNormals ; this . extensions = a . extensions ; return this } ;
na . prototype . toJSON = function ( a ) { var b = C . prototype . toJSON . call ( this , a ) ; b . uniforms = { } ; for ( var c in this . uniforms ) { var d = this . uniforms [ c ] . value ; b . uniforms [ c ] = d && d . isTexture ? { type : "t" , value : d . toJSON ( a ) . uuid } : d && d . isColor ? { type : "c" , value : d . getHex ( ) } : d && d . isVector2 ? { type : "v2" , value : d . toArray ( ) } : d && d . isVector3 ? { type : "v3" , value : d . toArray ( ) } : d && d . isVector4 ? { type : "v4" , value : d . toArray ( ) } : d && d . isMatrix3 ? { type : "m3" , value : d . toArray ( ) } : d && d . isMatrix4 ? { type : "m4" , value : d . toArray ( ) } : { value : d } } 0 < Object . keys ( this . defines ) . length &&
( b . defines = this . defines ) ; b . vertexShader = this . vertexShader ; b . fragmentShader = this . fragmentShader ; a = { } ; for ( var e in this . extensions ) ! 0 === this . extensions [ e ] && ( a [ e ] = ! 0 ) ; 0 < Object . keys ( a ) . length && ( b . extensions = a ) ; return b } ; cb . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : cb , isCamera : ! 0 , copy : function ( a , b ) { y . prototype . copy . call ( this , a , b ) ; this . matrixWorldInverse . copy ( a . matrixWorldInverse ) ; this . projectionMatrix . copy ( a . projectionMatrix ) ; this . projectionMatrixInverse . copy ( a . projectionMatrixInverse ) ;
return this } , getWorldDirection : function ( a ) { void 0 === a && ( console . warn ( "THREE.Camera: .getWorldDirection() target is now required" ) , a = new n ) ; this . updateMatrixWorld ( ! 0 ) ; var b = this . matrixWorld . elements ; return a . set ( - b [ 8 ] , - b [ 9 ] , - b [ 10 ] ) . normalize ( ) } , updateMatrixWorld : function ( a ) { y . prototype . updateMatrixWorld . call ( this , a ) ; this . matrixWorldInverse . getInverse ( this . matrixWorld ) } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } } ) ; da . prototype = Object . assign ( Object . create ( cb . prototype ) , { constructor : da ,
isPerspectiveCamera : ! 0 , copy : function ( a , b ) { cb . prototype . copy . call ( this , a , b ) ; this . fov = a . fov ; this . zoom = a . zoom ; this . near = a . near ; this . far = a . far ; this . focus = a . focus ; this . aspect = a . aspect ; this . view = null === a . view ? null : Object . assign ( { } , a . view ) ; this . filmGauge = a . filmGauge ; this . filmOffset = a . filmOffset ; return this } , setFocalLength : function ( a ) { a = . 5 * this . getFilmHeight ( ) / a ; this . fov = 2 * R . RAD2DEG * Math . atan ( a ) ; this . updateProjectionMatrix ( ) } , getFocalLength : function ( ) { var a = Math . tan ( . 5 * R . DEG2RAD * this . fov ) ; return . 5 * this . getFilmHeight ( ) /
a } , getEffectiveFOV : function ( ) { return 2 * R . RAD2DEG * Math . atan ( Math . tan ( . 5 * R . DEG2RAD * this . fov ) / this . zoom ) } , getFilmWidth : function ( ) { return this . filmGauge * Math . min ( this . aspect , 1 ) } , getFilmHeight : function ( ) { return this . filmGauge / Math . max ( this . aspect , 1 ) } , setViewOffset : function ( a , b , c , d , e , f ) { this . aspect = a / b ; null === this . view && ( this . view = { enabled : ! 0 , fullWidth : 1 , fullHeight : 1 , offsetX : 0 , offsetY : 0 , width : 1 , height : 1 } ) ; this . view . enabled = ! 0 ; this . view . fullWidth = a ; this . view . fullHeight = b ; this . view . offsetX = c ; this . view . offsetY =
d ; this . view . width = e ; this . view . height = f ; this . updateProjectionMatrix ( ) } , clearViewOffset : function ( ) { null !== this . view && ( this . view . enabled = ! 1 ) ; this . updateProjectionMatrix ( ) } , updateProjectionMatrix : function ( ) { var a = this . near , b = a * Math . tan ( . 5 * R . DEG2RAD * this . fov ) / this . zoom , c = 2 * b , d = this . aspect * c , e = - . 5 * d , f = this . view ; if ( null !== this . view && this . view . enabled ) { var g = f . fullWidth , h = f . fullHeight ; e += f . offsetX * d / g ; b -= f . offsetY * c / h ; d *= f . width / g ; c *= f . height / h } f = this . filmOffset ; 0 !== f && ( e += a * f / this . getFilmWidth ( ) ) ; this . projectionMatrix . makePerspective ( e ,
e + d , b , b - c , a , this . far ) ; this . projectionMatrixInverse . getInverse ( this . projectionMatrix ) } , toJSON : function ( a ) { a = y . prototype . toJSON . call ( this , a ) ; a . object . fov = this . fov ; a . object . zoom = this . zoom ; a . object . near = this . near ; a . object . far = this . far ; a . object . focus = this . focus ; a . object . aspect = this . aspect ; null !== this . view && ( a . object . view = Object . assign ( { } , this . view ) ) ; a . object . filmGauge = this . filmGauge ; a . object . filmOffset = this . filmOffset ; return a } } ) ; Ac . prototype = Object . create ( y . prototype ) ; Ac . prototype . constructor = Ac ; Bb . prototype =
Object . create ( la . prototype ) ; Bb . prototype . constructor = Bb ; Bb . prototype . isWebGLRenderTargetCube = ! 0 ; Bb . prototype . fromEquirectangularTexture = function ( a , b ) { this . texture . type = b . type ; this . texture . format = b . format ; this . texture . encoding = b . encoding ; var c = new wd , d = new na ( { type : "CubemapFromEquirect" , uniforms : Xb ( { tEquirect : { value : null } } ) , vertexShader : "varying vec3 vWorldDirection;\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}" ,
2019-10-25 18:42:56 +08:00
fragmentShader : "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}" , side : 1 , blending : 0 } ) ; d . uniforms . tEquirect . value = b ; b = new ja ( new Gd ( 5 ,
2019-12-11 10:47:24 +08:00
5 , 5 ) , d ) ; c . add ( b ) ; d = new Ac ( 1 , 10 , 1 ) ; d . renderTarget = this ; d . renderTarget . texture . name = "CubeCameraTexture" ; d . update ( a , c ) ; b . geometry . dispose ( ) ; b . material . dispose ( ) ; return this } ; Yb . prototype = Object . create ( Y . prototype ) ; Yb . prototype . constructor = Yb ; Yb . prototype . isDataTexture = ! 0 ; var sd = new mb , Kf = new n ; Object . assign ( Ed . prototype , { set : function ( a , b , c , d , e , f ) { var g = this . planes ; g [ 0 ] . copy ( a ) ; g [ 1 ] . copy ( b ) ; g [ 2 ] . copy ( c ) ; g [ 3 ] . copy ( d ) ; g [ 4 ] . copy ( e ) ; g [ 5 ] . copy ( f ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } ,
copy : function ( a ) { for ( var b = this . planes , c = 0 ; 6 > c ; c ++ ) b [ c ] . copy ( a . planes [ c ] ) ; return this } , setFromMatrix : function ( a ) { var b = this . planes , c = a . elements ; a = c [ 0 ] ; var d = c [ 1 ] , e = c [ 2 ] , f = c [ 3 ] , g = c [ 4 ] , h = c [ 5 ] , l = c [ 6 ] , k = c [ 7 ] , n = c [ 8 ] , p = c [ 9 ] , t = c [ 10 ] , u = c [ 11 ] , q = c [ 12 ] , v = c [ 13 ] , A = c [ 14 ] ; c = c [ 15 ] ; b [ 0 ] . setComponents ( f - a , k - g , u - n , c - q ) . normalize ( ) ; b [ 1 ] . setComponents ( f + a , k + g , u + n , c + q ) . normalize ( ) ; b [ 2 ] . setComponents ( f + d , k + h , u + p , c + v ) . normalize ( ) ; b [ 3 ] . setComponents ( f - d , k - h , u - p , c - v ) . normalize ( ) ; b [ 4 ] . setComponents ( f - e , k - l , u - t , c - A ) . normalize ( ) ;
b [ 5 ] . setComponents ( f + e , k + l , u + t , c + A ) . normalize ( ) ; return this } , intersectsObject : function ( a ) { var b = a . geometry ; null === b . boundingSphere && b . computeBoundingSphere ( ) ; sd . copy ( b . boundingSphere ) . applyMatrix4 ( a . matrixWorld ) ; return this . intersectsSphere ( sd ) } , intersectsSprite : function ( a ) { sd . center . set ( 0 , 0 , 0 ) ; sd . radius = . 7071067811865476 ; sd . applyMatrix4 ( a . matrixWorld ) ; return this . intersectsSphere ( sd ) } , intersectsSphere : function ( a ) { var b = this . planes , c = a . center ; a = - a . radius ; for ( var d = 0 ; 6 > d ; d ++ ) if ( b [ d ] . distanceToPoint ( c ) <
a ) return ! 1 ; return ! 0 } , intersectsBox : function ( a ) { for ( var b = this . planes , c = 0 ; 6 > c ; c ++ ) { var d = b [ c ] ; Kf . x = 0 < d . normal . x ? a . max . x : a . min . x ; Kf . y = 0 < d . normal . y ? a . max . y : a . min . y ; Kf . z = 0 < d . normal . z ? a . max . z : a . min . z ; if ( 0 > d . distanceToPoint ( Kf ) ) return ! 1 } return ! 0 } , containsPoint : function ( a ) { for ( var b = this . planes , c = 0 ; 6 > c ; c ++ ) if ( 0 > b [ c ] . distanceToPoint ( a ) ) return ! 1 ; return ! 0 } } ) ; var Q = { alphamap _fragment : "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif" , alphamap _pars _fragment : "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif" ,
alphatest _fragment : "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif" , aomap _fragment : "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif" ,
2019-10-25 18:42:56 +08:00
aomap _pars _fragment : "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif" , begin _vertex : "vec3 transformed = vec3( position );" , beginnormal _vertex : "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif" , bsdfs : " vec2 integrateSpecularBRDF ( const in float dotNV , const in float roughness ) { \ 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 \ treturn vec2 ( - 1.04 , 1.04 ) * a004 + r . zw ; \ n } \ nfloat punctualLightIntensityToIrradianceFactor ( const in float lightDistance , const in float cutoffDistance , const in float decayExponent ) { \ n # if defined ( PHYSICALLY _CORRECT _LIGHTS ) \ n \ tfloat distanceFalloff = 1.0 / max ( pow ( lightDistance , decayExponent ) , 0.01 ) ; \ n \ tif ( cutoffDistance > 0.0 ) { \ n \ t \ tdistanceFalloff *= pow2 ( saturate ( 1.0 - pow4 ( lightDistance / cutoffDistance ) ) ) ; \ n \ t } \ n \ treturn distanceFalloff ; \ n # else \ n \ tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) { \ n \ t \ treturn pow ( saturate ( - lightDistance / cutoffDistance + 1.0 ) , decayExponent ) ; \ n \ t } \ n \ treturn 1.0 ; \ n # endif \ n } \ nvec3 BRDF _Diffuse _Lambert ( const in vec3 diffuseColor ) { \ n \ treturn RECIPROCAL _PI * diffuseColor ; \ n } \ nvec3 F _Schlick ( const in vec3 specularColor , const in float dotLH ) { \ n \ tfloat fresnel = exp2 ( ( - 5.55473 * dotLH - 6.98316 ) * dotLH ) ; \ n \ treturn ( 1.0 - specularColor ) * fresnel + specularColor ; \ n } \ nvec3 F _Schlick _RoughnessDependent ( const in vec3 F0 , const in float dotNV , const in float roughness ) { \ n \ tfloat fresnel = exp2 ( ( - 5.55473 * dotNV - 6.98316 ) * dotNV ) ; \ n \ tvec3 Fr = max ( vec3 ( 1.0 - roughness ) , F0 ) - F0 ; \ n \ treturn Fr * fresnel + F0 ; \ 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 vec3 viewDir , const in vec3 normal , const in vec3 specularColor , const in float roughness ) { \ n \ tfloat alpha = pow2 ( roughness ) ; \ n \ tvec3 halfDir = normalize ( incidentLight . direction + viewDir ) ; \ n \ tfloat dotNL = saturate ( dot ( normal , incidentLight . direction ) ) ; \ n \ tfloat dotNV = saturate ( dot ( normal , viewDir ) ) ; \ n \ tfloat dotNH = saturate ( dot ( 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 ) ) -
2019-08-08 10:52:06 +08:00
bumpmap _pars _fragment : "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif" ,
clipping _planes _fragment : "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif" ,
2019-10-25 18:42:56 +08:00
clipping _planes _pars _fragment : "#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif" , clipping _planes _pars _vertex : "#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvarying vec3 vViewPosition;\n#endif" , clipping _planes _vertex : "#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif" ,
color _fragment : "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif" , color _pars _fragment : "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif" , color _pars _vertex : "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif" , color _vertex : "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif" , common : "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(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}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\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#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\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}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}" ,
2019-08-08 10:52:06 +08:00
cube _uv _reflection _fragment : " # ifdef ENVMAP _TYPE _CUBE _UV \ n # define cubeUV _textureSize ( 1024.0 ) \ nint getFaceFromDirection ( vec3 direction ) { \ n \ tvec3 absDirection = abs ( direction ) ; \ n \ tint face = - 1 ; \ n \ tif ( absDirection . x > absDirection . z ) { \ n \ t \ tif ( absDirection . x > absDirection . y ) \ n \ t \ t \ tface = direction . x > 0.0 ? 0 : 3 ; \ n \ t \ telse \ n \ t \ t \ tface = direction . y > 0.0 ? 1 : 4 ; \ n \ t } \ n \ telse { \ n \ t \ tif ( absDirection . z > absDirection . y ) \ n \ t \ t \ tface = direction . z > 0.0 ? 2 : 5 ; \ n \ t \ telse \ n \ t \ t \ tface = direction . y > 0.0 ? 1 : 4 ; \ n \ t } \ n \ treturn face ; \ n } \ n # define cubeUV _maxLods1 ( log2 ( cubeUV _textureSize * 0.25 ) - 1.0 ) \ n # define cubeUV _rangeClamp ( exp2 ( ( 6.0 - 1.0 ) * 2.0 ) ) \ nvec2 MipLevelInfo ( vec3 vec , float roughnessLevel , float roughness ) { \ n \ tfloat scale = exp2 ( cubeUV _maxLods1 - roughnessLevel ) ; \ n \ tfloat dxRoughness = dFdx ( roughness ) ; \ n \ tfloat dyRoughness = dFdy ( roughness ) ; \ n \ tvec3 dx = dFdx ( vec * scale * dxRoughness ) ; \ n \ tvec3 dy = dFdy ( vec * scale * dyRoughness ) ; \ n \ tfloat d = max ( dot ( dx , dx ) , dot ( dy , dy ) ) ; \ n \ td = clamp ( d , 1.0 , cubeUV _rangeClamp ) ; \ n \ tfloat mipLevel = 0.5 * log2 ( d ) ; \ n \ treturn vec2 ( floor ( mipLevel ) , fract ( mipLevel ) ) ; \ n } \ n # define cubeUV _maxLods2 ( log2 ( cubeUV _textureSize * 0.25 ) - 2.0 ) \ n # define cubeUV _rcpTextureSize ( 1.0 / cubeUV _textureSize ) \ nvec2 getCubeUV ( vec3 direction , float roughnessLevel , float mipLevel ) { \ n \ tmipLevel = roughnessLevel > cubeUV _maxLods2 - 3.0 ? 0.0 : mipLevel ; \ n \ tfloat a = 16.0 * cubeUV _rcpTextureSize ; \ n \ tvec2 exp2 _packed = exp2 ( vec2 ( roughnessLevel , mipLevel ) ) ; \ n \ tvec2 rcp _exp2 _packed = vec2 ( 1.0 ) / exp2 _packed ; \ n \ tfloat powScale = exp2 _packed . x * exp2 _packed . y ; \ n \ tfloat scale = rcp _exp2 _packed . x * rcp _exp2 _packed . y * 0.25 ; \ n \ tfloat mipOffset = 0.75 * ( 1.0 - rcp _exp2 _packed . y ) * rcp _exp2 _packed . x ; \ n \ tbool bRes = mipLevel == 0.0 ; \ n \ tscale = bRes && ( scale < a ) ? a : scale ; \ n \ tvec3 r ; \ n \ tvec2 offset ; \ n \ tint face = getFaceFromDirection ( direction ) ; \ n \ tfloat rcpPowScale = 1.0 / powScale ; \ n \ tif ( face == 0 ) { \ n \ t \ tr = vec3 ( direction . x , - direction . z , direction . y ) ; \ n \ t \ toffset = vec2 ( 0.0 + mipOffset , 0.75 * rcpPowScale ) ; \ n \ t \ toffset . y = bRes && ( offset . y < 2.0 * a ) ? a : offset . y ; \ n \ t } \ n \ telse if ( face == 1 ) { \ n \ t \ tr = vec3 ( direction . y , direction . x , direction . z ) ; \ n \ t \ toffset = vec2 ( scale + mipOffset , 0.75 * rcpPowScale ) ; \ n \ t \ toffset . y = bRes && ( offset . y < 2.0 * a ) ? a : offset . y ; \ n \ t } \ n \ telse if ( face == 2 ) { \ n \ t \ tr = vec3 ( direction . z , direction . x , direction . y ) ; \ n \ t \ toffset = vec2 ( 2.0 * scale + mipOffset , 0.75 * rcpPowScale ) ; \ n \ t \ toffset . y = bRes && ( offset . y < 2.0 * a ) ? a : offset . y ; \ n \ t } \ n \ telse if ( face == 3 ) { \ n \ t \ tr = vec3 ( direction . x , direction . z , direction . y ) ; \ n \ t \ toffset = vec2 ( 0.0 + mipOffset , 0.5 * rcpPowScale ) ; \ n \ t \ toffset . y = bRes && ( offset . y < 2.0 * a ) ? 0.0 : offset . y ; \ n \ t } \ n \ telse if ( face == 4 ) { \ n \ t \ tr = vec3 ( direction . y , direction . x , - direction . z ) ; \ n \ t \ toffset = vec2 ( scale + mipOffset , 0.5 * rcpPowScale ) ; \ n \ t \ toffset . y = bRes && ( offset . y < 2.0 * a ) ? 0.0 : offset . y ; \ n \ t } \ n \ telse { \ n \ t \ tr = vec3 ( direction . z , - direction . x , direction . y ) ; \ n \ t \ toffset = vec2 ( 2.0 * scale + mipOffset , 0.5 * rcpPowScale ) ; \ n \ t \ toffset . y = bRes && ( offset . y < 2.0 * a ) ? 0.0 : offset . y ; \ n \ t } \ n \ tr = normalize ( r ) ; \ n \ tfloat texelOffset = 0.5 * cubeUV _rcpTextureSize ; \ n \ tvec2 s = ( r . yz / abs ( r . x ) + vec2 ( 1.0 ) ) * 0.5 ; \ n \ tvec2 base = offset + vec2 ( texelOffset ) ; \ n \ treturn base + s * ( scale - 2.0 * texelOffset ) ; \ n } \ n # define cubeUV _maxLods3 ( log2 ( cubeUV _textureSize * 0.25 ) - 3.0 ) \ nvec4 textureCubeUV ( sampler2D envMap , vec3 reflectedDirection , float roughness ) { \ n \ tfloat roughnessVal = roughness * cubeUV _maxLods3 ; \ n \ tfloat r1 = floor ( roughnessVal ) ; \ n \ tfloat r2 = r1 + 1.0 ; \ n \ tfloat t = fract ( roughnessVal ) ; \ n \ tvec2 mipInfo = MipLevelInfo ( reflectedDirection , r1 , roughness ) ; \ n \ tfloat s = mipInfo . y ; \ n \ tfloat level0 = mipInfo . x ; \ n \ tfloat level1 = level0 + 1.0 ; \ n \ tlevel1 = level1 > 5.0 ? 5.0 : level1 ; \ n \ tlevel0 += min ( floor ( s + 0.5 ) , 5.0 ) ; \ n \ tvec2 uv _10 = getCubeUV ( reflectedDirection , r1 , level0 ) ; \ n \ tvec4 color10 = envMapTexelToLinear ( texture2D ( envMap , uv _10 ) ) ; \ n \ tvec2 uv _20 = getCubeUV ( reflectedDirection , r2 , level0 ) ; \ n \ tvec4 color20 = envM
2019-10-25 18:42:56 +08:00
defaultnormal _vertex : "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\ttransformedNormal = mat3( instanceMatrix ) * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = normalMatrix * objectTangent;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif" , displacementmap _pars _vertex : "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif" ,
displacementmap _vertex : "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif" , emissivemap _fragment : "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif" , emissivemap _pars _fragment : "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif" ,
encodings _fragment : "gl_FragColor = linearToOutputTexel( gl_FragColor );" , encodings _pars _fragment : "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\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 = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}" ,
2019-12-11 10:47:24 +08:00
envmap _fragment : "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, 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" ,
2019-10-25 18:42:56 +08:00
envmap _common _pars _fragment : "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif" , envmap _pars _fragment : "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif" ,
envmap _pars _vertex : "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif" , envmap _physical _pars _fragment : "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, roughness );\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" ,
2019-12-11 10:47:24 +08:00
envmap _vertex : "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif" ,
fog _vertex : "#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif" , fog _pars _vertex : "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif" , fog _fragment : "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif" , fog _pars _fragment : "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif" ,
2019-08-08 10:52:06 +08:00
gradientmap _pars _fragment : "#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif" , lightmap _fragment : "#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif" ,
2019-12-11 10:47:24 +08:00
lightmap _pars _fragment : "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif" , lights _lambert _vertex : "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = 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\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif" ,
2019-10-25 18:42:56 +08:00
lights _pars _begin : " uniform bool receiveShadow ; \ nuniform vec3 ambientLightColor ; \ nuniform vec3 lightProbe [ 9 ] ; \ nvec3 shGetIrradianceAt ( in vec3 normal , in vec3 shCoefficients [ 9 ] ) { \ n \ tfloat x = normal . x , y = normal . y , z = normal . z ; \ n \ tvec3 result = shCoefficients [ 0 ] * 0.886227 ; \ n \ tresult += shCoefficients [ 1 ] * 2.0 * 0.511664 * y ; \ n \ tresult += shCoefficients [ 2 ] * 2.0 * 0.511664 * z ; \ n \ tresult += shCoefficients [ 3 ] * 2.0 * 0.511664 * x ; \ n \ tresult += shCoefficients [ 4 ] * 2.0 * 0.429043 * x * y ; \ n \ tresult += shCoefficients [ 5 ] * 2.0 * 0.429043 * y * z ; \ n \ tresult += shCoefficients [ 6 ] * ( 0.743125 * z * z - 0.247708 ) ; \ n \ tresult += shCoefficients [ 7 ] * 2.0 * 0.429043 * x * z ; \ n \ tresult += shCoefficients [ 8 ] * 0.429043 * ( x * x - y * y ) ; \ n \ treturn result ; \ n } \ nvec3 getLightProbeIrradiance ( const in vec3 lightProbe [ 9 ] , const in GeometricContext geometry ) { \ n \ tvec3 worldNormal = inverseTransformDirection ( geometry . normal , viewMatrix ) ; \ n \ tvec3 irradiance = shGetIrradianceAt ( worldNormal , lightProbe ) ; \ n \ treturn irradiance ; \ n } \ 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 rectAreaLig
2019-08-08 10:52:06 +08:00
lights _phong _fragment : "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;" , lights _phong _pars _fragment : "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)" ,
2019-10-25 18:42:56 +08:00
lights _physical _fragment : "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = saturate( clearcoat );\tmaterial.clearcoatRoughness = clamp( clearcoatRoughness, 0.04, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif" ,
lights _physical _pars _fragment : " struct PhysicalMaterial { \ n \ tvec3 \ tdiffuseColor ; \ n \ tfloat \ tspecularRoughness ; \ n \ tvec3 \ tspecularColor ; \ n # ifdef CLEARCOAT \ n \ tfloat clearcoat ; \ n \ tfloat clearcoatRoughness ; \ n # endif \ n # ifdef USE _SHEEN \ n \ tvec3 sheenColor ; \ n # 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 # ifdef CLEARCOAT \ n \ t \ tfloat ccDotNL = saturate ( dot ( geometry . clearcoatNormal , directLight . direction ) ) ; \ n \ t \ tvec3 ccIrradiance = ccDotNL * directLight . color ; \ n \ t \ t # ifndef PHYSICALLY _CORRECT _LIGHTS \ n \ t \ t \ tccIrradiance *= PI ; \ n \ t \ t # endif \ n \ t \ tfloat clearcoatDHR = material . clearcoat * clearcoatDHRApprox ( material . clearcoatRoughness , ccDotNL ) ; \ n \ t \ treflectedLight . directSpecular += ccIrradiance * material . clearcoat * BRDF _Specular _GGX ( directLight , geometry . viewDir , geometry . clearcoatNormal , vec3 ( DEFAULT _SPECULAR _COEFFICIENT ) , material . clearcoatRoughness ) ; \ n \ t # else \ n \ t \ tfloat clearcoatDHR = 0.0 ; \ n \ t # endif \ n \ t # ifdef USE _SHEEN \ n \ t \ treflectedLight . directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF _Specular _Sheen ( \ n \ t \ t \ tmaterial . specularRoughness , \ n \ t \ t \ tdirectLight . direction , \ n \ t \ t \ tgeometry , \ n \ t \ t \ tmaterial . sheenColor \ n \ t \ t ) ; \ n \ t # else \ n \ t \ treflectedLight . directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF _Specular _GGX ( directLight , geometry . viewDir , geometry . normal , material . specularColor , material . specularRoughness ) ; \ n \ t # endif \ n \ treflectedLight . directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF _Diffuse _Lambert ( material . diffuseColor ) ; \ 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 irradiance , const in vec3 clearcoatRadiance , const in GeometricContext geometry , const in PhysicalMaterial material , inout ReflectedLight reflectedLight ) { \ n \ t # ifdef CL
2019-12-11 10:47:24 +08:00
lights _fragment _begin : "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\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#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( pointLight.shadow, directLight.visible, receiveShadow ) ) ? 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#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( spotLight.shadow, directLight.visible, receiveShadow ) ) ? 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#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( directionalLight.shadow, directLight.visible, receiveShadow ) ) ? 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 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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" ,
2019-10-25 18:42:56 +08:00
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( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif" ,
2019-12-11 10:47:24 +08:00
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, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif" , logdepthbuf _fragment : "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif" , logdepthbuf _pars _fragment : "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif" ,
2019-10-25 18:42:56 +08:00
logdepthbuf _pars _vertex : "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif" , logdepthbuf _vertex : "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif" ,
2019-12-11 10:47:24 +08:00
map _fragment : "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif" , map _pars _fragment : "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif" , map _particle _fragment : "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif" ,
map _particle _pars _fragment : "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif" , metalnessmap _fragment : "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif" , metalnessmap _pars _fragment : "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif" ,
morphnormal _vertex : "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif" , morphtarget _pars _vertex : "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif" ,
morphtarget _vertex : "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif" ,
normal _fragment _begin : "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;" ,
normal _fragment _maps : "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif" ,
normalmap _pars _fragment : "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif" ,
clearcoat _normal _fragment _begin : "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif" , clearcoat _normal _fragment _maps : "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif" , clearcoat _normalmap _pars _fragment : "#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif" ,
packing : "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpack2HalfToRGBA( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\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}" ,
2019-10-25 18:42:56 +08:00
premultiplied _alpha _fragment : "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif" , project _vertex : "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;" , dithering _fragment : "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif" , dithering _pars _fragment : "#ifdef 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" ,
2019-12-11 10:47:24 +08:00
roughnessmap _fragment : "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif" , roughnessmap _pars _fragment : "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif" , shadowmap _pars _fragment : " # ifdef USE _SHADOWMAP \ n \ t # if NUM _DIR _LIGHT _SHADOWS > 0 \ n \ t \ tuniform sampler2D directionalShadowMap [ NUM _DIR _LIGHT _SHADOWS ] ; \ n \ t \ tvarying vec4 vDirectionalShadowCoord [ NUM _DIR _LIGHT _SHADOWS ] ; \ n \ t # endif \ n \ t # if NUM _SPOT _LIGHT _SHADOWS > 0 \ n \ t \ tuniform sampler2D spotShadowMap [ NUM _SPOT _LIGHT _SHADOWS ] ; \ n \ t \ tvarying vec4 vSpotShadowCoord [ NUM _SPOT _LIGHT _SHADOWS ] ; \ n \ t # endif \ n \ t # if NUM _POINT _LIGHT _SHADOWS > 0 \ n \ t \ tuniform sampler2D pointShadowMap [ NUM _POINT _LIGHT _SHADOWS ] ; \ n \ t \ tvarying vec4 vPointShadowCoord [ NUM _POINT _LIGHT _SHADOWS ] ; \ n \ t # endif \ n \ tfloat texture2DCompare ( sampler2D depths , vec2 uv , float compare ) { \ n \ t \ treturn step ( compare , unpackRGBAToDepth ( texture2D ( depths , uv ) ) ) ; \ n \ t } \ n \ tvec2 texture2DDistribution ( sampler2D shadow , vec2 uv ) { \ n \ t \ treturn unpack2HalfToRGBA ( texture2D ( shadow , uv ) ) ; \ n \ t } \ n \ tfloat VSMShadow ( sampler2D shadow , vec2 uv , float compare ) { \ n \ t \ tfloat occlusion = 1.0 ; \ n \ t \ tvec2 distribution = texture2DDistribution ( shadow , uv ) ; \ n \ t \ tfloat hard _shadow = step ( compare , distribution . x ) ; \ n \ t \ tif ( hard _shadow != 1.0 ) { \ n \ t \ t \ tfloat distance = compare - distribution . x ; \ n \ t \ t \ tfloat variance = max ( 0.00000 , distribution . y * distribution . y ) ; \ n \ t \ t \ tfloat softness _probability = variance / ( variance + distance * distance ) ; \ t \ t \ tsoftness _probability = clamp ( ( softness _probability - 0.3 ) / ( 0.95 - 0.3 ) , 0.0 , 1.0 ) ; \ t \ t \ tocclusion = clamp ( max ( hard _shadow , softness _probability ) , 0.0 , 1.0 ) ; \ n \ t \ t } \ n \ t \ treturn occlusion ; \ 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 ) + 0.5 ) * texelSize ; \ 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 \ tfloat dx2 = dx0 / 2.0 ; \ n \ t \ t \ tfloat dy2 = dy0 / 2.0 ; \ n \ t \ t \ tfloat dx3 = dx1 / 2.0 ; \ n \ t \ t \ tfloat dy3 = dy1 / 2.0 ; \ 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 ( dx2 , dy2 ) , shadowCoord . z ) + \ n \ t \ t \ t \ ttexture2DCompare ( shadowMap , shadowCoord . xy + vec2 ( 0.0 , dy2 ) , shadowCoord . z ) + \ n \ t \ t \ t \ ttexture2DCompare ( shadowMap , shadowCoord . xy + vec2 ( dx3 , dy2 ) , shadowCoord . z ) + \ n \ t \ t \ t \ ttexture2DCompare ( shadowMap , sha
2019-10-25 18:42:56 +08:00
shadowmap _pars _vertex : "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif" ,
shadowmap _vertex : "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif" ,
shadowmask _pars _fragment : "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= all( bvec2( directionalLight.shadow, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= all( bvec2( spotLight.shadow, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= all( bvec2( pointLight.shadow, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}" ,
skinbase _vertex : "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif" , skinning _pars _vertex : "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp 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" ,
2019-08-08 10:52:06 +08:00
skinning _vertex : "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif" , skinnormal _vertex : "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif" ,
2019-10-25 18:42:56 +08:00
specularmap _fragment : "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif" , specularmap _pars _fragment : "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif" , tonemapping _fragment : "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif" , tonemapping _pars _fragment : "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}" ,
2019-12-11 10:47:24 +08:00
uv _pars _fragment : "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif" , uv _pars _vertex : "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif" , uv _vertex : "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif" , uv2 _pars _fragment : "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif" , uv2 _pars _vertex : "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif" ,
uv2 _vertex : "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif" , worldpos _vertex : "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif" , background _frag : "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}" ,
2019-10-25 18:42:56 +08:00
background _vert : "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}" , cube _frag : "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}" ,
cube _vert : "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}" , depth _frag : "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}" ,
2019-08-08 10:52:06 +08:00
depth _vert : "#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}" ,
distanceRGBA _frag : "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}" ,
distanceRGBA _vert : "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}" ,
equirect _frag : "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}" ,
equirect _vert : "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}" , linedashed _frag : "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}" ,
linedashed _vert : "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}" ,
2019-10-25 18:42:56 +08:00
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_common_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}" ,
2019-08-08 10:52:06 +08:00
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}" ,
2019-10-25 18:42:56 +08:00
meshlambert _frag : "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\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_common_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#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\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}" ,
2019-08-08 10:52:06 +08:00
meshlambert _vert : "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}" ,
meshmatcap _frag : "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}" ,
meshmatcap _vert : "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}" ,
2019-10-25 18:42:56 +08:00
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_common_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}" ,
2019-08-08 10:52:06 +08:00
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}" ,
2019-10-25 18:42:56 +08:00
meshphysical _frag : "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_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 <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_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\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}" ,
meshphysical _vert : "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\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\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}" ,
normal _frag : "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\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>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\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}" ,
2019-12-11 10:47:24 +08:00
normal _vert : "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\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 <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\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#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}" ,
2019-08-08 10:52:06 +08:00
points _frag : "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}" ,
2019-10-25 18:42:56 +08:00
points _vert : "uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}" ,
2019-08-08 10:52:06 +08:00
shadow _frag : "uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <fog_fragment>\n}" , shadow _vert : "#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}" ,
2019-12-11 10:47:24 +08:00
sprite _frag : "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}" ,
2019-10-25 18:42:56 +08:00
sprite _vert : "uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}" } ,
2019-12-11 10:47:24 +08:00
K = { common : { diffuse : { value : new H ( 15658734 ) } , opacity : { value : 1 } , map : { value : null } , uvTransform : { value : new ca } , alphaMap : { value : null } } , specularmap : { specularMap : { value : null } } , envmap : { envMap : { value : null } , flipEnvMap : { value : - 1 } , reflectivity : { value : 1 } , refractionRatio : { value : . 98 } , maxMipLevel : { value : 0 } } , aomap : { aoMap : { value : null } , aoMapIntensity : { value : 1 } } , lightmap : { lightMap : { value : null } , lightMapIntensity : { value : 1 } } , emissivemap : { emissiveMap : { value : null } } , bumpmap : { bumpMap : { value : null } , bumpScale : { value : 1 } } , normalmap : { normalMap : { value : null } ,
normalScale : { value : new B ( 1 , 1 ) } } , displacementmap : { displacementMap : { value : null } , displacementScale : { value : 1 } , displacementBias : { value : 0 } } , roughnessmap : { roughnessMap : { value : null } } , metalnessmap : { metalnessMap : { value : null } } , gradientmap : { gradientMap : { value : null } } , fog : { fogDensity : { value : 2.5 E - 4 } , fogNear : { value : 1 } , fogFar : { value : 2E3 } , fogColor : { value : new H ( 16777215 ) } } , lights : { ambientLightColor : { value : [ ] } , lightProbe : { value : [ ] } , directionalLights : { value : [ ] , properties : { direction : { } , color : { } , shadow : { } , shadowBias : { } ,
2019-10-25 18:42:56 +08:00
shadowRadius : { } , shadowMapSize : { } } } , directionalShadowMap : { value : [ ] } , directionalShadowMatrix : { value : [ ] } , spotLights : { value : [ ] , properties : { color : { } , position : { } , direction : { } , distance : { } , coneCos : { } , penumbraCos : { } , decay : { } , shadow : { } , shadowBias : { } , shadowRadius : { } , shadowMapSize : { } } } , spotShadowMap : { value : [ ] } , spotShadowMatrix : { value : [ ] } , pointLights : { value : [ ] , properties : { color : { } , position : { } , decay : { } , distance : { } , shadow : { } , shadowBias : { } , shadowRadius : { } , shadowMapSize : { } , shadowCameraNear : { } , shadowCameraFar : { } } } ,
2019-12-11 10:47:24 +08:00
pointShadowMap : { value : [ ] } , pointShadowMatrix : { value : [ ] } , hemisphereLights : { value : [ ] , properties : { direction : { } , skyColor : { } , groundColor : { } } } , rectAreaLights : { value : [ ] , properties : { color : { } , position : { } , width : { } , height : { } } } } , points : { diffuse : { value : new H ( 15658734 ) } , opacity : { value : 1 } , size : { value : 1 } , scale : { value : 1 } , map : { value : null } , alphaMap : { value : null } , uvTransform : { value : new ca } } , sprite : { diffuse : { value : new H ( 15658734 ) } , opacity : { value : 1 } , center : { value : new B ( . 5 , . 5 ) } , rotation : { value : 0 } , map : { value : null } , alphaMap : { value : null } ,
uvTransform : { value : new ca } } } , db = { basic : { uniforms : Da ( [ K . common , K . specularmap , K . envmap , K . aomap , K . lightmap , K . fog ] ) , vertexShader : Q . meshbasic _vert , fragmentShader : Q . meshbasic _frag } , lambert : { uniforms : Da ( [ K . common , K . specularmap , K . envmap , K . aomap , K . lightmap , K . emissivemap , K . fog , K . lights , { emissive : { value : new H ( 0 ) } } ] ) , vertexShader : Q . meshlambert _vert , fragmentShader : Q . meshlambert _frag } , phong : { uniforms : Da ( [ K . common , K . specularmap , K . envmap , K . aomap , K . lightmap , K . emissivemap , K . bumpmap , K . normalmap , K . displacementmap , K . gradientmap ,
K . fog , K . lights , { emissive : { value : new H ( 0 ) } , specular : { value : new H ( 1118481 ) } , shininess : { value : 30 } } ] ) , vertexShader : Q . meshphong _vert , fragmentShader : Q . meshphong _frag } , standard : { uniforms : Da ( [ K . common , K . envmap , K . aomap , K . lightmap , K . emissivemap , K . bumpmap , K . normalmap , K . displacementmap , K . roughnessmap , K . metalnessmap , K . fog , K . lights , { emissive : { value : new H ( 0 ) } , roughness : { value : . 5 } , metalness : { value : . 5 } , envMapIntensity : { value : 1 } } ] ) , vertexShader : Q . meshphysical _vert , fragmentShader : Q . meshphysical _frag } , matcap : { uniforms : Da ( [ K . common ,
K . bumpmap , K . normalmap , K . displacementmap , K . fog , { matcap : { value : null } } ] ) , vertexShader : Q . meshmatcap _vert , fragmentShader : Q . meshmatcap _frag } , points : { uniforms : Da ( [ K . points , K . fog ] ) , vertexShader : Q . points _vert , fragmentShader : Q . points _frag } , dashed : { uniforms : Da ( [ K . common , K . fog , { scale : { value : 1 } , dashSize : { value : 1 } , totalSize : { value : 2 } } ] ) , vertexShader : Q . linedashed _vert , fragmentShader : Q . linedashed _frag } , depth : { uniforms : Da ( [ K . common , K . displacementmap ] ) , vertexShader : Q . depth _vert , fragmentShader : Q . depth _frag } , normal : { uniforms : Da ( [ K . common ,
K . bumpmap , K . normalmap , K . displacementmap , { opacity : { value : 1 } } ] ) , vertexShader : Q . normal _vert , fragmentShader : Q . normal _frag } , sprite : { uniforms : Da ( [ K . sprite , K . fog ] ) , vertexShader : Q . sprite _vert , fragmentShader : Q . sprite _frag } , background : { uniforms : { uvTransform : { value : new ca } , t2D : { value : null } } , vertexShader : Q . background _vert , fragmentShader : Q . background _frag } , cube : { uniforms : { tCube : { value : null } , tFlip : { value : - 1 } , opacity : { value : 1 } } , vertexShader : Q . cube _vert , fragmentShader : Q . cube _frag } , equirect : { uniforms : { tEquirect : { value : null } } ,
vertexShader : Q . equirect _vert , fragmentShader : Q . equirect _frag } , distanceRGBA : { uniforms : Da ( [ K . common , K . displacementmap , { referencePosition : { value : new n } , nearDistance : { value : 1 } , farDistance : { value : 1E3 } } ] ) , vertexShader : Q . distanceRGBA _vert , fragmentShader : Q . distanceRGBA _frag } , shadow : { uniforms : Da ( [ K . lights , K . fog , { color : { value : new H ( 0 ) } , opacity : { value : 1 } } ] ) , vertexShader : Q . shadow _vert , fragmentShader : Q . shadow _frag } } ; db . physical = { uniforms : Da ( [ db . standard . uniforms , { transparency : { value : 0 } , clearcoat : { value : 0 } , clearcoatRoughness : { value : 0 } ,
sheen : { value : new H ( 0 ) } , clearcoatNormalScale : { value : new B ( 1 , 1 ) } , clearcoatNormalMap : { value : null } } ] ) , vertexShader : Q . meshphysical _vert , fragmentShader : Q . meshphysical _frag } ; Fd . prototype = Object . create ( O . prototype ) ; Fd . prototype . constructor = Fd ; Zb . prototype = Object . create ( E . prototype ) ; Zb . prototype . constructor = Zb ; nb . prototype = Object . create ( Y . prototype ) ; nb . prototype . constructor = nb ; nb . prototype . isCubeTexture = ! 0 ; Object . defineProperty ( nb . prototype , "images" , { get : function ( ) { return this . image } , set : function ( a ) { this . image =
a } } ) ; Bc . prototype = Object . create ( Y . prototype ) ; Bc . prototype . constructor = Bc ; Bc . prototype . isDataTexture2DArray = ! 0 ; Cc . prototype = Object . create ( Y . prototype ) ; Cc . prototype . constructor = Cc ; Cc . prototype . isDataTexture3D = ! 0 ; var yh = new Y , xj = new Bc , zj = new Cc , zh = new nb , sh = [ ] , uh = [ ] , xh = new Float32Array ( 16 ) , wh = new Float32Array ( 9 ) , vh = new Float32Array ( 4 ) ; Ah . prototype . updateCache = function ( a ) { var b = this . cache ; a instanceof Float32Array && b . length !== a . length && ( this . cache = new Float32Array ( a . length ) ) ; Ha ( b , a ) } ; Bh . prototype . setValue =
function ( a , b , c ) { for ( var d = this . seq , e = 0 , f = d . length ; e !== f ; ++ e ) { var g = d [ e ] ; g . setValue ( a , b [ g . id ] , c ) } } ; var ig = /([\w\d_]+)(\])?(\[|\.)?/g ; Cb . prototype . setValue = function ( a , b , c , d ) { b = this . map [ b ] ; void 0 !== b && b . setValue ( a , c , d ) } ; Cb . prototype . setOptional = function ( a , b , c ) { b = b [ c ] ; void 0 !== b && this . setValue ( a , c , b ) } ; Cb . upload = function ( a , b , c , d ) { for ( var e = 0 , f = b . length ; e !== f ; ++ e ) { var g = b [ e ] , h = c [ g . id ] ; ! 1 !== h . needsUpdate && g . setValue ( a , h . value , d ) } } ; Cb . seqWithValue = function ( a , b ) { for ( var c = [ ] , d = 0 , e = a . length ; d !== e ; ++ d ) { var f =
a [ d ] ; f . id in b && c . push ( f ) } return c } ; var ek = 0 , kg = /^[ \t]*#include +<([\w\d./]+)>/gm , Jh = /#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g , nk = 0 ; Db . prototype = Object . create ( C . prototype ) ; Db . prototype . constructor = Db ; Db . prototype . isMeshDepthMaterial = ! 0 ; Db . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . depthPacking = a . depthPacking ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; this . map = a . map ; this . alphaMap = a . alphaMap ; this . displacementMap = a . displacementMap ;
this . displacementScale = a . displacementScale ; this . displacementBias = a . displacementBias ; this . wireframe = a . wireframe ; this . wireframeLinewidth = a . wireframeLinewidth ; return this } ; Eb . prototype = Object . create ( C . prototype ) ; Eb . prototype . constructor = Eb ; Eb . prototype . isMeshDistanceMaterial = ! 0 ; Eb . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . referencePosition . copy ( a . referencePosition ) ; this . nearDistance = a . nearDistance ; this . farDistance = a . farDistance ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ;
this . map = a . map ; this . alphaMap = a . alphaMap ; this . displacementMap = a . displacementMap ; this . displacementScale = a . displacementScale ; this . displacementBias = a . displacementBias ; return this } ; ng . prototype = Object . assign ( Object . create ( la . prototype ) , { constructor : ng , isWebGLMultiviewRenderTarget : ! 0 , copy : function ( a ) { la . prototype . copy . call ( this , a ) ; this . numViews = a . numViews ; return this } , setNumViews : function ( a ) { this . numViews !== a && ( this . numViews = a , this . dispose ( ) ) ; return this } } ) ; Fc . prototype = Object . assign ( Object . create ( y . prototype ) ,
{ constructor : Fc , isGroup : ! 0 } ) ; Kd . prototype = Object . assign ( Object . create ( da . prototype ) , { constructor : Kd , isArrayCamera : ! 0 } ) ; var Qh = new n , Rh = new n ; Object . assign ( og . prototype , Aa . prototype ) ; Object . assign ( Sh . prototype , Aa . prototype ) ; Object . assign ( Se . prototype , { isFogExp2 : ! 0 , clone : function ( ) { return new Se ( this . color , this . density ) } , toJSON : function ( ) { return { type : "FogExp2" , color : this . color . getHex ( ) , density : this . density } } } ) ; Object . assign ( Te . prototype , { isFog : ! 0 , clone : function ( ) { return new Te ( this . color , this . near ,
this . far ) } , toJSON : function ( ) { return { type : "Fog" , color : this . color . getHex ( ) , near : this . near , far : this . far } } } ) ; Object . defineProperty ( pb . prototype , "needsUpdate" , { set : function ( a ) { ! 0 === a && this . version ++ } } ) ; Object . assign ( pb . prototype , { isInterleavedBuffer : ! 0 , onUploadCallback : function ( ) { } , setUsage : function ( a ) { this . usage = a ; return this } , copy : function ( a ) { this . array = new a . array . constructor ( a . array ) ; this . count = a . count ; this . stride = a . stride ; this . usage = a . usage ; return this } , copyAt : function ( a , b , c ) { a *= this . stride ; c *= b . stride ;
for ( var d = 0 , e = this . stride ; d < e ; d ++ ) this . array [ a + d ] = b . array [ c + d ] ; return this } , set : function ( a , b ) { void 0 === b && ( b = 0 ) ; this . array . set ( a , b ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , onUpload : function ( a ) { this . onUploadCallback = a ; return this } } ) ; Object . defineProperties ( Ld . prototype , { count : { get : function ( ) { return this . data . count } } , array : { get : function ( ) { return this . data . array } } } ) ; Object . assign ( Ld . prototype , { isInterleavedBufferAttribute : ! 0 , setX : function ( a , b ) { this . data . array [ a * this . data . stride +
this . offset ] = b ; return this } , setY : function ( a , b ) { this . data . array [ a * this . data . stride + this . offset + 1 ] = b ; return this } , setZ : function ( a , b ) { this . data . array [ a * this . data . stride + this . offset + 2 ] = b ; return this } , setW : function ( a , b ) { this . data . array [ a * this . data . stride + this . offset + 3 ] = b ; return this } , getX : function ( a ) { return this . data . array [ a * this . data . stride + this . offset ] } , getY : function ( a ) { return this . data . array [ a * this . data . stride + this . offset + 1 ] } , getZ : function ( a ) { return this . data . array [ a * this . data . stride + this . offset + 2 ] } ,
getW : function ( a ) { return this . data . array [ a * this . data . stride + this . offset + 3 ] } , setXY : function ( a , b , c ) { a = a * this . data . stride + this . offset ; this . data . array [ a + 0 ] = b ; this . data . array [ a + 1 ] = c ; return this } , setXYZ : function ( a , b , c , d ) { a = a * this . data . stride + this . offset ; this . data . array [ a + 0 ] = b ; this . data . array [ a + 1 ] = c ; this . data . array [ a + 2 ] = d ; return this } , setXYZW : function ( a , b , c , d , e ) { a = a * this . data . stride + this . offset ; this . data . array [ a + 0 ] = b ; this . data . array [ a + 1 ] = c ; this . data . array [ a + 2 ] = d ; this . data . array [ a + 3 ] = e ; return this } } ) ; Gb . prototype =
Object . create ( C . prototype ) ; Gb . prototype . constructor = Gb ; Gb . prototype . isSpriteMaterial = ! 0 ; Gb . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . color . copy ( a . color ) ; this . map = a . map ; this . alphaMap = a . alphaMap ; this . rotation = a . rotation ; this . sizeAttenuation = a . sizeAttenuation ; return this } ; var Gc , Ce = new n , td = new n , ud = new n , Hc = new B , Nd = new B , Uh = new S , Lf = new n , De = new n , Mf = new n , zi = new B , gh = new B , Ai = new B ; Md . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : Md , isSprite : ! 0 , raycast : function ( a ,
b ) { null === a . camera && console . error ( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ) ; td . setFromMatrixScale ( this . matrixWorld ) ; Uh . copy ( a . camera . matrixWorld ) ; this . modelViewMatrix . multiplyMatrices ( a . camera . matrixWorldInverse , this . matrixWorld ) ; ud . setFromMatrixPosition ( this . modelViewMatrix ) ; a . camera . isPerspectiveCamera && ! 1 === this . material . sizeAttenuation && td . multiplyScalar ( - ud . z ) ; var c = this . material . rotation ; if ( 0 !== c ) { var d = Math . cos ( c ) ; var e = Math . sin ( c ) } c = this . center ;
Ue ( Lf . set ( - . 5 , - . 5 , 0 ) , ud , c , td , e , d ) ; Ue ( De . set ( . 5 , - . 5 , 0 ) , ud , c , td , e , d ) ; Ue ( Mf . set ( . 5 , . 5 , 0 ) , ud , c , td , e , d ) ; zi . set ( 0 , 0 ) ; gh . set ( 1 , 0 ) ; Ai . set ( 1 , 1 ) ; var f = a . ray . intersectTriangle ( Lf , De , Mf , ! 1 , Ce ) ; if ( null === f && ( Ue ( De . set ( - . 5 , . 5 , 0 ) , ud , c , td , e , d ) , gh . set ( 0 , 1 ) , f = a . ray . intersectTriangle ( Lf , Mf , De , ! 1 , Ce ) , null === f ) ) return ; e = a . ray . origin . distanceTo ( Ce ) ; e < a . near || e > a . far || b . push ( { distance : e , point : Ce . clone ( ) , uv : ma . getUV ( Ce , Lf , De , Mf , zi , gh , Ai , new B ) , face : null , object : this } ) } , clone : function ( ) { return ( new this . constructor ( this . material ) ) . copy ( this ) } ,
copy : function ( a ) { y . prototype . copy . call ( this , a ) ; void 0 !== a . center && this . center . copy ( a . center ) ; return this } } ) ; var Nf = new n , Bi = new n ; Od . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : Od , isLOD : ! 0 , copy : function ( a ) { y . prototype . copy . call ( this , a , ! 1 ) ; for ( var b = a . levels , c = 0 , d = b . length ; c < d ; c ++ ) { var e = b [ c ] ; this . addLevel ( e . object . clone ( ) , e . distance ) } this . autoUpdate = a . autoUpdate ; return this } , addLevel : function ( a , b ) { void 0 === b && ( b = 0 ) ; b = Math . abs ( b ) ; for ( var c = this . levels , d = 0 ; d < c . length && ! ( b < c [ d ] . distance ) ; d ++ ) ;
c . splice ( d , 0 , { distance : b , object : a } ) ; this . add ( a ) ; return this } , getObjectForDistance : function ( a ) { var b = this . levels ; if ( 0 < b . length ) { for ( var c = 1 , d = b . length ; c < d && ! ( a < b [ c ] . distance ) ; c ++ ) ; return b [ c - 1 ] . object } return null } , raycast : function ( a , b ) { if ( 0 < this . levels . length ) { Nf . setFromMatrixPosition ( this . matrixWorld ) ; var c = a . ray . origin . distanceTo ( Nf ) ; this . getObjectForDistance ( c ) . raycast ( a , b ) } } , update : function ( a ) { var b = this . levels ; if ( 1 < b . length ) { Nf . setFromMatrixPosition ( a . matrixWorld ) ; Bi . setFromMatrixPosition ( this . matrixWorld ) ;
a = Nf . distanceTo ( Bi ) ; b [ 0 ] . object . visible = ! 0 ; for ( var c = 1 , d = b . length ; c < d ; c ++ ) if ( a >= b [ c ] . distance ) b [ c - 1 ] . object . visible = ! 1 , b [ c ] . object . visible = ! 0 ; else break ; for ( ; c < d ; c ++ ) b [ c ] . object . visible = ! 1 } } , toJSON : function ( a ) { a = y . prototype . toJSON . call ( this , a ) ; ! 1 === this . autoUpdate && ( a . object . autoUpdate = ! 1 ) ; a . object . levels = [ ] ; for ( var b = this . levels , c = 0 , d = b . length ; c < d ; c ++ ) { var e = b [ c ] ; a . object . levels . push ( { object : e . object . uuid , distance : e . distance } ) } return a } } ) ; Pd . prototype = Object . assign ( Object . create ( ja . prototype ) , { constructor : Pd ,
isSkinnedMesh : ! 0 , bind : function ( a , b ) { this . skeleton = a ; void 0 === b && ( this . updateMatrixWorld ( ! 0 ) , this . skeleton . calculateInverses ( ) , b = this . matrixWorld ) ; this . bindMatrix . copy ( b ) ; this . bindMatrixInverse . getInverse ( b ) } , pose : function ( ) { this . skeleton . pose ( ) } , normalizeSkinWeights : function ( ) { for ( var a = new ba , b = this . geometry . attributes . skinWeight , c = 0 , d = b . count ; c < d ; c ++ ) { a . x = b . getX ( c ) ; a . y = b . getY ( c ) ; a . z = b . getZ ( c ) ; a . w = b . getW ( c ) ; var e = 1 / a . manhattanLength ( ) ; Infinity !== e ? a . multiplyScalar ( e ) : a . set ( 1 , 0 , 0 , 0 ) ; b . setXYZW ( c , a . x ,
a . y , a . z , a . w ) } } , updateMatrixWorld : function ( a ) { ja . prototype . updateMatrixWorld . call ( this , a ) ; "attached" === this . bindMode ? this . bindMatrixInverse . getInverse ( this . matrixWorld ) : "detached" === this . bindMode ? this . bindMatrixInverse . getInverse ( this . bindMatrix ) : console . warn ( "THREE.SkinnedMesh: Unrecognized bindMode: " + this . bindMode ) } , clone : function ( ) { return ( new this . constructor ( this . geometry , this . material ) ) . copy ( this ) } } ) ; var Ci = new S , Jk = new S ; Object . assign ( Ve . prototype , { calculateInverses : function ( ) { this . boneInverses =
[ ] ; for ( var a = 0 , b = this . bones . length ; a < b ; a ++ ) { var c = new S ; this . bones [ a ] && c . getInverse ( this . bones [ a ] . matrixWorld ) ; this . boneInverses . push ( c ) } } , pose : function ( ) { var a , b ; var c = 0 ; for ( b = this . bones . length ; c < b ; c ++ ) ( a = this . bones [ c ] ) && a . matrixWorld . getInverse ( this . boneInverses [ c ] ) ; c = 0 ; for ( b = this . bones . length ; c < b ; c ++ ) if ( a = this . bones [ c ] ) a . parent && a . parent . isBone ? ( a . matrix . getInverse ( a . parent . matrixWorld ) , a . matrix . multiply ( a . matrixWorld ) ) : a . matrix . copy ( a . matrixWorld ) , a . matrix . decompose ( a . position , a . quaternion , a . scale ) } ,
update : function ( ) { for ( var a = this . bones , b = this . boneInverses , c = this . boneMatrices , d = this . boneTexture , e = 0 , f = a . length ; e < f ; e ++ ) Ci . multiplyMatrices ( a [ e ] ? a [ e ] . matrixWorld : Jk , b [ e ] ) , Ci . toArray ( c , 16 * e ) ; void 0 !== d && ( d . needsUpdate = ! 0 ) } , clone : function ( ) { return new Ve ( this . bones , this . boneInverses ) } , getBoneByName : function ( a ) { for ( var b = 0 , c = this . bones . length ; b < c ; b ++ ) { var d = this . bones [ b ] ; if ( d . name === a ) return d } } } ) ; qg . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : qg , isBone : ! 0 } ) ; var Di = new S , Ei = new S ,
vd = [ ] , Ee = new ja ; We . prototype = Object . assign ( Object . create ( ja . prototype ) , { constructor : We , isInstancedMesh : ! 0 , getMatrixAt : function ( a , b ) { b . fromArray ( this . instanceMatrix . array , 16 * a ) } , raycast : function ( a , b ) { var c = this . matrixWorld , d = this . count ; Ee . geometry = this . geometry ; Ee . material = this . material ; if ( void 0 !== Ee . material ) for ( var e = 0 ; e < d ; e ++ ) this . getMatrixAt ( e , Di ) , Ei . multiplyMatrices ( c , Di ) , Ee . matrixWorld = Ei , Ee . raycast ( a , vd ) , 0 < vd . length && ( vd [ 0 ] . instanceId = e , vd [ 0 ] . object = this , b . push ( vd [ 0 ] ) , vd . length = 0 ) } , setMatrixAt : function ( a ,
b ) { b . toArray ( this . instanceMatrix . array , 16 * a ) } , updateMorphTargets : function ( ) { } } ) ; P . prototype = Object . create ( C . prototype ) ; P . prototype . constructor = P ; P . prototype . isLineBasicMaterial = ! 0 ; P . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . color . copy ( a . color ) ; this . linewidth = a . linewidth ; this . linecap = a . linecap ; this . linejoin = a . linejoin ; return this } ; var Fi = new n , Gi = new n , Hi = new S , Of = new Rb , Fe = new mb ; wa . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : wa , isLine : ! 0 , computeLineDistances : function ( ) { var a =
this . geometry ; if ( a . isBufferGeometry ) if ( null === a . index ) { for ( var b = a . attributes . position , c = [ 0 ] , d = 1 , e = b . count ; d < e ; d ++ ) Fi . fromBufferAttribute ( b , d - 1 ) , Gi . fromBufferAttribute ( b , d ) , c [ d ] = c [ d - 1 ] , c [ d ] += Fi . distanceTo ( Gi ) ; a . setAttribute ( "lineDistance" , new D ( c , 1 ) ) } else console . warn ( "THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry." ) ; else if ( a . isGeometry ) for ( b = a . vertices , c = a . lineDistances , c [ 0 ] = 0 , d = 1 , e = b . length ; d < e ; d ++ ) c [ d ] = c [ d - 1 ] , c [ d ] += b [ d - 1 ] . distanceTo ( b [ d ] ) ; return this } ,
raycast : function ( a , b ) { var c = a . linePrecision , d = this . geometry , e = this . matrixWorld ; null === d . boundingSphere && d . computeBoundingSphere ( ) ; Fe . copy ( d . boundingSphere ) ; Fe . applyMatrix4 ( e ) ; Fe . radius += c ; if ( ! 1 !== a . ray . intersectsSphere ( Fe ) ) { Hi . getInverse ( e ) ; Of . copy ( a . ray ) . applyMatrix4 ( Hi ) ; c /= ( this . scale . x + this . scale . y + this . scale . z ) / 3 ; c *= c ; var f = new n , g = new n ; e = new n ; var h = new n , l = this && this . isLineSegments ? 2 : 1 ; if ( d . isBufferGeometry ) { var k = d . index , r = d . attributes . position . array ; if ( null !== k ) { k = k . array ; d = 0 ; for ( var p = k . length -
1 ; d < p ; d += l ) { var t = k [ d + 1 ] ; f . fromArray ( r , 3 * k [ d ] ) ; g . fromArray ( r , 3 * t ) ; t = Of . distanceSqToSegment ( f , g , h , e ) ; t > c || ( h . applyMatrix4 ( this . matrixWorld ) , t = a . ray . origin . distanceTo ( h ) , t < a . near || t > a . far || b . push ( { distance : t , point : e . clone ( ) . applyMatrix4 ( this . matrixWorld ) , index : d , face : null , faceIndex : null , object : this } ) ) } } else for ( d = 0 , p = r . length / 3 - 1 ; d < p ; d += l ) f . fromArray ( r , 3 * d ) , g . fromArray ( r , 3 * d + 3 ) , t = Of . distanceSqToSegment ( f , g , h , e ) , t > c || ( h . applyMatrix4 ( this . matrixWorld ) , t = a . ray . origin . distanceTo ( h ) , t < a . near || t > a . far || b . push ( { distance : t ,
point : e . clone ( ) . applyMatrix4 ( this . matrixWorld ) , index : d , face : null , faceIndex : null , object : this } ) ) } else if ( d . isGeometry ) for ( f = d . vertices , g = f . length , d = 0 ; d < g - 1 ; d += l ) t = Of . distanceSqToSegment ( f [ d ] , f [ d + 1 ] , h , e ) , t > c || ( h . applyMatrix4 ( this . matrixWorld ) , t = a . ray . origin . distanceTo ( h ) , t < a . near || t > a . far || b . push ( { distance : t , point : e . clone ( ) . applyMatrix4 ( this . matrixWorld ) , index : d , face : null , faceIndex : null , object : this } ) ) } } , clone : function ( ) { return ( new this . constructor ( this . geometry , this . material ) ) . copy ( this ) } } ) ; var Pf = new n ,
Qf = new n ; X . prototype = Object . assign ( Object . create ( wa . prototype ) , { constructor : X , isLineSegments : ! 0 , computeLineDistances : function ( ) { var a = this . geometry ; if ( a . isBufferGeometry ) if ( null === a . index ) { for ( var b = a . attributes . position , c = [ ] , d = 0 , e = b . count ; d < e ; d += 2 ) Pf . fromBufferAttribute ( b , d ) , Qf . fromBufferAttribute ( b , d + 1 ) , c [ d ] = 0 === d ? 0 : c [ d - 1 ] , c [ d + 1 ] = c [ d ] + Pf . distanceTo ( Qf ) ; a . setAttribute ( "lineDistance" , new D ( c , 1 ) ) } else console . warn ( "THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry." ) ;
else if ( a . isGeometry ) for ( b = a . vertices , c = a . lineDistances , d = 0 , e = b . length ; d < e ; d += 2 ) Pf . copy ( b [ d ] ) , Qf . copy ( b [ d + 1 ] ) , c [ d ] = 0 === d ? 0 : c [ d - 1 ] , c [ d + 1 ] = c [ d ] + Pf . distanceTo ( Qf ) ; return this } } ) ; Xe . prototype = Object . assign ( Object . create ( wa . prototype ) , { constructor : Xe , isLineLoop : ! 0 } ) ; Ta . prototype = Object . create ( C . prototype ) ; Ta . prototype . constructor = Ta ; Ta . prototype . isPointsMaterial = ! 0 ; Ta . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . color . copy ( a . color ) ; this . map = a . map ; this . alphaMap = a . alphaMap ; this . size = a . size ;
this . sizeAttenuation = a . sizeAttenuation ; this . morphTargets = a . morphTargets ; return this } ; var Ii = new S , sg = new Rb , Ge = new mb , Rf = new n ; Ic . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : Ic , isPoints : ! 0 , raycast : function ( a , b ) { var c = this . geometry , d = this . matrixWorld , e = a . params . Points . threshold ; null === c . boundingSphere && c . computeBoundingSphere ( ) ; Ge . copy ( c . boundingSphere ) ; Ge . applyMatrix4 ( d ) ; Ge . radius += e ; if ( ! 1 !== a . ray . intersectsSphere ( Ge ) ) if ( Ii . getInverse ( d ) , sg . copy ( a . ray ) . applyMatrix4 ( Ii ) , e /= ( this . scale . x +
this . scale . y + this . scale . z ) / 3 , e *= e , c . isBufferGeometry ) { var f = c . index ; c = c . attributes . position . array ; if ( null !== f ) { var g = f . array ; f = 0 ; for ( var h = g . length ; f < h ; f ++ ) { var l = g [ f ] ; Rf . fromArray ( c , 3 * l ) ; rg ( Rf , l , e , d , a , b , this ) } } else for ( f = 0 , g = c . length / 3 ; f < g ; f ++ ) Rf . fromArray ( c , 3 * f ) , rg ( Rf , f , e , d , a , b , this ) } else for ( c = c . vertices , f = 0 , g = c . length ; f < g ; f ++ ) rg ( c [ f ] , f , e , d , a , b , this ) } , updateMorphTargets : function ( ) { var a = this . geometry ; if ( a . isBufferGeometry ) { a = a . morphAttributes ; var b = Object . keys ( a ) ; if ( 0 < b . length ) { var c = a [ b [ 0 ] ] ; if ( void 0 !==
c ) for ( this . morphTargetInfluences = [ ] , this . morphTargetDictionary = { } , a = 0 , b = c . length ; a < b ; a ++ ) { var d = c [ a ] . name || String ( a ) ; this . morphTargetInfluences . push ( 0 ) ; this . morphTargetDictionary [ d ] = a } } } else a = a . morphTargets , void 0 !== a && 0 < a . length && console . error ( "THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead." ) } , clone : function ( ) { return ( new this . constructor ( this . geometry , this . material ) ) . copy ( this ) } } ) ; tg . prototype = Object . assign ( Object . create ( Y . prototype ) , { constructor : tg ,
isVideoTexture : ! 0 , update : function ( ) { var a = this . image ; a . readyState >= a . HAVE _CURRENT _DATA && ( this . needsUpdate = ! 0 ) } } ) ; Jc . prototype = Object . create ( Y . prototype ) ; Jc . prototype . constructor = Jc ; Jc . prototype . isCompressedTexture = ! 0 ; Qd . prototype = Object . create ( Y . prototype ) ; Qd . prototype . constructor = Qd ; Qd . prototype . isCanvasTexture = ! 0 ; Rd . prototype = Object . create ( Y . prototype ) ; Rd . prototype . constructor = Rd ; Rd . prototype . isDepthTexture = ! 0 ; Kc . prototype = Object . create ( E . prototype ) ; Kc . prototype . constructor = Kc ; Sd . prototype = Object . create ( O . prototype ) ;
Sd . prototype . constructor = Sd ; Lc . prototype = Object . create ( E . prototype ) ; Lc . prototype . constructor = Lc ; Td . prototype = Object . create ( O . prototype ) ; Td . prototype . constructor = Td ; Ca . prototype = Object . create ( E . prototype ) ; Ca . prototype . constructor = Ca ; Ud . prototype = Object . create ( O . prototype ) ; Ud . prototype . constructor = Ud ; Mc . prototype = Object . create ( Ca . prototype ) ; Mc . prototype . constructor = Mc ; Vd . prototype = Object . create ( O . prototype ) ; Vd . prototype . constructor = Vd ; ac . prototype = Object . create ( Ca . prototype ) ; ac . prototype . constructor =
ac ; Wd . prototype = Object . create ( O . prototype ) ; Wd . prototype . constructor = Wd ; Nc . prototype = Object . create ( Ca . prototype ) ; Nc . prototype . constructor = Nc ; Xd . prototype = Object . create ( O . prototype ) ; Xd . prototype . constructor = Xd ; Oc . prototype = Object . create ( Ca . prototype ) ; Oc . prototype . constructor = Oc ; Yd . prototype = Object . create ( O . prototype ) ; Yd . prototype . constructor = Yd ; bc . prototype = Object . create ( E . prototype ) ; bc . prototype . constructor = bc ; bc . prototype . toJSON = function ( ) { var a = E . prototype . toJSON . call ( this ) ; a . path = this . parameters . path . toJSON ( ) ;
return a } ; Zd . prototype = Object . create ( O . prototype ) ; Zd . prototype . constructor = Zd ; Pc . prototype = Object . create ( E . prototype ) ; Pc . prototype . constructor = Pc ; $d . prototype = Object . create ( O . prototype ) ; $d . prototype . constructor = $d ; Qc . prototype = Object . create ( E . prototype ) ; Qc . prototype . constructor = Qc ; var Kk = { triangulate : function ( a , b , c ) { c = c || 2 ; var d = b && b . length , e = d ? b [ 0 ] * c : a . length , f = Vh ( a , 0 , e , c , ! 0 ) , g = [ ] ; if ( ! f || f . next === f . prev ) return g ; var h ; if ( d ) { var l = c ; d = [ ] ; var k ; var n = 0 ; for ( k = b . length ; n < k ; n ++ ) { var p = b [ n ] * l ; var t = n <
k - 1 ? b [ n + 1 ] * l : a . length ; p = Vh ( a , p , t , l , ! 1 ) ; p === p . next && ( p . steiner = ! 0 ) ; d . push ( vk ( p ) ) } d . sort ( tk ) ; for ( n = 0 ; n < d . length ; n ++ ) { b = d [ n ] ; l = f ; if ( l = uk ( b , l ) ) b = Yh ( l , b ) , be ( b , b . next ) ; f = be ( f , f . next ) } } if ( a . length > 80 * c ) { var u = h = a [ 0 ] ; var q = d = a [ 1 ] ; for ( l = c ; l < e ; l += c ) n = a [ l ] , b = a [ l + 1 ] , n < u && ( u = n ) , b < q && ( q = b ) , n > h && ( h = n ) , b > d && ( d = b ) ; h = Math . max ( h - u , d - q ) ; h = 0 !== h ? 1 / h : 0 } ce ( f , g , c , u , q , h ) ; return g } } , qb = { area : function ( a ) { for ( var b = a . length , c = 0 , d = b - 1 , e = 0 ; e < b ; d = e ++ ) c += a [ d ] . x * a [ e ] . y - a [ e ] . x * a [ d ] . y ; return . 5 * c } , isClockWise : function ( a ) { return 0 > qb . area ( a ) } ,
triangulateShape : function ( a , b ) { var c = [ ] , d = [ ] , e = [ ] ; Zh ( a ) ; $h ( c , a ) ; var f = a . length ; b . forEach ( Zh ) ; for ( a = 0 ; a < b . length ; a ++ ) d . push ( f ) , f += b [ a ] . length , $h ( c , b [ a ] ) ; b = Kk . triangulate ( c , d ) ; for ( a = 0 ; a < b . length ; a += 3 ) e . push ( b . slice ( a , a + 3 ) ) ; return e } } ; dc . prototype = Object . create ( O . prototype ) ; dc . prototype . constructor = dc ; dc . prototype . toJSON = function ( ) { var a = O . prototype . toJSON . call ( this ) ; return ai ( this . parameters . shapes , this . parameters . options , a ) } ; eb . prototype = Object . create ( E . prototype ) ; eb . prototype . constructor = eb ; eb . prototype . toJSON =
function ( ) { var a = E . prototype . toJSON . call ( this ) ; return ai ( this . parameters . shapes , this . parameters . options , a ) } ; var wk = { generateTopUV : function ( a , b , c , d , e ) { a = b [ 3 * d ] ; d = b [ 3 * d + 1 ] ; var f = b [ 3 * e ] ; e = b [ 3 * e + 1 ] ; return [ new B ( b [ 3 * c ] , b [ 3 * c + 1 ] ) , new B ( a , d ) , new B ( f , e ) ] } , generateSideWallUV : function ( a , b , c , d , e , f ) { a = b [ 3 * c ] ; var g = b [ 3 * c + 1 ] ; c = b [ 3 * c + 2 ] ; var h = b [ 3 * d ] , l = b [ 3 * d + 1 ] ; d = b [ 3 * d + 2 ] ; var k = b [ 3 * e ] , n = b [ 3 * e + 1 ] ; e = b [ 3 * e + 2 ] ; var p = b [ 3 * f ] , t = b [ 3 * f + 1 ] ; b = b [ 3 * f + 2 ] ; return . 01 > Math . abs ( g - l ) ? [ new B ( a , 1 - c ) , new B ( h , 1 - d ) , new B ( k , 1 - e ) , new B ( p ,
1 - b ) ] : [ new B ( g , 1 - c ) , new B ( l , 1 - d ) , new B ( n , 1 - e ) , new B ( t , 1 - b ) ] } } ; ee . prototype = Object . create ( O . prototype ) ; ee . prototype . constructor = ee ; Sc . prototype = Object . create ( eb . prototype ) ; Sc . prototype . constructor = Sc ; fe . prototype = Object . create ( O . prototype ) ; fe . prototype . constructor = fe ; Hb . prototype = Object . create ( E . prototype ) ; Hb . prototype . constructor = Hb ; ge . prototype = Object . create ( O . prototype ) ; ge . prototype . constructor = ge ; Tc . prototype = Object . create ( E . prototype ) ; Tc . prototype . constructor = Tc ; he . prototype = Object . create ( O . prototype ) ;
he . prototype . constructor = he ; Uc . prototype = Object . create ( E . prototype ) ; Uc . prototype . constructor = Uc ; ec . prototype = Object . create ( O . prototype ) ; ec . prototype . constructor = ec ; ec . prototype . toJSON = function ( ) { var a = O . prototype . toJSON . call ( this ) ; return bi ( this . parameters . shapes , a ) } ; fc . prototype = Object . create ( E . prototype ) ; fc . prototype . constructor = fc ; fc . prototype . toJSON = function ( ) { var a = E . prototype . toJSON . call ( this ) ; return bi ( this . parameters . shapes , a ) } ; Vc . prototype = Object . create ( E . prototype ) ; Vc . prototype . constructor =
Vc ; gc . prototype = Object . create ( O . prototype ) ; gc . prototype . constructor = gc ; rb . prototype = Object . create ( E . prototype ) ; rb . prototype . constructor = rb ; ie . prototype = Object . create ( gc . prototype ) ; ie . prototype . constructor = ie ; je . prototype = Object . create ( rb . prototype ) ; je . prototype . constructor = je ; ke . prototype = Object . create ( O . prototype ) ; ke . prototype . constructor = ke ; Wc . prototype = Object . create ( E . prototype ) ; Wc . prototype . constructor = Wc ; var ta = Object . freeze ( { _ _proto _ _ : null , WireframeGeometry : Kc , ParametricGeometry : Sd , ParametricBufferGeometry : Lc ,
TetrahedronGeometry : Ud , TetrahedronBufferGeometry : Mc , OctahedronGeometry : Vd , OctahedronBufferGeometry : ac , IcosahedronGeometry : Wd , IcosahedronBufferGeometry : Nc , DodecahedronGeometry : Xd , DodecahedronBufferGeometry : Oc , PolyhedronGeometry : Td , PolyhedronBufferGeometry : Ca , TubeGeometry : Yd , TubeBufferGeometry : bc , TorusKnotGeometry : Zd , TorusKnotBufferGeometry : Pc , TorusGeometry : $d , TorusBufferGeometry : Qc , TextGeometry : ee , TextBufferGeometry : Sc , SphereGeometry : fe , SphereBufferGeometry : Hb , RingGeometry : ge , RingBufferGeometry : Tc ,
PlaneGeometry : Fd , PlaneBufferGeometry : Zb , LatheGeometry : he , LatheBufferGeometry : Uc , ShapeGeometry : ec , ShapeBufferGeometry : fc , ExtrudeGeometry : dc , ExtrudeBufferGeometry : eb , EdgesGeometry : Vc , ConeGeometry : ie , ConeBufferGeometry : je , CylinderGeometry : gc , CylinderBufferGeometry : rb , CircleGeometry : ke , CircleBufferGeometry : Wc , BoxGeometry : fh , BoxBufferGeometry : Gd } ) ; hc . prototype = Object . create ( C . prototype ) ; hc . prototype . constructor = hc ; hc . prototype . isShadowMaterial = ! 0 ; hc . prototype . copy = function ( a ) { C . prototype . copy . call ( this ,
a ) ; this . color . copy ( a . color ) ; return this } ; Xc . prototype = Object . create ( na . prototype ) ; Xc . prototype . constructor = Xc ; Xc . prototype . isRawShaderMaterial = ! 0 ; fb . prototype = Object . create ( C . prototype ) ; fb . prototype . constructor = fb ; fb . prototype . isMeshStandardMaterial = ! 0 ; fb . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . defines = { STANDARD : "" } ; this . color . copy ( a . color ) ; this . roughness = a . roughness ; this . metalness = a . metalness ; this . map = a . map ; this . lightMap = a . lightMap ; this . lightMapIntensity = a . lightMapIntensity ;
this . aoMap = a . aoMap ; this . aoMapIntensity = a . aoMapIntensity ; this . emissive . copy ( a . emissive ) ; this . emissiveMap = a . emissiveMap ; this . emissiveIntensity = a . emissiveIntensity ; this . bumpMap = a . bumpMap ; this . bumpScale = a . bumpScale ; this . normalMap = a . normalMap ; this . normalMapType = a . normalMapType ; this . normalScale . copy ( a . normalScale ) ; this . displacementMap = a . displacementMap ; this . displacementScale = a . displacementScale ; this . displacementBias = a . displacementBias ; this . roughnessMap = a . roughnessMap ; this . metalnessMap = a . metalnessMap ; this . alphaMap =
a . alphaMap ; this . envMap = a . envMap ; this . envMapIntensity = a . envMapIntensity ; this . refractionRatio = a . refractionRatio ; this . wireframe = a . wireframe ; this . wireframeLinewidth = a . wireframeLinewidth ; this . wireframeLinecap = a . wireframeLinecap ; this . wireframeLinejoin = a . wireframeLinejoin ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; this . morphNormals = a . morphNormals ; return this } ; ic . prototype = Object . create ( fb . prototype ) ; ic . prototype . constructor = ic ; ic . prototype . isMeshPhysicalMaterial = ! 0 ; ic . prototype . copy = function ( a ) { fb . prototype . copy . call ( this ,
a ) ; this . defines = { STANDARD : "" , PHYSICAL : "" } ; this . reflectivity = a . reflectivity ; this . clearcoat = a . clearcoat ; this . clearcoatRoughness = a . clearcoatRoughness ; this . sheen = a . sheen ? ( this . sheen || new H ) . copy ( a . sheen ) : null ; this . clearcoatNormalMap = a . clearcoatNormalMap ; this . clearcoatNormalScale . copy ( a . clearcoatNormalScale ) ; this . transparency = a . transparency ; return this } ; Ua . prototype = Object . create ( C . prototype ) ; Ua . prototype . constructor = Ua ; Ua . prototype . isMeshPhongMaterial = ! 0 ; Ua . prototype . copy = function ( a ) { C . prototype . copy . call ( this ,
a ) ; this . color . copy ( a . color ) ; this . specular . copy ( a . specular ) ; this . shininess = a . shininess ; this . map = a . map ; this . lightMap = a . lightMap ; this . lightMapIntensity = a . lightMapIntensity ; this . aoMap = a . aoMap ; this . aoMapIntensity = a . aoMapIntensity ; this . emissive . copy ( a . emissive ) ; this . emissiveMap = a . emissiveMap ; this . emissiveIntensity = a . emissiveIntensity ; this . bumpMap = a . bumpMap ; this . bumpScale = a . bumpScale ; this . normalMap = a . normalMap ; this . normalMapType = a . normalMapType ; this . normalScale . copy ( a . normalScale ) ; this . displacementMap = a . displacementMap ;
this . displacementScale = a . displacementScale ; this . displacementBias = a . displacementBias ; this . specularMap = a . specularMap ; this . alphaMap = a . alphaMap ; this . envMap = a . envMap ; this . combine = a . combine ; this . reflectivity = a . reflectivity ; this . refractionRatio = a . refractionRatio ; this . wireframe = a . wireframe ; this . wireframeLinewidth = a . wireframeLinewidth ; this . wireframeLinecap = a . wireframeLinecap ; this . wireframeLinejoin = a . wireframeLinejoin ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; this . morphNormals = a . morphNormals ;
return this } ; jc . prototype = Object . create ( Ua . prototype ) ; jc . prototype . constructor = jc ; jc . prototype . isMeshToonMaterial = ! 0 ; jc . prototype . copy = function ( a ) { Ua . prototype . copy . call ( this , a ) ; this . gradientMap = a . gradientMap ; return this } ; kc . prototype = Object . create ( C . prototype ) ; kc . prototype . constructor = kc ; kc . prototype . isMeshNormalMaterial = ! 0 ; kc . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . bumpMap = a . bumpMap ; this . bumpScale = a . bumpScale ; this . normalMap = a . normalMap ; this . normalMapType = a . normalMapType ; this . normalScale . copy ( a . normalScale ) ;
this . displacementMap = a . displacementMap ; this . displacementScale = a . displacementScale ; this . displacementBias = a . displacementBias ; this . wireframe = a . wireframe ; this . wireframeLinewidth = a . wireframeLinewidth ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; this . morphNormals = a . morphNormals ; return this } ; lc . prototype = Object . create ( C . prototype ) ; lc . prototype . constructor = lc ; lc . prototype . isMeshLambertMaterial = ! 0 ; lc . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . color . copy ( a . color ) ; this . map = a . map ;
this . lightMap = a . lightMap ; this . lightMapIntensity = a . lightMapIntensity ; this . aoMap = a . aoMap ; this . aoMapIntensity = a . aoMapIntensity ; this . emissive . copy ( a . emissive ) ; this . emissiveMap = a . emissiveMap ; this . emissiveIntensity = a . emissiveIntensity ; this . specularMap = a . specularMap ; this . alphaMap = a . alphaMap ; this . envMap = a . envMap ; this . combine = a . combine ; this . reflectivity = a . reflectivity ; this . refractionRatio = a . refractionRatio ; this . wireframe = a . wireframe ; this . wireframeLinewidth = a . wireframeLinewidth ; this . wireframeLinecap = a . wireframeLinecap ;
this . wireframeLinejoin = a . wireframeLinejoin ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; this . morphNormals = a . morphNormals ; return this } ; mc . prototype = Object . create ( C . prototype ) ; mc . prototype . constructor = mc ; mc . prototype . isMeshMatcapMaterial = ! 0 ; mc . prototype . copy = function ( a ) { C . prototype . copy . call ( this , a ) ; this . defines = { MATCAP : "" } ; this . color . copy ( a . color ) ; this . matcap = a . matcap ; this . map = a . map ; this . bumpMap = a . bumpMap ; this . bumpScale = a . bumpScale ; this . normalMap = a . normalMap ; this . normalMapType = a . normalMapType ;
this . normalScale . copy ( a . normalScale ) ; this . displacementMap = a . displacementMap ; this . displacementScale = a . displacementScale ; this . displacementBias = a . displacementBias ; this . alphaMap = a . alphaMap ; this . skinning = a . skinning ; this . morphTargets = a . morphTargets ; this . morphNormals = a . morphNormals ; return this } ; nc . prototype = Object . create ( P . prototype ) ; nc . prototype . constructor = nc ; nc . prototype . isLineDashedMaterial = ! 0 ; nc . prototype . copy = function ( a ) { P . prototype . copy . call ( this , a ) ; this . scale = a . scale ; this . dashSize = a . dashSize ; this . gapSize =
a . gapSize ; return this } ; var Lk = Object . freeze ( { _ _proto _ _ : null , ShadowMaterial : hc , SpriteMaterial : Gb , RawShaderMaterial : Xc , ShaderMaterial : na , PointsMaterial : Ta , MeshPhysicalMaterial : ic , MeshStandardMaterial : fb , MeshPhongMaterial : Ua , MeshToonMaterial : jc , MeshNormalMaterial : kc , MeshLambertMaterial : lc , MeshDepthMaterial : Db , MeshDistanceMaterial : Eb , MeshBasicMaterial : Ga , MeshMatcapMaterial : mc , LineDashedMaterial : nc , LineBasicMaterial : P , Material : C } ) , sa = { arraySlice : function ( a , b , c ) { return sa . isTypedArray ( a ) ? new a . constructor ( a . subarray ( b ,
void 0 !== c ? c : a . length ) ) : a . slice ( b , c ) } , convertArray : function ( a , b , c ) { return ! a || ! c && a . constructor === b ? a : "number" === typeof b . BYTES _PER _ELEMENT ? new b ( a ) : Array . prototype . slice . call ( a ) } , isTypedArray : function ( a ) { return ArrayBuffer . isView ( a ) && ! ( a instanceof DataView ) } , getKeyframeOrder : function ( a ) { for ( var b = a . length , c = Array ( b ) , d = 0 ; d !== b ; ++ d ) c [ d ] = d ; c . sort ( function ( b , c ) { return a [ b ] - a [ c ] } ) ; return c } , sortedArray : function ( a , b , c ) { for ( var d = a . length , e = new a . constructor ( d ) , f = 0 , g = 0 ; g !== d ; ++ f ) for ( var h = c [ f ] * b , l = 0 ; l !==
b ; ++ l ) e [ g ++ ] = a [ h + l ] ; return e } , flattenJSON : function ( a , b , c , d ) { for ( var e = 1 , f = a [ 0 ] ; void 0 !== f && void 0 === f [ d ] ; ) f = a [ e ++ ] ; if ( void 0 !== f ) { var g = f [ d ] ; if ( void 0 !== g ) if ( Array . isArray ( g ) ) { do g = f [ d ] , void 0 !== g && ( b . push ( f . time ) , c . push . apply ( c , g ) ) , f = a [ e ++ ] ; while ( void 0 !== f ) } else if ( void 0 !== g . toArray ) { do g = f [ d ] , void 0 !== g && ( b . push ( f . time ) , g . toArray ( c , c . length ) ) , f = a [ e ++ ] ; while ( void 0 !== f ) } else { do g = f [ d ] , void 0 !== g && ( b . push ( f . time ) , c . push ( g ) ) , f = a [ e ++ ] ; while ( void 0 !== f ) } } } , subclip : function ( a , b , c , d , e ) { e = e || 30 ; a = a . clone ( ) ;
a . name = b ; var f = [ ] ; for ( b = 0 ; b < a . tracks . length ; ++ b ) { for ( var g = a . tracks [ b ] , h = g . getValueSize ( ) , l = [ ] , k = [ ] , n = 0 ; n < g . times . length ; ++ n ) { var p = g . times [ n ] * e ; if ( ! ( p < c || p >= d ) ) for ( l . push ( g . times [ n ] ) , p = 0 ; p < h ; ++ p ) k . push ( g . values [ n * h + p ] ) } 0 !== l . length && ( g . times = sa . convertArray ( l , g . times . constructor ) , g . values = sa . convertArray ( k , g . values . constructor ) , f . push ( g ) ) } a . tracks = f ; c = Infinity ; for ( b = 0 ; b < a . tracks . length ; ++ b ) c > a . tracks [ b ] . times [ 0 ] && ( c = a . tracks [ b ] . times [ 0 ] ) ; for ( b = 0 ; b < a . tracks . length ; ++ b ) a . tracks [ b ] . shift ( - 1 * c ) ; a . resetDuration ( ) ;
return a } } ; Object . assign ( Ia . prototype , { evaluate : function ( a ) { var b = this . parameterPositions , c = this . _cachedIndex , d = b [ c ] , e = b [ c - 1 ] ; a : { b : { c : { d : if ( ! ( a < d ) ) { for ( var f = c + 2 ; ; ) { if ( void 0 === d ) { if ( a < e ) break d ; this . _cachedIndex = c = b . length ; return this . afterEnd _ ( c - 1 , a , e ) } if ( c === f ) break ; e = d ; d = b [ ++ c ] ; if ( a < d ) break b } d = b . length ; break c } if ( a >= e ) break a ; else { f = b [ 1 ] ; a < f && ( c = 2 , e = f ) ; for ( f = c - 2 ; ; ) { if ( void 0 === e ) return this . _cachedIndex = 0 , this . beforeStart _ ( 0 , a , d ) ; if ( c === f ) break ; d = e ; e = b [ -- c - 1 ] ; if ( a >= e ) break b } d = c ; c = 0 } } for ( ; c <
d ; ) e = c + d >>> 1 , a < b [ e ] ? d = e : c = e + 1 ; d = b [ c ] ; e = b [ c - 1 ] ; if ( void 0 === e ) return this . _cachedIndex = 0 , this . beforeStart _ ( 0 , a , d ) ; if ( void 0 === d ) return this . _cachedIndex = c = b . length , this . afterEnd _ ( c - 1 , e , a ) } this . _cachedIndex = c ; this . intervalChanged _ ( c , e , d ) } return this . interpolate _ ( c , e , a , d ) } , settings : null , DefaultSettings _ : { } , getSettings _ : function ( ) { return this . settings || this . DefaultSettings _ } , copySampleValue _ : function ( a ) { var b = this . resultBuffer , c = this . sampleValues , d = this . valueSize ; a *= d ; for ( var e = 0 ; e !== d ; ++ e ) b [ e ] = c [ a + e ] ;
return b } , interpolate _ : function ( ) { throw Error ( "call to abstract method" ) ; } , intervalChanged _ : function ( ) { } } ) ; Object . assign ( Ia . prototype , { beforeStart _ : Ia . prototype . copySampleValue _ , afterEnd _ : Ia . prototype . copySampleValue _ } ) ; Ye . prototype = Object . assign ( Object . create ( Ia . prototype ) , { constructor : Ye , DefaultSettings _ : { endingStart : 2400 , endingEnd : 2400 } , intervalChanged _ : function ( a , b , c ) { var d = this . parameterPositions , e = a - 2 , f = a + 1 , g = d [ e ] , h = d [ f ] ; if ( void 0 === g ) switch ( this . getSettings _ ( ) . endingStart ) { case 2401 : e = a ; g =
2 * b - c ; break ; case 2402 : e = d . length - 2 ; g = b + d [ e ] - d [ e + 1 ] ; break ; default : e = a , g = c } if ( void 0 === h ) switch ( this . getSettings _ ( ) . endingEnd ) { case 2401 : f = a ; h = 2 * c - b ; break ; case 2402 : f = 1 ; h = c + d [ 1 ] - d [ 0 ] ; break ; default : f = a - 1 , h = b } a = . 5 * ( c - b ) ; d = this . valueSize ; this . _weightPrev = a / ( b - g ) ; this . _weightNext = a / ( h - c ) ; this . _offsetPrev = e * d ; this . _offsetNext = f * d } , interpolate _ : function ( a , b , c , d ) { var e = this . resultBuffer , f = this . sampleValues , g = this . valueSize ; a *= g ; var h = a - g , l = this . _offsetPrev , k = this . _offsetNext , n = this . _weightPrev , p = this . _weightNext ,
t = ( c - b ) / ( d - b ) ; c = t * t ; d = c * t ; b = - n * d + 2 * n * c - n * t ; n = ( 1 + n ) * d + ( - 1.5 - 2 * n ) * c + ( - . 5 + n ) * t + 1 ; t = ( - 1 - p ) * d + ( 1.5 + p ) * c + . 5 * t ; p = p * d - p * c ; for ( c = 0 ; c !== g ; ++ c ) e [ c ] = b * f [ l + c ] + n * f [ h + c ] + t * f [ a + c ] + p * f [ k + c ] ; return e } } ) ; le . prototype = Object . assign ( Object . create ( Ia . prototype ) , { constructor : le , interpolate _ : function ( a , b , c , d ) { var e = this . resultBuffer , f = this . sampleValues , g = this . valueSize ; a *= g ; var h = a - g ; b = ( c - b ) / ( d - b ) ; c = 1 - b ; for ( d = 0 ; d !== g ; ++ d ) e [ d ] = f [ h + d ] * c + f [ a + d ] * b ; return e } } ) ; Ze . prototype = Object . assign ( Object . create ( Ia . prototype ) , { constructor : Ze ,
interpolate _ : function ( a ) { return this . copySampleValue _ ( a - 1 ) } } ) ; Object . assign ( oa , { toJSON : function ( a ) { var b = a . constructor ; if ( void 0 !== b . toJSON ) b = b . toJSON ( a ) ; else { b = { name : a . name , times : sa . convertArray ( a . times , Array ) , values : sa . convertArray ( a . values , Array ) } ; var c = a . getInterpolation ( ) ; c !== a . DefaultInterpolation && ( b . interpolation = c ) } b . type = a . ValueTypeName ; return b } } ) ; Object . assign ( oa . prototype , { constructor : oa , TimeBufferType : Float32Array , ValueBufferType : Float32Array , DefaultInterpolation : 2301 , InterpolantFactoryMethodDiscrete : function ( a ) { return new Ze ( this . times ,
this . values , this . getValueSize ( ) , a ) } , InterpolantFactoryMethodLinear : function ( a ) { return new le ( this . times , this . values , this . getValueSize ( ) , a ) } , InterpolantFactoryMethodSmooth : function ( a ) { return new Ye ( this . times , this . values , this . getValueSize ( ) , a ) } , setInterpolation : function ( a ) { switch ( a ) { case 2300 : var b = this . InterpolantFactoryMethodDiscrete ; break ; case 2301 : b = this . InterpolantFactoryMethodLinear ; break ; case 2302 : b = this . InterpolantFactoryMethodSmooth } if ( void 0 === b ) { b = "unsupported interpolation for " + this . ValueTypeName +
" keyframe track named " + this . name ; if ( void 0 === this . createInterpolant ) if ( a !== this . DefaultInterpolation ) this . setInterpolation ( this . DefaultInterpolation ) ; else throw Error ( b ) ; console . warn ( "THREE.KeyframeTrack:" , b ) ; return this } this . createInterpolant = b ; return this } , getInterpolation : function ( ) { switch ( this . createInterpolant ) { case this . InterpolantFactoryMethodDiscrete : return 2300 ; case this . InterpolantFactoryMethodLinear : return 2301 ; case this . InterpolantFactoryMethodSmooth : return 2302 } } , getValueSize : function ( ) { return this . values . length /
this . times . length } , shift : function ( a ) { if ( 0 !== a ) for ( var b = this . times , c = 0 , d = b . length ; c !== d ; ++ c ) b [ c ] += a ; return this } , scale : function ( a ) { if ( 1 !== a ) for ( var b = this . times , c = 0 , d = b . length ; c !== d ; ++ c ) b [ c ] *= a ; return this } , trim : function ( a , b ) { for ( var c = this . times , d = c . length , e = 0 , f = d - 1 ; e !== d && c [ e ] < a ; ) ++ e ; for ( ; - 1 !== f && c [ f ] > b ; ) -- f ; ++ f ; if ( 0 !== e || f !== d ) e >= f && ( f = Math . max ( f , 1 ) , e = f - 1 ) , a = this . getValueSize ( ) , this . times = sa . arraySlice ( c , e , f ) , this . values = sa . arraySlice ( this . values , e * a , f * a ) ; return this } , validate : function ( ) { var a =
! 0 , b = this . getValueSize ( ) ; 0 !== b - Math . floor ( b ) && ( console . error ( "THREE.KeyframeTrack: Invalid value size in track." , this ) , a = ! 1 ) ; var c = this . times ; b = this . values ; var d = c . length ; 0 === d && ( console . error ( "THREE.KeyframeTrack: Track is empty." , this ) , a = ! 1 ) ; for ( var e = null , f = 0 ; f !== d ; f ++ ) { var g = c [ f ] ; if ( "number" === typeof g && isNaN ( g ) ) { console . error ( "THREE.KeyframeTrack: Time is not a valid number." , this , f , g ) ; a = ! 1 ; break } if ( null !== e && e > g ) { console . error ( "THREE.KeyframeTrack: Out of order keys." , this , f , g , e ) ; a = ! 1 ; break } e =
g } if ( void 0 !== b && sa . isTypedArray ( b ) ) for ( f = 0 , c = b . length ; f !== c ; ++ f ) if ( d = b [ f ] , isNaN ( d ) ) { console . error ( "THREE.KeyframeTrack: Value is not a valid number." , this , f , d ) ; a = ! 1 ; break } return a } , optimize : function ( ) { for ( var a = this . times , b = this . values , c = this . getValueSize ( ) , d = 2302 === this . getInterpolation ( ) , e = 1 , f = a . length - 1 , g = 1 ; g < f ; ++ g ) { var h = ! 1 , l = a [ g ] ; if ( l !== a [ g + 1 ] && ( 1 !== g || l !== l [ 0 ] ) ) if ( d ) h = ! 0 ; else { var k = g * c , n = k - c , p = k + c ; for ( l = 0 ; l !== c ; ++ l ) { var t = b [ k + l ] ; if ( t !== b [ n + l ] || t !== b [ p + l ] ) { h = ! 0 ; break } } } if ( h ) { if ( g !== e ) for ( a [ e ] =
a [ g ] , h = g * c , k = e * c , l = 0 ; l !== c ; ++ l ) b [ k + l ] = b [ h + l ] ; ++ e } } if ( 0 < f ) { a [ e ] = a [ f ] ; h = f * c ; k = e * c ; for ( l = 0 ; l !== c ; ++ l ) b [ k + l ] = b [ h + l ] ; ++ e } e !== a . length && ( this . times = sa . arraySlice ( a , 0 , e ) , this . values = sa . arraySlice ( b , 0 , e * c ) ) ; return this } , clone : function ( ) { var a = sa . arraySlice ( this . times , 0 ) , b = sa . arraySlice ( this . values , 0 ) ; a = new this . constructor ( this . name , a , b ) ; a . createInterpolant = this . createInterpolant ; return a } } ) ; $e . prototype = Object . assign ( Object . create ( oa . prototype ) , { constructor : $e , ValueTypeName : "bool" , ValueBufferType : Array ,
DefaultInterpolation : 2300 , InterpolantFactoryMethodLinear : void 0 , InterpolantFactoryMethodSmooth : void 0 } ) ; af . prototype = Object . assign ( Object . create ( oa . prototype ) , { constructor : af , ValueTypeName : "color" } ) ; Yc . prototype = Object . assign ( Object . create ( oa . prototype ) , { constructor : Yc , ValueTypeName : "number" } ) ; bf . prototype = Object . assign ( Object . create ( Ia . prototype ) , { constructor : bf , interpolate _ : function ( a , b , c , d ) { var e = this . resultBuffer , f = this . sampleValues , g = this . valueSize ; a *= g ; b = ( c - b ) / ( d - b ) ; for ( c = a + g ; a !== c ; a += 4 ) ua . slerpFlat ( e ,
0 , f , a - g , f , a , b ) ; return e } } ) ; me . prototype = Object . assign ( Object . create ( oa . prototype ) , { constructor : me , ValueTypeName : "quaternion" , DefaultInterpolation : 2301 , InterpolantFactoryMethodLinear : function ( a ) { return new bf ( this . times , this . values , this . getValueSize ( ) , a ) } , InterpolantFactoryMethodSmooth : void 0 } ) ; cf . prototype = Object . assign ( Object . create ( oa . prototype ) , { constructor : cf , ValueTypeName : "string" , ValueBufferType : Array , DefaultInterpolation : 2300 , InterpolantFactoryMethodLinear : void 0 , InterpolantFactoryMethodSmooth : void 0 } ) ;
Zc . prototype = Object . assign ( Object . create ( oa . prototype ) , { constructor : Zc , ValueTypeName : "vector" } ) ; Object . assign ( Oa , { parse : function ( a ) { for ( var b = [ ] , c = a . tracks , d = 1 / ( a . fps || 1 ) , e = 0 , f = c . length ; e !== f ; ++ e ) b . push ( yk ( c [ e ] ) . scale ( d ) ) ; return new Oa ( a . name , a . duration , b ) } , toJSON : function ( a ) { var b = [ ] , c = a . tracks ; a = { name : a . name , duration : a . duration , tracks : b , uuid : a . uuid } ; for ( var d = 0 , e = c . length ; d !== e ; ++ d ) b . push ( oa . toJSON ( c [ d ] ) ) ; return a } , CreateFromMorphTargetSequence : function ( a , b , c , d ) { for ( var e = b . length , f = [ ] , g = 0 ; g < e ; g ++ ) { var h =
[ ] , l = [ ] ; h . push ( ( g + e - 1 ) % e , g , ( g + 1 ) % e ) ; l . push ( 0 , 1 , 0 ) ; var k = sa . getKeyframeOrder ( h ) ; h = sa . sortedArray ( h , 1 , k ) ; l = sa . sortedArray ( l , 1 , k ) ; d || 0 !== h [ 0 ] || ( h . push ( e ) , l . push ( l [ 0 ] ) ) ; f . push ( ( new Yc ( ".morphTargetInfluences[" + b [ g ] . name + "]" , h , l ) ) . scale ( 1 / c ) ) } return new Oa ( a , - 1 , f ) } , findByName : function ( a , b ) { var c = a ; Array . isArray ( a ) || ( c = a . geometry && a . geometry . animations || a . animations ) ; for ( a = 0 ; a < c . length ; a ++ ) if ( c [ a ] . name === b ) return c [ a ] ; return null } , CreateClipsFromMorphTargetSequences : function ( a , b , c ) { for ( var d = { } , e = /^([\w-]*?)([\d]+)$/ ,
f = 0 , g = a . length ; f < g ; f ++ ) { var h = a [ f ] , l = h . name . match ( e ) ; if ( l && 1 < l . length ) { var k = l [ 1 ] ; ( l = d [ k ] ) || ( d [ k ] = l = [ ] ) ; l . push ( h ) } } a = [ ] ; for ( k in d ) a . push ( Oa . CreateFromMorphTargetSequence ( k , d [ k ] , b , c ) ) ; return a } , parseAnimation : function ( a , b ) { if ( ! a ) return console . error ( "THREE.AnimationClip: No animation in JSONLoader data." ) , null ; var c = function ( a , b , c , d , e ) { if ( 0 !== c . length ) { var f = [ ] , g = [ ] ; sa . flattenJSON ( c , f , g , d ) ; 0 !== f . length && e . push ( new a ( b , f , g ) ) } } , d = [ ] , e = a . name || "default" , f = a . length || - 1 , g = a . fps || 30 ; a = a . hierarchy || [ ] ; for ( var h =
0 ; h < a . length ; h ++ ) { var l = a [ h ] . keys ; if ( l && 0 !== l . length ) if ( l [ 0 ] . morphTargets ) { f = { } ; for ( var k = 0 ; k < l . length ; k ++ ) if ( l [ k ] . morphTargets ) for ( var n = 0 ; n < l [ k ] . morphTargets . length ; n ++ ) f [ l [ k ] . morphTargets [ n ] ] = - 1 ; for ( var p in f ) { var t = [ ] , u = [ ] ; for ( n = 0 ; n !== l [ k ] . morphTargets . length ; ++ n ) { var q = l [ k ] ; t . push ( q . time ) ; u . push ( q . morphTarget === p ? 1 : 0 ) } d . push ( new Yc ( ".morphTargetInfluence[" + p + "]" , t , u ) ) } f = f . length * ( g || 1 ) } else k = ".bones[" + b [ h ] . name + "]" , c ( Zc , k + ".position" , l , "pos" , d ) , c ( me , k + ".quaternion" , l , "rot" , d ) , c ( Zc , k + ".scale" ,
l , "scl" , d ) } return 0 === d . length ? null : new Oa ( e , f , d ) } } ) ; Object . assign ( Oa . prototype , { resetDuration : function ( ) { for ( var a = 0 , b = 0 , c = this . tracks . length ; b !== c ; ++ b ) { var d = this . tracks [ b ] ; a = Math . max ( a , d . times [ d . times . length - 1 ] ) } this . duration = a ; return this } , trim : function ( ) { for ( var a = 0 ; a < this . tracks . length ; a ++ ) this . tracks [ a ] . trim ( 0 , this . duration ) ; return this } , validate : function ( ) { for ( var a = ! 0 , b = 0 ; b < this . tracks . length ; b ++ ) a = a && this . tracks [ b ] . validate ( ) ; return a } , optimize : function ( ) { for ( var a = 0 ; a < this . tracks . length ; a ++ ) this . tracks [ a ] . optimize ( ) ;
return this } , clone : function ( ) { for ( var a = [ ] , b = 0 ; b < this . tracks . length ; b ++ ) a . push ( this . tracks [ b ] . clone ( ) ) ; return new Oa ( this . name , this . duration , a ) } } ) ; var rc = { enabled : ! 1 , files : { } , add : function ( a , b ) { ! 1 !== this . enabled && ( this . files [ a ] = b ) } , get : function ( a ) { if ( ! 1 !== this . enabled ) return this . files [ a ] } , remove : function ( a ) { delete this . files [ a ] } , clear : function ( ) { this . files = { } } } , ci = new wg ; Object . assign ( V . prototype , { load : function ( ) { } , parse : function ( ) { } , setCrossOrigin : function ( a ) { this . crossOrigin = a ; return this } , setPath : function ( a ) { this . path =
a ; return this } , setResourcePath : function ( a ) { this . resourcePath = a ; return this } } ) ; var bb = { } ; Pa . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : Pa , load : function ( a , b , c , d ) { void 0 === a && ( a = "" ) ; void 0 !== this . path && ( a = this . path + a ) ; a = this . manager . resolveURL ( a ) ; var e = this , f = rc . get ( a ) ; if ( void 0 !== f ) return e . manager . itemStart ( a ) , setTimeout ( function ( ) { b && b ( f ) ; e . manager . itemEnd ( a ) } , 0 ) , f ; if ( void 0 !== bb [ a ] ) bb [ a ] . push ( { onLoad : b , onProgress : c , onError : d } ) ; else { var g = a . match ( /^data:(.*?)(;base64)?,(.*)$/ ) ;
if ( g ) { c = g [ 1 ] ; var h = ! ! g [ 2 ] ; g = g [ 3 ] ; g = decodeURIComponent ( g ) ; h && ( g = atob ( g ) ) ; try { var l = ( this . responseType || "" ) . toLowerCase ( ) ; switch ( l ) { case "arraybuffer" : case "blob" : var k = new Uint8Array ( g . length ) ; for ( h = 0 ; h < g . length ; h ++ ) k [ h ] = g . charCodeAt ( h ) ; var n = "blob" === l ? new Blob ( [ k . buffer ] , { type : c } ) : k . buffer ; break ; case "document" : n = ( new DOMParser ) . parseFromString ( g , c ) ; break ; case "json" : n = JSON . parse ( g ) ; break ; default : n = g } setTimeout ( function ( ) { b && b ( n ) ; e . manager . itemEnd ( a ) } , 0 ) } catch ( t ) { setTimeout ( function ( ) { d && d ( t ) ; e . manager . itemError ( a ) ;
e . manager . itemEnd ( a ) } , 0 ) } } else { bb [ a ] = [ ] ; bb [ a ] . push ( { onLoad : b , onProgress : c , onError : d } ) ; var p = new XMLHttpRequest ; p . open ( "GET" , a , ! 0 ) ; p . addEventListener ( "load" , function ( b ) { var c = this . response , d = bb [ a ] ; delete bb [ a ] ; if ( 200 === this . status || 0 === this . status ) { 0 === this . status && console . warn ( "THREE.FileLoader: HTTP Status 0 received." ) ; rc . add ( a , c ) ; for ( var f = 0 , g = d . length ; f < g ; f ++ ) { var h = d [ f ] ; if ( h . onLoad ) h . onLoad ( c ) } } else { f = 0 ; for ( g = d . length ; f < g ; f ++ ) if ( h = d [ f ] , h . onError ) h . onError ( b ) ; e . manager . itemError ( a ) } e . manager . itemEnd ( a ) } ,
! 1 ) ; p . addEventListener ( "progress" , function ( b ) { for ( var c = bb [ a ] , d = 0 , e = c . length ; d < e ; d ++ ) { var f = c [ d ] ; if ( f . onProgress ) f . onProgress ( b ) } } , ! 1 ) ; p . addEventListener ( "error" , function ( b ) { var c = bb [ a ] ; delete bb [ a ] ; for ( var d = 0 , f = c . length ; d < f ; d ++ ) { var g = c [ d ] ; if ( g . onError ) g . onError ( b ) } e . manager . itemError ( a ) ; e . manager . itemEnd ( a ) } , ! 1 ) ; p . addEventListener ( "abort" , function ( b ) { var c = bb [ a ] ; delete bb [ a ] ; for ( var d = 0 , f = c . length ; d < f ; d ++ ) { var g = c [ d ] ; if ( g . onError ) g . onError ( b ) } e . manager . itemError ( a ) ; e . manager . itemEnd ( a ) } , ! 1 ) ; void 0 !==
this . responseType && ( p . responseType = this . responseType ) ; void 0 !== this . withCredentials && ( p . withCredentials = this . withCredentials ) ; p . overrideMimeType && p . overrideMimeType ( void 0 !== this . mimeType ? this . mimeType : "text/plain" ) ; for ( h in this . requestHeader ) p . setRequestHeader ( h , this . requestHeader [ h ] ) ; p . send ( null ) } e . manager . itemStart ( a ) ; return p } } , setResponseType : function ( a ) { this . responseType = a ; return this } , setWithCredentials : function ( a ) { this . withCredentials = a ; return this } , setMimeType : function ( a ) { this . mimeType =
a ; return this } , setRequestHeader : function ( a ) { this . requestHeader = a ; return this } } ) ; xg . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : xg , load : function ( a , b , c , d ) { var e = this , f = new Pa ( e . manager ) ; f . setPath ( e . path ) ; f . load ( a , function ( a ) { b ( e . parse ( JSON . parse ( a ) ) ) } , c , d ) } , parse : function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) { var d = Oa . parse ( a [ c ] ) ; b . push ( d ) } return b } } ) ; yg . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : yg , load : function ( a , b , c , d ) { function e ( e ) { l . load ( a [ e ] , function ( a ) { a =
f . parse ( a , ! 0 ) ; g [ e ] = { width : a . width , height : a . height , format : a . format , mipmaps : a . mipmaps } ; k += 1 ; 6 === k && ( 1 === a . mipmapCount && ( h . minFilter = 1006 ) , h . format = a . format , h . needsUpdate = ! 0 , b && b ( h ) ) } , c , d ) } var f = this , g = [ ] , h = new Jc ; h . image = g ; var l = new Pa ( this . manager ) ; l . setPath ( this . path ) ; l . setResponseType ( "arraybuffer" ) ; if ( Array . isArray ( a ) ) for ( var k = 0 , n = 0 , p = a . length ; n < p ; ++ n ) e ( n ) ; else l . load ( a , function ( a ) { a = f . parse ( a , ! 0 ) ; if ( a . isCubemap ) for ( var c = a . mipmaps . length / a . mipmapCount , d = 0 ; d < c ; d ++ ) { g [ d ] = { mipmaps : [ ] } ; for ( var e =
0 ; e < a . mipmapCount ; e ++ ) g [ d ] . mipmaps . push ( a . mipmaps [ d * a . mipmapCount + e ] ) , g [ d ] . format = a . format , g [ d ] . width = a . width , g [ d ] . height = a . height } else h . image . width = a . width , h . image . height = a . height , h . mipmaps = a . mipmaps ; 1 === a . mipmapCount && ( h . minFilter = 1006 ) ; h . format = a . format ; h . needsUpdate = ! 0 ; b && b ( h ) } , c , d ) ; return h } } ) ; df . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : df , load : function ( a , b , c , d ) { var e = this , f = new Yb , g = new Pa ( this . manager ) ; g . setResponseType ( "arraybuffer" ) ; g . setPath ( this . path ) ; g . load ( a , function ( a ) { if ( a =
e . parse ( a ) ) void 0 !== a . image ? f . image = a . image : void 0 !== a . data && ( f . image . width = a . width , f . image . height = a . height , f . image . data = a . data ) , f . wrapS = void 0 !== a . wrapS ? a . wrapS : 1001 , f . wrapT = void 0 !== a . wrapT ? a . wrapT : 1001 , f . magFilter = void 0 !== a . magFilter ? a . magFilter : 1006 , f . minFilter = void 0 !== a . minFilter ? a . minFilter : 1006 , f . anisotropy = void 0 !== a . anisotropy ? a . anisotropy : 1 , void 0 !== a . format && ( f . format = a . format ) , void 0 !== a . type && ( f . type = a . type ) , void 0 !== a . mipmaps && ( f . mipmaps = a . mipmaps , f . minFilter = 1008 ) , 1 === a . mipmapCount &&
( f . minFilter = 1006 ) , f . needsUpdate = ! 0 , b && b ( f , a ) } , c , d ) ; return f } } ) ; $c . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : $c , load : function ( a , b , c , d ) { function e ( ) { l . removeEventListener ( "load" , e , ! 1 ) ; l . removeEventListener ( "error" , f , ! 1 ) ; rc . add ( a , this ) ; b && b ( this ) ; g . manager . itemEnd ( a ) } function f ( b ) { l . removeEventListener ( "load" , e , ! 1 ) ; l . removeEventListener ( "error" , f , ! 1 ) ; d && d ( b ) ; g . manager . itemError ( a ) ; g . manager . itemEnd ( a ) } void 0 !== this . path && ( a = this . path + a ) ; a = this . manager . resolveURL ( a ) ; var g = this ,
h = rc . get ( a ) ; if ( void 0 !== h ) return g . manager . itemStart ( a ) , setTimeout ( function ( ) { b && b ( h ) ; g . manager . itemEnd ( a ) } , 0 ) , h ; var l = document . createElementNS ( "http://www.w3.org/1999/xhtml" , "img" ) ; l . addEventListener ( "load" , e , ! 1 ) ; l . addEventListener ( "error" , f , ! 1 ) ; "data:" !== a . substr ( 0 , 5 ) && void 0 !== this . crossOrigin && ( l . crossOrigin = this . crossOrigin ) ; g . manager . itemStart ( a ) ; l . src = a ; return l } } ) ; ef . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : ef , load : function ( a , b , c , d ) { function e ( c ) { g . load ( a [ c ] , function ( a ) { f . images [ c ] =
a ; h ++ ; 6 === h && ( f . needsUpdate = ! 0 , b && b ( f ) ) } , void 0 , d ) } var f = new nb , g = new $c ( this . manager ) ; g . setCrossOrigin ( this . crossOrigin ) ; g . setPath ( this . path ) ; var h = 0 ; for ( c = 0 ; c < a . length ; ++ c ) e ( c ) ; return f } } ) ; ff . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : ff , load : function ( a , b , c , d ) { var e = new Y , f = new $c ( this . manager ) ; f . setCrossOrigin ( this . crossOrigin ) ; f . setPath ( this . path ) ; f . load ( a , function ( c ) { e . image = c ; c = 0 < a . search ( /\.jpe?g($|\?)/i ) || 0 === a . search ( /^data:image\/jpeg/ ) ; e . format = c ? 1022 : 1023 ; e . needsUpdate =
! 0 ; void 0 !== b && b ( e ) } , c , d ) ; return e } } ) ; Object . assign ( F . prototype , { getPoint : function ( ) { console . warn ( "THREE.Curve: .getPoint() not implemented." ) ; return null } , getPointAt : function ( a , b ) { a = this . getUtoTmapping ( a ) ; return this . getPoint ( a , b ) } , getPoints : function ( a ) { void 0 === a && ( a = 5 ) ; for ( var b = [ ] , c = 0 ; c <= a ; c ++ ) b . push ( this . getPoint ( c / a ) ) ; return b } , getSpacedPoints : function ( a ) { void 0 === a && ( a = 5 ) ; for ( var b = [ ] , c = 0 ; c <= a ; c ++ ) b . push ( this . getPointAt ( c / a ) ) ; return b } , getLength : function ( ) { var a = this . getLengths ( ) ; return a [ a . length -
1 ] } , getLengths : function ( a ) { void 0 === a && ( a = this . arcLengthDivisions ) ; if ( this . cacheArcLengths && this . cacheArcLengths . length === a + 1 && ! this . needsUpdate ) return this . cacheArcLengths ; this . needsUpdate = ! 1 ; var b = [ ] , c = this . getPoint ( 0 ) , d , e = 0 ; b . push ( 0 ) ; for ( d = 1 ; d <= a ; d ++ ) { var f = this . getPoint ( d / a ) ; e += f . distanceTo ( c ) ; b . push ( e ) ; c = f } return this . cacheArcLengths = b } , updateArcLengths : function ( ) { this . needsUpdate = ! 0 ; this . getLengths ( ) } , getUtoTmapping : function ( a , b ) { var c = this . getLengths ( ) , d = c . length ; b = b ? b : a * c [ d - 1 ] ; for ( var e = 0 ,
f = d - 1 , g ; e <= f ; ) if ( a = Math . floor ( e + ( f - e ) / 2 ) , g = c [ a ] - b , 0 > g ) e = a + 1 ; else if ( 0 < g ) f = a - 1 ; else { f = a ; break } a = f ; if ( c [ a ] === b ) return a / ( d - 1 ) ; e = c [ a ] ; return ( a + ( b - e ) / ( c [ a + 1 ] - e ) ) / ( d - 1 ) } , getTangent : function ( a ) { var b = a - 1E-4 ; a += 1E-4 ; 0 > b && ( b = 0 ) ; 1 < a && ( a = 1 ) ; b = this . getPoint ( b ) ; return this . getPoint ( a ) . clone ( ) . sub ( b ) . normalize ( ) } , getTangentAt : function ( a ) { a = this . getUtoTmapping ( a ) ; return this . getTangent ( a ) } , computeFrenetFrames : function ( a , b ) { var c = new n , d = [ ] , e = [ ] , f = [ ] , g = new n , h = new S , l ; for ( l = 0 ; l <= a ; l ++ ) { var k = l / a ; d [ l ] = this . getTangentAt ( k ) ;
d [ l ] . normalize ( ) } e [ 0 ] = new n ; f [ 0 ] = new n ; l = Number . MAX _VALUE ; k = Math . abs ( d [ 0 ] . x ) ; var r = Math . abs ( d [ 0 ] . y ) , p = Math . abs ( d [ 0 ] . z ) ; k <= l && ( l = k , c . set ( 1 , 0 , 0 ) ) ; r <= l && ( l = r , c . set ( 0 , 1 , 0 ) ) ; p <= l && c . set ( 0 , 0 , 1 ) ; g . crossVectors ( d [ 0 ] , c ) . normalize ( ) ; e [ 0 ] . crossVectors ( d [ 0 ] , g ) ; f [ 0 ] . crossVectors ( d [ 0 ] , e [ 0 ] ) ; for ( l = 1 ; l <= a ; l ++ ) e [ l ] = e [ l - 1 ] . clone ( ) , f [ l ] = f [ l - 1 ] . clone ( ) , g . crossVectors ( d [ l - 1 ] , d [ l ] ) , g . length ( ) > Number . EPSILON && ( g . normalize ( ) , c = Math . acos ( R . clamp ( d [ l - 1 ] . dot ( d [ l ] ) , - 1 , 1 ) ) , e [ l ] . applyMatrix4 ( h . makeRotationAxis ( g , c ) ) ) , f [ l ] . crossVectors ( d [ l ] ,
e [ l ] ) ; if ( ! 0 === b ) for ( c = Math . acos ( R . clamp ( e [ 0 ] . dot ( e [ a ] ) , - 1 , 1 ) ) , c /= a , 0 < d [ 0 ] . dot ( g . crossVectors ( e [ 0 ] , e [ a ] ) ) && ( c = - c ) , l = 1 ; l <= a ; l ++ ) e [ l ] . applyMatrix4 ( h . makeRotationAxis ( d [ l ] , c * l ) ) , f [ l ] . crossVectors ( d [ l ] , e [ l ] ) ; return { tangents : d , normals : e , binormals : f } } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . arcLengthDivisions = a . arcLengthDivisions ; return this } , toJSON : function ( ) { var a = { metadata : { version : 4.5 , type : "Curve" , generator : "Curve.toJSON" } } ; a . arcLengthDivisions = this . arcLengthDivisions ;
a . type = this . type ; return a } , fromJSON : function ( a ) { this . arcLengthDivisions = a . arcLengthDivisions ; return this } } ) ; Ja . prototype = Object . create ( F . prototype ) ; Ja . prototype . constructor = Ja ; Ja . prototype . isEllipseCurve = ! 0 ; Ja . prototype . getPoint = function ( a , b ) { b = b || new B ; for ( var c = 2 * Math . PI , d = this . aEndAngle - this . aStartAngle , e = Math . abs ( d ) < Number . EPSILON ; 0 > d ; ) d += c ; for ( ; d > c ; ) d -= c ; d < Number . EPSILON && ( d = e ? 0 : c ) ; ! 0 !== this . aClockwise || e || ( d = d === c ? - c : d - c ) ; c = this . aStartAngle + a * d ; a = this . aX + this . xRadius * Math . cos ( c ) ; var f = this . aY +
this . yRadius * Math . sin ( c ) ; 0 !== this . aRotation && ( c = Math . cos ( this . aRotation ) , d = Math . sin ( this . aRotation ) , e = a - this . aX , f -= this . aY , a = e * c - f * d + this . aX , f = e * d + f * c + this . aY ) ; return b . set ( a , f ) } ; Ja . prototype . copy = function ( a ) { F . prototype . copy . call ( this , a ) ; this . aX = a . aX ; this . aY = a . aY ; this . xRadius = a . xRadius ; this . yRadius = a . yRadius ; this . aStartAngle = a . aStartAngle ; this . aEndAngle = a . aEndAngle ; this . aClockwise = a . aClockwise ; this . aRotation = a . aRotation ; return this } ; Ja . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ;
a . aX = this . aX ; a . aY = this . aY ; a . xRadius = this . xRadius ; a . yRadius = this . yRadius ; a . aStartAngle = this . aStartAngle ; a . aEndAngle = this . aEndAngle ; a . aClockwise = this . aClockwise ; a . aRotation = this . aRotation ; return a } ; Ja . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . aX = a . aX ; this . aY = a . aY ; this . xRadius = a . xRadius ; this . yRadius = a . yRadius ; this . aStartAngle = a . aStartAngle ; this . aEndAngle = a . aEndAngle ; this . aClockwise = a . aClockwise ; this . aRotation = a . aRotation ; return this } ; ad . prototype = Object . create ( Ja . prototype ) ;
ad . prototype . constructor = ad ; ad . prototype . isArcCurve = ! 0 ; var Sf = new n , hh = new zg , ih = new zg , jh = new zg ; xa . prototype = Object . create ( F . prototype ) ; xa . prototype . constructor = xa ; xa . prototype . isCatmullRomCurve3 = ! 0 ; xa . prototype . getPoint = function ( a , b ) { b = b || new n ; var c = this . points , d = c . length ; a *= d - ( this . closed ? 0 : 1 ) ; var e = Math . floor ( a ) ; a -= e ; this . closed ? e += 0 < e ? 0 : ( Math . floor ( Math . abs ( e ) / d ) + 1 ) * d : 0 === a && e === d - 1 && ( e = d - 2 , a = 1 ) ; if ( this . closed || 0 < e ) var f = c [ ( e - 1 ) % d ] ; else Sf . subVectors ( c [ 0 ] , c [ 1 ] ) . add ( c [ 0 ] ) , f = Sf ; var g = c [ e % d ] ;
var h = c [ ( e + 1 ) % d ] ; this . closed || e + 2 < d ? c = c [ ( e + 2 ) % d ] : ( Sf . subVectors ( c [ d - 1 ] , c [ d - 2 ] ) . add ( c [ d - 1 ] ) , c = Sf ) ; if ( "centripetal" === this . curveType || "chordal" === this . curveType ) { var l = "chordal" === this . curveType ? . 5 : . 25 ; d = Math . pow ( f . distanceToSquared ( g ) , l ) ; e = Math . pow ( g . distanceToSquared ( h ) , l ) ; l = Math . pow ( h . distanceToSquared ( c ) , l ) ; 1E-4 > e && ( e = 1 ) ; 1E-4 > d && ( d = e ) ; 1E-4 > l && ( l = e ) ; hh . initNonuniformCatmullRom ( f . x , g . x , h . x , c . x , d , e , l ) ; ih . initNonuniformCatmullRom ( f . y , g . y , h . y , c . y , d , e , l ) ; jh . initNonuniformCatmullRom ( f . z , g . z , h . z , c . z , d ,
e , l ) } else "catmullrom" === this . curveType && ( hh . initCatmullRom ( f . x , g . x , h . x , c . x , this . tension ) , ih . initCatmullRom ( f . y , g . y , h . y , c . y , this . tension ) , jh . initCatmullRom ( f . z , g . z , h . z , c . z , this . tension ) ) ; b . set ( hh . calc ( a ) , ih . calc ( a ) , jh . calc ( a ) ) ; return b } ; xa . prototype . copy = function ( a ) { F . prototype . copy . call ( this , a ) ; this . points = [ ] ; for ( var b = 0 , c = a . points . length ; b < c ; b ++ ) this . points . push ( a . points [ b ] . clone ( ) ) ; this . closed = a . closed ; this . curveType = a . curveType ; this . tension = a . tension ; return this } ; xa . prototype . toJSON = function ( ) { var a =
F . prototype . toJSON . call ( this ) ; a . points = [ ] ; for ( var b = 0 , c = this . points . length ; b < c ; b ++ ) a . points . push ( this . points [ b ] . toArray ( ) ) ; a . closed = this . closed ; a . curveType = this . curveType ; a . tension = this . tension ; return a } ; xa . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . points = [ ] ; for ( var b = 0 , c = a . points . length ; b < c ; b ++ ) { var d = a . points [ b ] ; this . points . push ( ( new n ) . fromArray ( d ) ) } this . closed = a . closed ; this . curveType = a . curveType ; this . tension = a . tension ; return this } ; Va . prototype = Object . create ( F . prototype ) ;
Va . prototype . constructor = Va ; Va . prototype . isCubicBezierCurve = ! 0 ; Va . prototype . getPoint = function ( a , b ) { b = b || new B ; var c = this . v0 , d = this . v1 , e = this . v2 , f = this . v3 ; b . set ( oe ( a , c . x , d . x , e . x , f . x ) , oe ( a , c . y , d . y , e . y , f . y ) ) ; return b } ; Va . prototype . copy = function ( a ) { F . prototype . copy . call ( this , a ) ; this . v0 . copy ( a . v0 ) ; this . v1 . copy ( a . v1 ) ; this . v2 . copy ( a . v2 ) ; this . v3 . copy ( a . v3 ) ; return this } ; Va . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ; a . v0 = this . v0 . toArray ( ) ; a . v1 = this . v1 . toArray ( ) ; a . v2 = this . v2 . toArray ( ) ; a . v3 =
this . v3 . toArray ( ) ; return a } ; Va . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . v0 . fromArray ( a . v0 ) ; this . v1 . fromArray ( a . v1 ) ; this . v2 . fromArray ( a . v2 ) ; this . v3 . fromArray ( a . v3 ) ; return this } ; gb . prototype = Object . create ( F . prototype ) ; gb . prototype . constructor = gb ; gb . prototype . isCubicBezierCurve3 = ! 0 ; gb . prototype . getPoint = function ( a , b ) { b = b || new n ; var c = this . v0 , d = this . v1 , e = this . v2 , f = this . v3 ; b . set ( oe ( a , c . x , d . x , e . x , f . x ) , oe ( a , c . y , d . y , e . y , f . y ) , oe ( a , c . z , d . z , e . z , f . z ) ) ; return b } ; gb . prototype . copy =
function ( a ) { F . prototype . copy . call ( this , a ) ; this . v0 . copy ( a . v0 ) ; this . v1 . copy ( a . v1 ) ; this . v2 . copy ( a . v2 ) ; this . v3 . copy ( a . v3 ) ; return this } ; gb . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ; a . v0 = this . v0 . toArray ( ) ; a . v1 = this . v1 . toArray ( ) ; a . v2 = this . v2 . toArray ( ) ; a . v3 = this . v3 . toArray ( ) ; return a } ; gb . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . v0 . fromArray ( a . v0 ) ; this . v1 . fromArray ( a . v1 ) ; this . v2 . fromArray ( a . v2 ) ; this . v3 . fromArray ( a . v3 ) ; return this } ; ya . prototype = Object . create ( F . prototype ) ;
ya . prototype . constructor = ya ; ya . prototype . isLineCurve = ! 0 ; ya . prototype . getPoint = function ( a , b ) { b = b || new B ; 1 === a ? b . copy ( this . v2 ) : ( b . copy ( this . v2 ) . sub ( this . v1 ) , b . multiplyScalar ( a ) . add ( this . v1 ) ) ; return b } ; ya . prototype . getPointAt = function ( a , b ) { return this . getPoint ( a , b ) } ; ya . prototype . getTangent = function ( ) { return this . v2 . clone ( ) . sub ( this . v1 ) . normalize ( ) } ; ya . prototype . copy = function ( a ) { F . prototype . copy . call ( this , a ) ; this . v1 . copy ( a . v1 ) ; this . v2 . copy ( a . v2 ) ; return this } ; ya . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ;
a . v1 = this . v1 . toArray ( ) ; a . v2 = this . v2 . toArray ( ) ; return a } ; ya . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . v1 . fromArray ( a . v1 ) ; this . v2 . fromArray ( a . v2 ) ; return this } ; Wa . prototype = Object . create ( F . prototype ) ; Wa . prototype . constructor = Wa ; Wa . prototype . isLineCurve3 = ! 0 ; Wa . prototype . getPoint = function ( a , b ) { b = b || new n ; 1 === a ? b . copy ( this . v2 ) : ( b . copy ( this . v2 ) . sub ( this . v1 ) , b . multiplyScalar ( a ) . add ( this . v1 ) ) ; return b } ; Wa . prototype . getPointAt = function ( a , b ) { return this . getPoint ( a , b ) } ; Wa . prototype . copy =
function ( a ) { F . prototype . copy . call ( this , a ) ; this . v1 . copy ( a . v1 ) ; this . v2 . copy ( a . v2 ) ; return this } ; Wa . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ; a . v1 = this . v1 . toArray ( ) ; a . v2 = this . v2 . toArray ( ) ; return a } ; Wa . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . v1 . fromArray ( a . v1 ) ; this . v2 . fromArray ( a . v2 ) ; return this } ; Xa . prototype = Object . create ( F . prototype ) ; Xa . prototype . constructor = Xa ; Xa . prototype . isQuadraticBezierCurve = ! 0 ; Xa . prototype . getPoint = function ( a , b ) { b = b || new B ; var c =
this . v0 , d = this . v1 , e = this . v2 ; b . set ( ne ( a , c . x , d . x , e . x ) , ne ( a , c . y , d . y , e . y ) ) ; return b } ; Xa . prototype . copy = function ( a ) { F . prototype . copy . call ( this , a ) ; this . v0 . copy ( a . v0 ) ; this . v1 . copy ( a . v1 ) ; this . v2 . copy ( a . v2 ) ; return this } ; Xa . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ; a . v0 = this . v0 . toArray ( ) ; a . v1 = this . v1 . toArray ( ) ; a . v2 = this . v2 . toArray ( ) ; return a } ; Xa . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . v0 . fromArray ( a . v0 ) ; this . v1 . fromArray ( a . v1 ) ; this . v2 . fromArray ( a . v2 ) ; return this } ;
hb . prototype = Object . create ( F . prototype ) ; hb . prototype . constructor = hb ; hb . prototype . isQuadraticBezierCurve3 = ! 0 ; hb . prototype . getPoint = function ( a , b ) { b = b || new n ; var c = this . v0 , d = this . v1 , e = this . v2 ; b . set ( ne ( a , c . x , d . x , e . x ) , ne ( a , c . y , d . y , e . y ) , ne ( a , c . z , d . z , e . z ) ) ; return b } ; hb . prototype . copy = function ( a ) { F . prototype . copy . call ( this , a ) ; this . v0 . copy ( a . v0 ) ; this . v1 . copy ( a . v1 ) ; this . v2 . copy ( a . v2 ) ; return this } ; hb . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ; a . v0 = this . v0 . toArray ( ) ; a . v1 = this . v1 . toArray ( ) ;
a . v2 = this . v2 . toArray ( ) ; return a } ; hb . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . v0 . fromArray ( a . v0 ) ; this . v1 . fromArray ( a . v1 ) ; this . v2 . fromArray ( a . v2 ) ; return this } ; Ya . prototype = Object . create ( F . prototype ) ; Ya . prototype . constructor = Ya ; Ya . prototype . isSplineCurve = ! 0 ; Ya . prototype . getPoint = function ( a , b ) { b = b || new B ; var c = this . points , d = ( c . length - 1 ) * a ; a = Math . floor ( d ) ; d -= a ; var e = c [ 0 === a ? a : a - 1 ] , f = c [ a ] , g = c [ a > c . length - 2 ? c . length - 1 : a + 1 ] ; c = c [ a > c . length - 3 ? c . length - 1 : a + 2 ] ; b . set ( di ( d , e . x , f . x , g . x ,
c . x ) , di ( d , e . y , f . y , g . y , c . y ) ) ; return b } ; Ya . prototype . copy = function ( a ) { F . prototype . copy . call ( this , a ) ; this . points = [ ] ; for ( var b = 0 , c = a . points . length ; b < c ; b ++ ) this . points . push ( a . points [ b ] . clone ( ) ) ; return this } ; Ya . prototype . toJSON = function ( ) { var a = F . prototype . toJSON . call ( this ) ; a . points = [ ] ; for ( var b = 0 , c = this . points . length ; b < c ; b ++ ) a . points . push ( this . points [ b ] . toArray ( ) ) ; return a } ; Ya . prototype . fromJSON = function ( a ) { F . prototype . fromJSON . call ( this , a ) ; this . points = [ ] ; for ( var b = 0 , c = a . points . length ; b < c ; b ++ ) { var d = a . points [ b ] ;
this . points . push ( ( new B ) . fromArray ( d ) ) } return this } ; var kh = Object . freeze ( { _ _proto _ _ : null , ArcCurve : ad , CatmullRomCurve3 : xa , CubicBezierCurve : Va , CubicBezierCurve3 : gb , EllipseCurve : Ja , LineCurve : ya , LineCurve3 : Wa , QuadraticBezierCurve : Xa , QuadraticBezierCurve3 : hb , SplineCurve : Ya } ) ; sb . prototype = Object . assign ( Object . create ( F . prototype ) , { constructor : sb , add : function ( a ) { this . curves . push ( a ) } , closePath : function ( ) { var a = this . curves [ 0 ] . getPoint ( 0 ) , b = this . curves [ this . curves . length - 1 ] . getPoint ( 1 ) ; a . equals ( b ) || this . curves . push ( new ya ( b ,
a ) ) } , getPoint : function ( a ) { var b = a * this . getLength ( ) , c = this . getCurveLengths ( ) ; for ( a = 0 ; a < c . length ; ) { if ( c [ a ] >= b ) return b = c [ a ] - b , a = this . curves [ a ] , c = a . getLength ( ) , a . getPointAt ( 0 === c ? 0 : 1 - b / c ) ; a ++ } return null } , getLength : function ( ) { var a = this . getCurveLengths ( ) ; return a [ a . length - 1 ] } , updateArcLengths : function ( ) { this . needsUpdate = ! 0 ; this . cacheLengths = null ; this . getCurveLengths ( ) } , getCurveLengths : function ( ) { if ( this . cacheLengths && this . cacheLengths . length === this . curves . length ) return this . cacheLengths ; for ( var a = [ ] ,
b = 0 , c = 0 , d = this . curves . length ; c < d ; c ++ ) b += this . curves [ c ] . getLength ( ) , a . push ( b ) ; return this . cacheLengths = a } , getSpacedPoints : function ( a ) { void 0 === a && ( a = 40 ) ; for ( var b = [ ] , c = 0 ; c <= a ; c ++ ) b . push ( this . getPoint ( c / a ) ) ; this . autoClose && b . push ( b [ 0 ] ) ; return b } , getPoints : function ( a ) { a = a || 12 ; for ( var b = [ ] , c , d = 0 , e = this . curves ; d < e . length ; d ++ ) { var f = e [ d ] ; f = f . getPoints ( f && f . isEllipseCurve ? 2 * a : f && ( f . isLineCurve || f . isLineCurve3 ) ? 1 : f && f . isSplineCurve ? a * f . points . length : a ) ; for ( var g = 0 ; g < f . length ; g ++ ) { var h = f [ g ] ; c && c . equals ( h ) ||
( b . push ( h ) , c = h ) } } this . autoClose && 1 < b . length && ! b [ b . length - 1 ] . equals ( b [ 0 ] ) && b . push ( b [ 0 ] ) ; return b } , copy : function ( a ) { F . prototype . copy . call ( this , a ) ; this . curves = [ ] ; for ( var b = 0 , c = a . curves . length ; b < c ; b ++ ) this . curves . push ( a . curves [ b ] . clone ( ) ) ; this . autoClose = a . autoClose ; return this } , toJSON : function ( ) { var a = F . prototype . toJSON . call ( this ) ; a . autoClose = this . autoClose ; a . curves = [ ] ; for ( var b = 0 , c = this . curves . length ; b < c ; b ++ ) a . curves . push ( this . curves [ b ] . toJSON ( ) ) ; return a } , fromJSON : function ( a ) { F . prototype . fromJSON . call ( this ,
a ) ; this . autoClose = a . autoClose ; this . curves = [ ] ; for ( var b = 0 , c = a . curves . length ; b < c ; b ++ ) { var d = a . curves [ b ] ; this . curves . push ( ( new kh [ d . type ] ) . fromJSON ( d ) ) } return this } } ) ; Za . prototype = Object . assign ( Object . create ( sb . prototype ) , { constructor : Za , setFromPoints : function ( a ) { this . moveTo ( a [ 0 ] . x , a [ 0 ] . y ) ; for ( var b = 1 , c = a . length ; b < c ; b ++ ) this . lineTo ( a [ b ] . x , a [ b ] . y ) ; return this } , moveTo : function ( a , b ) { this . currentPoint . set ( a , b ) ; return this } , lineTo : function ( a , b ) { var c = new ya ( this . currentPoint . clone ( ) , new B ( a , b ) ) ; this . curves . push ( c ) ;
this . currentPoint . set ( a , b ) ; return this } , quadraticCurveTo : function ( a , b , c , d ) { a = new Xa ( this . currentPoint . clone ( ) , new B ( a , b ) , new B ( c , d ) ) ; this . curves . push ( a ) ; this . currentPoint . set ( c , d ) ; return this } , bezierCurveTo : function ( a , b , c , d , e , f ) { a = new Va ( this . currentPoint . clone ( ) , new B ( a , b ) , new B ( c , d ) , new B ( e , f ) ) ; this . curves . push ( a ) ; this . currentPoint . set ( e , f ) ; return this } , splineThru : function ( a ) { var b = [ this . currentPoint . clone ( ) ] . concat ( a ) ; b = new Ya ( b ) ; this . curves . push ( b ) ; this . currentPoint . copy ( a [ a . length - 1 ] ) ; return this } ,
arc : function ( a , b , c , d , e , f ) { this . absarc ( a + this . currentPoint . x , b + this . currentPoint . y , c , d , e , f ) ; return this } , absarc : function ( a , b , c , d , e , f ) { this . absellipse ( a , b , c , c , d , e , f ) ; return this } , ellipse : function ( a , b , c , d , e , f , g , h ) { this . absellipse ( a + this . currentPoint . x , b + this . currentPoint . y , c , d , e , f , g , h ) ; return this } , absellipse : function ( a , b , c , d , e , f , g , h ) { a = new Ja ( a , b , c , d , e , f , g , h ) ; 0 < this . curves . length && ( b = a . getPoint ( 0 ) , b . equals ( this . currentPoint ) || this . lineTo ( b . x , b . y ) ) ; this . curves . push ( a ) ; a = a . getPoint ( 1 ) ; this . currentPoint . copy ( a ) ;
return this } , copy : function ( a ) { sb . prototype . copy . call ( this , a ) ; this . currentPoint . copy ( a . currentPoint ) ; return this } , toJSON : function ( ) { var a = sb . prototype . toJSON . call ( this ) ; a . currentPoint = this . currentPoint . toArray ( ) ; return a } , fromJSON : function ( a ) { sb . prototype . fromJSON . call ( this , a ) ; this . currentPoint . fromArray ( a . currentPoint ) ; return this } } ) ; Ib . prototype = Object . assign ( Object . create ( Za . prototype ) , { constructor : Ib , getPointsHoles : function ( a ) { for ( var b = [ ] , c = 0 , d = this . holes . length ; c < d ; c ++ ) b [ c ] = this . holes [ c ] . getPoints ( a ) ;
return b } , extractPoints : function ( a ) { return { shape : this . getPoints ( a ) , holes : this . getPointsHoles ( a ) } } , copy : function ( a ) { Za . prototype . copy . call ( this , a ) ; this . holes = [ ] ; for ( var b = 0 , c = a . holes . length ; b < c ; b ++ ) this . holes . push ( a . holes [ b ] . clone ( ) ) ; return this } , toJSON : function ( ) { var a = Za . prototype . toJSON . call ( this ) ; a . uuid = this . uuid ; a . holes = [ ] ; for ( var b = 0 , c = this . holes . length ; b < c ; b ++ ) a . holes . push ( this . holes [ b ] . toJSON ( ) ) ; return a } , fromJSON : function ( a ) { Za . prototype . fromJSON . call ( this , a ) ; this . uuid = a . uuid ; this . holes = [ ] ;
for ( var b = 0 , c = a . holes . length ; b < c ; b ++ ) { var d = a . holes [ b ] ; this . holes . push ( ( new Za ) . fromJSON ( d ) ) } return this } } ) ; T . prototype = Object . assign ( Object . create ( y . prototype ) , { constructor : T , isLight : ! 0 , copy : function ( a ) { y . prototype . copy . call ( this , a ) ; this . color . copy ( a . color ) ; this . intensity = a . intensity ; return this } , toJSON : function ( a ) { a = y . prototype . toJSON . call ( this , a ) ; a . object . color = this . color . getHex ( ) ; a . object . intensity = this . intensity ; void 0 !== this . groundColor && ( a . object . groundColor = this . groundColor . getHex ( ) ) ; void 0 !==
this . distance && ( a . object . distance = this . distance ) ; void 0 !== this . angle && ( a . object . angle = this . angle ) ; void 0 !== this . decay && ( a . object . decay = this . decay ) ; void 0 !== this . penumbra && ( a . object . penumbra = this . penumbra ) ; void 0 !== this . shadow && ( a . object . shadow = this . shadow . toJSON ( ) ) ; return a } } ) ; gf . prototype = Object . assign ( Object . create ( T . prototype ) , { constructor : gf , isHemisphereLight : ! 0 , copy : function ( a ) { T . prototype . copy . call ( this , a ) ; this . groundColor . copy ( a . groundColor ) ; return this } } ) ; Object . assign ( ib . prototype , { _projScreenMatrix : new S ,
_lightPositionWorld : new n , _lookTarget : new n , getViewportCount : function ( ) { return this . _viewportCount } , getFrustum : function ( ) { return this . _frustum } , updateMatrices : function ( a ) { var b = this . camera , c = this . matrix , d = this . _projScreenMatrix , e = this . _lookTarget , f = this . _lightPositionWorld ; f . setFromMatrixPosition ( a . matrixWorld ) ; b . position . copy ( f ) ; e . setFromMatrixPosition ( a . target . matrixWorld ) ; b . lookAt ( e ) ; b . updateMatrixWorld ( ) ; d . multiplyMatrices ( b . projectionMatrix , b . matrixWorldInverse ) ; this . _frustum . setFromMatrix ( d ) ;
c . set ( . 5 , 0 , 0 , . 5 , 0 , . 5 , 0 , . 5 , 0 , 0 , . 5 , . 5 , 0 , 0 , 0 , 1 ) ; c . multiply ( b . projectionMatrix ) ; c . multiply ( b . matrixWorldInverse ) } , getViewport : function ( a ) { return this . _viewports [ a ] } , getFrameExtents : function ( ) { return this . _frameExtents } , copy : function ( a ) { this . camera = a . camera . clone ( ) ; this . bias = a . bias ; this . radius = a . radius ; this . mapSize . copy ( a . mapSize ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , toJSON : function ( ) { var a = { } ; 0 !== this . bias && ( a . bias = this . bias ) ; 1 !== this . radius && ( a . radius = this . radius ) ; if ( 512 !==
this . mapSize . x || 512 !== this . mapSize . y ) a . mapSize = this . mapSize . toArray ( ) ; a . camera = this . camera . toJSON ( ! 1 ) . object ; delete a . camera . matrix ; return a } } ) ; hf . prototype = Object . assign ( Object . create ( ib . prototype ) , { constructor : hf , isSpotLightShadow : ! 0 , updateMatrices : function ( a ) { var b = this . camera , c = 2 * R . RAD2DEG * a . angle , d = this . mapSize . width / this . mapSize . height , e = a . distance || b . far ; if ( c !== b . fov || d !== b . aspect || e !== b . far ) b . fov = c , b . aspect = d , b . far = e , b . updateProjectionMatrix ( ) ; ib . prototype . updateMatrices . call ( this , a ) } } ) ; jf . prototype =
Object . assign ( Object . create ( T . prototype ) , { constructor : jf , isSpotLight : ! 0 , copy : function ( a ) { T . prototype . copy . call ( this , a ) ; this . distance = a . distance ; this . angle = a . angle ; this . penumbra = a . penumbra ; this . decay = a . decay ; this . target = a . target . clone ( ) ; this . shadow = a . shadow . clone ( ) ; return this } } ) ; Ag . prototype = Object . assign ( Object . create ( ib . prototype ) , { constructor : Ag , isPointLightShadow : ! 0 , updateMatrices : function ( a , b ) { void 0 === b && ( b = 0 ) ; var c = this . camera , d = this . matrix , e = this . _lightPositionWorld , f = this . _lookTarget , g = this . _projScreenMatrix ;
e . setFromMatrixPosition ( a . matrixWorld ) ; c . position . copy ( e ) ; f . copy ( c . position ) ; f . add ( this . _cubeDirections [ b ] ) ; c . up . copy ( this . _cubeUps [ b ] ) ; c . lookAt ( f ) ; c . updateMatrixWorld ( ) ; d . makeTranslation ( - e . x , - e . y , - e . z ) ; g . multiplyMatrices ( c . projectionMatrix , c . matrixWorldInverse ) ; this . _frustum . setFromMatrix ( g ) } } ) ; kf . prototype = Object . assign ( Object . create ( T . prototype ) , { constructor : kf , isPointLight : ! 0 , copy : function ( a ) { T . prototype . copy . call ( this , a ) ; this . distance = a . distance ; this . decay = a . decay ; this . shadow = a . shadow . clone ( ) ;
return this } } ) ; pe . prototype = Object . assign ( Object . create ( cb . prototype ) , { constructor : pe , isOrthographicCamera : ! 0 , copy : function ( a , b ) { cb . prototype . copy . call ( this , a , b ) ; this . left = a . left ; this . right = a . right ; this . top = a . top ; this . bottom = a . bottom ; this . near = a . near ; this . far = a . far ; this . zoom = a . zoom ; this . view = null === a . view ? null : Object . assign ( { } , a . view ) ; return this } , setViewOffset : function ( a , b , c , d , e , f ) { null === this . view && ( this . view = { enabled : ! 0 , fullWidth : 1 , fullHeight : 1 , offsetX : 0 , offsetY : 0 , width : 1 , height : 1 } ) ; this . view . enabled =
! 0 ; this . view . fullWidth = a ; this . view . fullHeight = b ; this . view . offsetX = c ; this . view . offsetY = d ; this . view . width = e ; this . view . height = f ; this . updateProjectionMatrix ( ) } , clearViewOffset : function ( ) { null !== this . view && ( this . view . enabled = ! 1 ) ; this . updateProjectionMatrix ( ) } , updateProjectionMatrix : function ( ) { var a = ( this . right - this . left ) / ( 2 * this . zoom ) , b = ( this . top - this . bottom ) / ( 2 * this . zoom ) , c = ( this . right + this . left ) / 2 , d = ( this . top + this . bottom ) / 2 , e = c - a ; c += a ; a = d + b ; b = d - b ; if ( null !== this . view && this . view . enabled ) { c = this . zoom / ( this . view . width /
this . view . fullWidth ) ; b = this . zoom / ( this . view . height / this . view . fullHeight ) ; var f = ( this . right - this . left ) / this . view . width ; d = ( this . top - this . bottom ) / this . view . height ; e += this . view . offsetX / c * f ; c = e + this . view . width / c * f ; a -= this . view . offsetY / b * d ; b = a - this . view . height / b * d } this . projectionMatrix . makeOrthographic ( e , c , a , b , this . near , this . far ) ; this . projectionMatrixInverse . getInverse ( this . projectionMatrix ) } , toJSON : function ( a ) { a = y . prototype . toJSON . call ( this , a ) ; a . object . zoom = this . zoom ; a . object . left = this . left ; a . object . right =
this . right ; a . object . top = this . top ; a . object . bottom = this . bottom ; a . object . near = this . near ; a . object . far = this . far ; null !== this . view && ( a . object . view = Object . assign ( { } , this . view ) ) ; return a } } ) ; lf . prototype = Object . assign ( Object . create ( ib . prototype ) , { constructor : lf , isDirectionalLightShadow : ! 0 , updateMatrices : function ( a ) { ib . prototype . updateMatrices . call ( this , a ) } } ) ; mf . prototype = Object . assign ( Object . create ( T . prototype ) , { constructor : mf , isDirectionalLight : ! 0 , copy : function ( a ) { T . prototype . copy . call ( this , a ) ; this . target =
a . target . clone ( ) ; this . shadow = a . shadow . clone ( ) ; return this } } ) ; nf . prototype = Object . assign ( Object . create ( T . prototype ) , { constructor : nf , isAmbientLight : ! 0 } ) ; of . prototype = Object . assign ( Object . create ( T . prototype ) , { constructor : of , isRectAreaLight : ! 0 , copy : function ( a ) { T . prototype . copy . call ( this , a ) ; this . width = a . width ; this . height = a . height ; return this } , toJSON : function ( a ) { a = T . prototype . toJSON . call ( this , a ) ; a . object . width = this . width ; a . object . height = this . height ; return a } } ) ; pf . prototype = Object . assign ( Object . create ( V . prototype ) ,
{ constructor : pf , load : function ( a , b , c , d ) { var e = this , f = new Pa ( e . manager ) ; f . setPath ( e . path ) ; f . load ( a , function ( a ) { b ( e . parse ( JSON . parse ( a ) ) ) } , c , d ) } , parse : function ( a ) { function b ( a ) { void 0 === c [ a ] && console . warn ( "THREE.MaterialLoader: Undefined texture" , a ) ; return c [ a ] } var c = this . textures , d = new Lk [ a . type ] ; void 0 !== a . uuid && ( d . uuid = a . uuid ) ; void 0 !== a . name && ( d . name = a . name ) ; void 0 !== a . color && d . color . setHex ( a . color ) ; void 0 !== a . roughness && ( d . roughness = a . roughness ) ; void 0 !== a . metalness && ( d . metalness = a . metalness ) ; void 0 !==
a . sheen && ( d . sheen = ( new H ) . setHex ( a . sheen ) ) ; void 0 !== a . emissive && d . emissive . setHex ( a . emissive ) ; void 0 !== a . specular && d . specular . setHex ( a . specular ) ; void 0 !== a . shininess && ( d . shininess = a . shininess ) ; void 0 !== a . clearcoat && ( d . clearcoat = a . clearcoat ) ; void 0 !== a . clearcoatRoughness && ( d . clearcoatRoughness = a . clearcoatRoughness ) ; void 0 !== a . vertexColors && ( d . vertexColors = a . vertexColors ) ; void 0 !== a . fog && ( d . fog = a . fog ) ; void 0 !== a . flatShading && ( d . flatShading = a . flatShading ) ; void 0 !== a . blending && ( d . blending = a . blending ) ;
void 0 !== a . combine && ( d . combine = a . combine ) ; void 0 !== a . side && ( d . side = a . side ) ; void 0 !== a . opacity && ( d . opacity = a . opacity ) ; void 0 !== a . transparent && ( d . transparent = a . transparent ) ; void 0 !== a . alphaTest && ( d . alphaTest = a . alphaTest ) ; void 0 !== a . depthTest && ( d . depthTest = a . depthTest ) ; void 0 !== a . depthWrite && ( d . depthWrite = a . depthWrite ) ; void 0 !== a . colorWrite && ( d . colorWrite = a . colorWrite ) ; void 0 !== a . stencilWrite && ( d . stencilWrite = a . stencilWrite ) ; void 0 !== a . stencilWriteMask && ( d . stencilWriteMask = a . stencilWriteMask ) ; void 0 !==
a . stencilFunc && ( d . stencilFunc = a . stencilFunc ) ; void 0 !== a . stencilRef && ( d . stencilRef = a . stencilRef ) ; void 0 !== a . stencilFuncMask && ( d . stencilFuncMask = a . stencilFuncMask ) ; void 0 !== a . stencilFail && ( d . stencilFail = a . stencilFail ) ; void 0 !== a . stencilZFail && ( d . stencilZFail = a . stencilZFail ) ; void 0 !== a . stencilZPass && ( d . stencilZPass = a . stencilZPass ) ; void 0 !== a . wireframe && ( d . wireframe = a . wireframe ) ; void 0 !== a . wireframeLinewidth && ( d . wireframeLinewidth = a . wireframeLinewidth ) ; void 0 !== a . wireframeLinecap && ( d . wireframeLinecap =
a . wireframeLinecap ) ; void 0 !== a . wireframeLinejoin && ( d . wireframeLinejoin = a . wireframeLinejoin ) ; void 0 !== a . rotation && ( d . rotation = a . rotation ) ; 1 !== a . linewidth && ( d . linewidth = a . linewidth ) ; void 0 !== a . dashSize && ( d . dashSize = a . dashSize ) ; void 0 !== a . gapSize && ( d . gapSize = a . gapSize ) ; void 0 !== a . scale && ( d . scale = a . scale ) ; void 0 !== a . polygonOffset && ( d . polygonOffset = a . polygonOffset ) ; void 0 !== a . polygonOffsetFactor && ( d . polygonOffsetFactor = a . polygonOffsetFactor ) ; void 0 !== a . polygonOffsetUnits && ( d . polygonOffsetUnits = a . polygonOffsetUnits ) ;
void 0 !== a . skinning && ( d . skinning = a . skinning ) ; void 0 !== a . morphTargets && ( d . morphTargets = a . morphTargets ) ; void 0 !== a . morphNormals && ( d . morphNormals = a . morphNormals ) ; void 0 !== a . dithering && ( d . dithering = a . dithering ) ; void 0 !== a . visible && ( d . visible = a . visible ) ; void 0 !== a . toneMapped && ( d . toneMapped = a . toneMapped ) ; void 0 !== a . userData && ( d . userData = a . userData ) ; if ( void 0 !== a . uniforms ) for ( var e in a . uniforms ) { var f = a . uniforms [ e ] ; d . uniforms [ e ] = { } ; switch ( f . type ) { case "t" : d . uniforms [ e ] . value = b ( f . value ) ; break ; case "c" : d . uniforms [ e ] . value =
( new H ) . setHex ( f . value ) ; break ; case "v2" : d . uniforms [ e ] . value = ( new B ) . fromArray ( f . value ) ; break ; case "v3" : d . uniforms [ e ] . value = ( new n ) . fromArray ( f . value ) ; break ; case "v4" : d . uniforms [ e ] . value = ( new ba ) . fromArray ( f . value ) ; break ; case "m3" : d . uniforms [ e ] . value = ( new ca ) . fromArray ( f . value ) ; case "m4" : d . uniforms [ e ] . value = ( new S ) . fromArray ( f . value ) ; break ; default : d . uniforms [ e ] . value = f . value } } void 0 !== a . defines && ( d . defines = a . defines ) ; void 0 !== a . vertexShader && ( d . vertexShader = a . vertexShader ) ; void 0 !== a . fragmentShader &&
( d . fragmentShader = a . fragmentShader ) ; if ( void 0 !== a . extensions ) for ( var g in a . extensions ) d . extensions [ g ] = a . extensions [ g ] ; void 0 !== a . shading && ( d . flatShading = 1 === a . shading ) ; void 0 !== a . size && ( d . size = a . size ) ; void 0 !== a . sizeAttenuation && ( d . sizeAttenuation = a . sizeAttenuation ) ; void 0 !== a . map && ( d . map = b ( a . map ) ) ; void 0 !== a . matcap && ( d . matcap = b ( a . matcap ) ) ; void 0 !== a . alphaMap && ( d . alphaMap = b ( a . alphaMap ) , d . transparent = ! 0 ) ; void 0 !== a . bumpMap && ( d . bumpMap = b ( a . bumpMap ) ) ; void 0 !== a . bumpScale && ( d . bumpScale = a . bumpScale ) ;
void 0 !== a . normalMap && ( d . normalMap = b ( a . normalMap ) ) ; void 0 !== a . normalMapType && ( d . normalMapType = a . normalMapType ) ; void 0 !== a . normalScale && ( e = a . normalScale , ! 1 === Array . isArray ( e ) && ( e = [ e , e ] ) , d . normalScale = ( new B ) . fromArray ( e ) ) ; void 0 !== a . displacementMap && ( d . displacementMap = b ( a . displacementMap ) ) ; void 0 !== a . displacementScale && ( d . displacementScale = a . displacementScale ) ; void 0 !== a . displacementBias && ( d . displacementBias = a . displacementBias ) ; void 0 !== a . roughnessMap && ( d . roughnessMap = b ( a . roughnessMap ) ) ; void 0 !== a . metalnessMap &&
( d . metalnessMap = b ( a . metalnessMap ) ) ; void 0 !== a . emissiveMap && ( d . emissiveMap = b ( a . emissiveMap ) ) ; void 0 !== a . emissiveIntensity && ( d . emissiveIntensity = a . emissiveIntensity ) ; void 0 !== a . specularMap && ( d . specularMap = b ( a . specularMap ) ) ; void 0 !== a . envMap && ( d . envMap = b ( a . envMap ) ) ; void 0 !== a . envMapIntensity && ( d . envMapIntensity = a . envMapIntensity ) ; void 0 !== a . reflectivity && ( d . reflectivity = a . reflectivity ) ; void 0 !== a . refractionRatio && ( d . refractionRatio = a . refractionRatio ) ; void 0 !== a . lightMap && ( d . lightMap = b ( a . lightMap ) ) ; void 0 !==
a . lightMapIntensity && ( d . lightMapIntensity = a . lightMapIntensity ) ; void 0 !== a . aoMap && ( d . aoMap = b ( a . aoMap ) ) ; void 0 !== a . aoMapIntensity && ( d . aoMapIntensity = a . aoMapIntensity ) ; void 0 !== a . gradientMap && ( d . gradientMap = b ( a . gradientMap ) ) ; void 0 !== a . clearcoatNormalMap && ( d . clearcoatNormalMap = b ( a . clearcoatNormalMap ) ) ; void 0 !== a . clearcoatNormalScale && ( d . clearcoatNormalScale = ( new B ) . fromArray ( a . clearcoatNormalScale ) ) ; return d } , setTextures : function ( a ) { this . textures = a ; return this } } ) ; var lh = { decodeText : function ( a ) { if ( "undefined" !==
typeof TextDecoder ) return ( new TextDecoder ) . decode ( a ) ; for ( var b = "" , c = 0 , d = a . length ; c < d ; c ++ ) b += String . fromCharCode ( a [ c ] ) ; try { return decodeURIComponent ( escape ( b ) ) } catch ( e ) { return b } } , extractUrlBase : function ( a ) { var b = a . lastIndexOf ( "/" ) ; return - 1 === b ? "./" : a . substr ( 0 , b + 1 ) } } ; qf . prototype = Object . assign ( Object . create ( E . prototype ) , { constructor : qf , isInstancedBufferGeometry : ! 0 , copy : function ( a ) { E . prototype . copy . call ( this , a ) ; this . maxInstancedCount = a . maxInstancedCount ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } ,
toJSON : function ( ) { var a = E . prototype . toJSON . call ( this ) ; a . maxInstancedCount = this . maxInstancedCount ; a . isInstancedBufferGeometry = ! 0 ; return a } } ) ; rf . prototype = Object . assign ( Object . create ( N . prototype ) , { constructor : rf , isInstancedBufferAttribute : ! 0 , copy : function ( a ) { N . prototype . copy . call ( this , a ) ; this . meshPerAttribute = a . meshPerAttribute ; return this } , toJSON : function ( ) { var a = N . prototype . toJSON . call ( this ) ; a . meshPerAttribute = this . meshPerAttribute ; a . isInstancedBufferAttribute = ! 0 ; return a } } ) ; sf . prototype = Object . assign ( Object . create ( V . prototype ) ,
{ constructor : sf , load : function ( a , b , c , d ) { var e = this , f = new Pa ( e . manager ) ; f . setPath ( e . path ) ; f . load ( a , function ( a ) { b ( e . parse ( JSON . parse ( a ) ) ) } , c , d ) } , parse : function ( a ) { var b = a . isInstancedBufferGeometry ? new qf : new E , c = a . data . index ; if ( void 0 !== c ) { var d = new mh [ c . type ] ( c . array ) ; b . setIndex ( new N ( d , 1 ) ) } c = a . data . attributes ; for ( var e in c ) { var f = c [ e ] ; d = new mh [ f . type ] ( f . array ) ; d = new ( f . isInstancedBufferAttribute ? rf : N ) ( d , f . itemSize , f . normalized ) ; void 0 !== f . name && ( d . name = f . name ) ; b . setAttribute ( e , d ) } var g = a . data . morphAttributes ;
if ( g ) for ( e in g ) { var h = g [ e ] , l = [ ] ; c = 0 ; for ( var k = h . length ; c < k ; c ++ ) f = h [ c ] , d = new mh [ f . type ] ( f . array ) , d = new N ( d , f . itemSize , f . normalized ) , void 0 !== f . name && ( d . name = f . name ) , l . push ( d ) ; b . morphAttributes [ e ] = l } a . data . morphTargetsRelative && ( b . morphTargetsRelative = ! 0 ) ; e = a . data . groups || a . data . drawcalls || a . data . offsets ; if ( void 0 !== e ) for ( c = 0 , f = e . length ; c !== f ; ++ c ) d = e [ c ] , b . addGroup ( d . start , d . count , d . materialIndex ) ; c = a . data . boundingSphere ; void 0 !== c && ( e = new n , void 0 !== c . center && e . fromArray ( c . center ) , b . boundingSphere =
new mb ( e , c . radius ) ) ; a . name && ( b . name = a . name ) ; a . userData && ( b . userData = a . userData ) ; return b } } ) ; var mh = { Int8Array : Int8Array , Uint8Array : Uint8Array , Uint8ClampedArray : "undefined" !== typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array , Int16Array : Int16Array , Uint16Array : Uint16Array , Int32Array : Int32Array , Uint32Array : Uint32Array , Float32Array : Float32Array , Float64Array : Float64Array } ; tf . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : tf , load : function ( a , b , c , d ) { var e = this , f = "" === this . path ? lh . extractUrlBase ( a ) :
this . path ; this . resourcePath = this . resourcePath || f ; f = new Pa ( e . manager ) ; f . setPath ( this . path ) ; f . load ( a , function ( c ) { var f = null ; try { f = JSON . parse ( c ) } catch ( l ) { void 0 !== d && d ( l ) ; console . error ( "THREE:ObjectLoader: Can't parse " + a + "." , l . message ) ; return } c = f . metadata ; void 0 === c || void 0 === c . type || "geometry" === c . type . toLowerCase ( ) ? console . error ( "THREE.ObjectLoader: Can't load " + a ) : e . parse ( f , b ) } , c , d ) } , parse : function ( a , b ) { var c = this . parseShape ( a . shapes ) ; c = this . parseGeometries ( a . geometries , c ) ; var d = this . parseImages ( a . images ,
function ( ) { void 0 !== b && b ( e ) } ) ; d = this . parseTextures ( a . textures , d ) ; d = this . parseMaterials ( a . materials , d ) ; var e = this . parseObject ( a . object , c , d ) ; a . animations && ( e . animations = this . parseAnimations ( a . animations ) ) ; void 0 !== a . images && 0 !== a . images . length || void 0 === b || b ( e ) ; return e } , parseShape : function ( a ) { var b = { } ; if ( void 0 !== a ) for ( var c = 0 , d = a . length ; c < d ; c ++ ) { var e = ( new Ib ) . fromJSON ( a [ c ] ) ; b [ e . uuid ] = e } return b } , parseGeometries : function ( a , b ) { var c = { } ; if ( void 0 !== a ) for ( var d = new sf , e = 0 , f = a . length ; e < f ; e ++ ) { var g = a [ e ] ;
switch ( g . type ) { case "PlaneGeometry" : case "PlaneBufferGeometry" : var h = new ta [ g . type ] ( g . width , g . height , g . widthSegments , g . heightSegments ) ; break ; case "BoxGeometry" : case "BoxBufferGeometry" : case "CubeGeometry" : h = new ta [ g . type ] ( g . width , g . height , g . depth , g . widthSegments , g . heightSegments , g . depthSegments ) ; break ; case "CircleGeometry" : case "CircleBufferGeometry" : h = new ta [ g . type ] ( g . radius , g . segments , g . thetaStart , g . thetaLength ) ; break ; case "CylinderGeometry" : case "CylinderBufferGeometry" : h = new ta [ g . type ] ( g . radiusTop ,
g . radiusBottom , g . height , g . radialSegments , g . heightSegments , g . openEnded , g . thetaStart , g . thetaLength ) ; break ; case "ConeGeometry" : case "ConeBufferGeometry" : h = new ta [ g . type ] ( g . radius , g . height , g . radialSegments , g . heightSegments , g . openEnded , g . thetaStart , g . thetaLength ) ; break ; case "SphereGeometry" : case "SphereBufferGeometry" : h = new ta [ g . type ] ( g . radius , g . widthSegments , g . heightSegments , g . phiStart , g . phiLength , g . thetaStart , g . thetaLength ) ; break ; case "DodecahedronGeometry" : case "DodecahedronBufferGeometry" : case "IcosahedronGeometry" : case "IcosahedronBufferGeometry" : case "OctahedronGeometry" : case "OctahedronBufferGeometry" : case "TetrahedronGeometry" : case "TetrahedronBufferGeometry" : h =
new ta [ g . type ] ( g . radius , g . detail ) ; break ; case "RingGeometry" : case "RingBufferGeometry" : h = new ta [ g . type ] ( g . innerRadius , g . outerRadius , g . thetaSegments , g . phiSegments , g . thetaStart , g . thetaLength ) ; break ; case "TorusGeometry" : case "TorusBufferGeometry" : h = new ta [ g . type ] ( g . radius , g . tube , g . radialSegments , g . tubularSegments , g . arc ) ; break ; case "TorusKnotGeometry" : case "TorusKnotBufferGeometry" : h = new ta [ g . type ] ( g . radius , g . tube , g . tubularSegments , g . radialSegments , g . p , g . q ) ; break ; case "TubeGeometry" : case "TubeBufferGeometry" : h =
new ta [ g . type ] ( ( new kh [ g . path . type ] ) . fromJSON ( g . path ) , g . tubularSegments , g . radius , g . radialSegments , g . closed ) ; break ; case "LatheGeometry" : case "LatheBufferGeometry" : h = new ta [ g . type ] ( g . points , g . segments , g . phiStart , g . phiLength ) ; break ; case "PolyhedronGeometry" : case "PolyhedronBufferGeometry" : h = new ta [ g . type ] ( g . vertices , g . indices , g . radius , g . details ) ; break ; case "ShapeGeometry" : case "ShapeBufferGeometry" : h = [ ] ; for ( var l = 0 , k = g . shapes . length ; l < k ; l ++ ) { var n = b [ g . shapes [ l ] ] ; h . push ( n ) } h = new ta [ g . type ] ( h , g . curveSegments ) ;
break ; case "ExtrudeGeometry" : case "ExtrudeBufferGeometry" : h = [ ] ; l = 0 ; for ( k = g . shapes . length ; l < k ; l ++ ) n = b [ g . shapes [ l ] ] , h . push ( n ) ; l = g . options . extrudePath ; void 0 !== l && ( g . options . extrudePath = ( new kh [ l . type ] ) . fromJSON ( l ) ) ; h = new ta [ g . type ] ( h , g . options ) ; break ; case "BufferGeometry" : case "InstancedBufferGeometry" : h = d . parse ( g ) ; break ; case "Geometry" : "THREE" in window && "LegacyJSONLoader" in THREE ? h = ( new THREE . LegacyJSONLoader ) . parse ( g , this . resourcePath ) . geometry : console . error ( 'THREE.ObjectLoader: You have to import LegacyJSONLoader in order load geometry data of type "Geometry".' ) ;
break ; default : console . warn ( 'THREE.ObjectLoader: Unsupported geometry type "' + g . type + '"' ) ; continue } h . uuid = g . uuid ; void 0 !== g . name && ( h . name = g . name ) ; ! 0 === h . isBufferGeometry && void 0 !== g . userData && ( h . userData = g . userData ) ; c [ g . uuid ] = h } return c } , parseMaterials : function ( a , b ) { var c = { } , d = { } ; if ( void 0 !== a ) { var e = new pf ; e . setTextures ( b ) ; b = 0 ; for ( var f = a . length ; b < f ; b ++ ) { var g = a [ b ] ; if ( "MultiMaterial" === g . type ) { for ( var h = [ ] , l = 0 ; l < g . materials . length ; l ++ ) { var k = g . materials [ l ] ; void 0 === c [ k . uuid ] && ( c [ k . uuid ] = e . parse ( k ) ) ;
h . push ( c [ k . uuid ] ) } d [ g . uuid ] = h } else void 0 === c [ g . uuid ] && ( c [ g . uuid ] = e . parse ( g ) ) , d [ g . uuid ] = c [ g . uuid ] } } return d } , parseAnimations : function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) { var d = a [ c ] , e = Oa . parse ( d ) ; void 0 !== d . uuid && ( e . uuid = d . uuid ) ; b . push ( e ) } return b } , parseImages : function ( a , b ) { function c ( a ) { d . manager . itemStart ( a ) ; return f . load ( a , function ( ) { d . manager . itemEnd ( a ) } , void 0 , function ( ) { d . manager . itemError ( a ) ; d . manager . itemEnd ( a ) } ) } var d = this , e = { } ; if ( void 0 !== a && 0 < a . length ) { b = new wg ( b ) ; var f = new $c ( b ) ; f . setCrossOrigin ( this . crossOrigin ) ;
b = 0 ; for ( var g = a . length ; b < g ; b ++ ) { var h = a [ b ] , l = h . url ; if ( Array . isArray ( l ) ) { e [ h . uuid ] = [ ] ; for ( var k = 0 , n = l . length ; k < n ; k ++ ) { var p = l [ k ] ; p = /^(\/\/)|([a-z]+:(\/\/)?)/i . test ( p ) ? p : d . resourcePath + p ; e [ h . uuid ] . push ( c ( p ) ) } } else p = /^(\/\/)|([a-z]+:(\/\/)?)/i . test ( h . url ) ? h . url : d . resourcePath + h . url , e [ h . uuid ] = c ( p ) } } return e } , parseTextures : function ( a , b ) { function c ( a , b ) { if ( "number" === typeof a ) return a ; console . warn ( "THREE.ObjectLoader.parseTexture: Constant should be in numeric form." , a ) ; return b [ a ] } var d = { } ; if ( void 0 !==
a ) for ( var e = 0 , f = a . length ; e < f ; e ++ ) { var g = a [ e ] ; void 0 === g . image && console . warn ( 'THREE.ObjectLoader: No "image" specified for' , g . uuid ) ; void 0 === b [ g . image ] && console . warn ( "THREE.ObjectLoader: Undefined image" , g . image ) ; var h = Array . isArray ( b [ g . image ] ) ? new nb ( b [ g . image ] ) : new Y ( b [ g . image ] ) ; h . needsUpdate = ! 0 ; h . uuid = g . uuid ; void 0 !== g . name && ( h . name = g . name ) ; void 0 !== g . mapping && ( h . mapping = c ( g . mapping , Mk ) ) ; void 0 !== g . offset && h . offset . fromArray ( g . offset ) ; void 0 !== g . repeat && h . repeat . fromArray ( g . repeat ) ; void 0 !== g . center &&
h . center . fromArray ( g . center ) ; void 0 !== g . rotation && ( h . rotation = g . rotation ) ; void 0 !== g . wrap && ( h . wrapS = c ( g . wrap [ 0 ] , Ji ) , h . wrapT = c ( g . wrap [ 1 ] , Ji ) ) ; void 0 !== g . format && ( h . format = g . format ) ; void 0 !== g . type && ( h . type = g . type ) ; void 0 !== g . encoding && ( h . encoding = g . encoding ) ; void 0 !== g . minFilter && ( h . minFilter = c ( g . minFilter , Ki ) ) ; void 0 !== g . magFilter && ( h . magFilter = c ( g . magFilter , Ki ) ) ; void 0 !== g . anisotropy && ( h . anisotropy = g . anisotropy ) ; void 0 !== g . flipY && ( h . flipY = g . flipY ) ; void 0 !== g . premultiplyAlpha && ( h . premultiplyAlpha =
g . premultiplyAlpha ) ; void 0 !== g . unpackAlignment && ( h . unpackAlignment = g . unpackAlignment ) ; d [ g . uuid ] = h } return d } , parseObject : function ( a , b , c ) { function d ( a ) { void 0 === b [ a ] && console . warn ( "THREE.ObjectLoader: Undefined geometry" , a ) ; return b [ a ] } function e ( a ) { if ( void 0 !== a ) { if ( Array . isArray ( a ) ) { for ( var b = [ ] , d = 0 , e = a . length ; d < e ; d ++ ) { var f = a [ d ] ; void 0 === c [ f ] && console . warn ( "THREE.ObjectLoader: Undefined material" , f ) ; b . push ( c [ f ] ) } return b } void 0 === c [ a ] && console . warn ( "THREE.ObjectLoader: Undefined material" , a ) ; return c [ a ] } }
switch ( a . type ) { case "Scene" : var f = new wd ; void 0 !== a . background && Number . isInteger ( a . background ) && ( f . background = new H ( a . background ) ) ; void 0 !== a . fog && ( "Fog" === a . fog . type ? f . fog = new Te ( a . fog . color , a . fog . near , a . fog . far ) : "FogExp2" === a . fog . type && ( f . fog = new Se ( a . fog . color , a . fog . density ) ) ) ; break ; case "PerspectiveCamera" : f = new da ( a . fov , a . aspect , a . near , a . far ) ; void 0 !== a . focus && ( f . focus = a . focus ) ; void 0 !== a . zoom && ( f . zoom = a . zoom ) ; void 0 !== a . filmGauge && ( f . filmGauge = a . filmGauge ) ; void 0 !== a . filmOffset && ( f . filmOffset =
a . filmOffset ) ; void 0 !== a . view && ( f . view = Object . assign ( { } , a . view ) ) ; break ; case "OrthographicCamera" : f = new pe ( a . left , a . right , a . top , a . bottom , a . near , a . far ) ; void 0 !== a . zoom && ( f . zoom = a . zoom ) ; void 0 !== a . view && ( f . view = Object . assign ( { } , a . view ) ) ; break ; case "AmbientLight" : f = new nf ( a . color , a . intensity ) ; break ; case "DirectionalLight" : f = new mf ( a . color , a . intensity ) ; break ; case "PointLight" : f = new kf ( a . color , a . intensity , a . distance , a . decay ) ; break ; case "RectAreaLight" : f = new of ( a . color , a . intensity , a . width , a . height ) ; break ;
case "SpotLight" : f = new jf ( a . color , a . intensity , a . distance , a . angle , a . penumbra , a . decay ) ; break ; case "HemisphereLight" : f = new gf ( a . color , a . groundColor , a . intensity ) ; break ; case "SkinnedMesh" : console . warn ( "THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet." ) ; case "Mesh" : f = d ( a . geometry ) ; var g = e ( a . material ) ; f = f . bones && 0 < f . bones . length ? new Pd ( f , g ) : new ja ( f , g ) ; break ; case "InstancedMesh" : f = d ( a . geometry ) ; g = e ( a . material ) ; var h = a . instanceMatrix ; f = new We ( f , g , a . count ) ; f . instanceMatrix = new N ( new Float32Array ( h . array ) ,
16 ) ; break ; case "LOD" : f = new Od ; break ; case "Line" : f = new wa ( d ( a . geometry ) , e ( a . material ) , a . mode ) ; break ; case "LineLoop" : f = new Xe ( d ( a . geometry ) , e ( a . material ) ) ; break ; case "LineSegments" : f = new X ( d ( a . geometry ) , e ( a . material ) ) ; break ; case "PointCloud" : case "Points" : f = new Ic ( d ( a . geometry ) , e ( a . material ) ) ; break ; case "Sprite" : f = new Md ( e ( a . material ) ) ; break ; case "Group" : f = new Fc ; break ; default : f = new y } f . uuid = a . uuid ; void 0 !== a . name && ( f . name = a . name ) ; void 0 !== a . matrix ? ( f . matrix . fromArray ( a . matrix ) , void 0 !== a . matrixAutoUpdate &&
( f . matrixAutoUpdate = a . matrixAutoUpdate ) , f . matrixAutoUpdate && f . matrix . decompose ( f . position , f . quaternion , f . scale ) ) : ( void 0 !== a . position && f . position . fromArray ( a . position ) , void 0 !== a . rotation && f . rotation . fromArray ( a . rotation ) , void 0 !== a . quaternion && f . quaternion . fromArray ( a . quaternion ) , void 0 !== a . scale && f . scale . fromArray ( a . scale ) ) ; void 0 !== a . castShadow && ( f . castShadow = a . castShadow ) ; void 0 !== a . receiveShadow && ( f . receiveShadow = a . receiveShadow ) ; a . shadow && ( void 0 !== a . shadow . bias && ( f . shadow . bias = a . shadow . bias ) ,
void 0 !== a . shadow . radius && ( f . shadow . radius = a . shadow . radius ) , void 0 !== a . shadow . mapSize && f . shadow . mapSize . fromArray ( a . shadow . mapSize ) , void 0 !== a . shadow . camera && ( f . shadow . camera = this . parseObject ( a . shadow . camera ) ) ) ; void 0 !== a . visible && ( f . visible = a . visible ) ; void 0 !== a . frustumCulled && ( f . frustumCulled = a . frustumCulled ) ; void 0 !== a . renderOrder && ( f . renderOrder = a . renderOrder ) ; void 0 !== a . userData && ( f . userData = a . userData ) ; void 0 !== a . layers && ( f . layers . mask = a . layers ) ; void 0 !== a . drawMode && f . setDrawMode ( a . drawMode ) ;
if ( void 0 !== a . children ) for ( h = a . children , g = 0 ; g < h . length ; g ++ ) f . add ( this . parseObject ( h [ g ] , b , c ) ) ; if ( "LOD" === a . type ) for ( void 0 !== a . autoUpdate && ( f . autoUpdate = a . autoUpdate ) , a = a . levels , h = 0 ; h < a . length ; h ++ ) { g = a [ h ] ; var l = f . getObjectByProperty ( "uuid" , g . object ) ; void 0 !== l && f . addLevel ( l , g . distance ) } return f } } ) ; var Mk = { UVMapping : 300 , CubeReflectionMapping : 301 , CubeRefractionMapping : 302 , EquirectangularReflectionMapping : 303 , EquirectangularRefractionMapping : 304 , SphericalReflectionMapping : 305 , CubeUVReflectionMapping : 306 ,
CubeUVRefractionMapping : 307 } , Ji = { RepeatWrapping : 1E3 , ClampToEdgeWrapping : 1001 , MirroredRepeatWrapping : 1002 } , Ki = { NearestFilter : 1003 , NearestMipmapNearestFilter : 1004 , NearestMipmapLinearFilter : 1005 , LinearFilter : 1006 , LinearMipmapNearestFilter : 1007 , LinearMipmapLinearFilter : 1008 } ; Bg . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : Bg , setOptions : function ( a ) { this . options = a ; return this } , load : function ( a , b , c , d ) { void 0 === a && ( a = "" ) ; void 0 !== this . path && ( a = this . path + a ) ; a = this . manager . resolveURL ( a ) ; var e =
this , f = rc . get ( a ) ; if ( void 0 !== f ) return e . manager . itemStart ( a ) , setTimeout ( function ( ) { b && b ( f ) ; e . manager . itemEnd ( a ) } , 0 ) , f ; fetch ( a ) . then ( function ( a ) { return a . blob ( ) } ) . then ( function ( a ) { return void 0 === e . options ? createImageBitmap ( a ) : createImageBitmap ( a , e . options ) } ) . then ( function ( c ) { rc . add ( a , c ) ; b && b ( c ) ; e . manager . itemEnd ( a ) } ) . catch ( function ( b ) { d && d ( b ) ; e . manager . itemError ( a ) ; e . manager . itemEnd ( a ) } ) ; e . manager . itemStart ( a ) } } ) ; Object . assign ( Cg . prototype , { moveTo : function ( a , b ) { this . currentPath = new Za ; this . subPaths . push ( this . currentPath ) ;
this . currentPath . moveTo ( a , b ) ; return this } , lineTo : function ( a , b ) { this . currentPath . lineTo ( a , b ) ; return this } , quadraticCurveTo : function ( a , b , c , d ) { this . currentPath . quadraticCurveTo ( a , b , c , d ) ; return this } , bezierCurveTo : function ( a , b , c , d , e , f ) { this . currentPath . bezierCurveTo ( a , b , c , d , e , f ) ; return this } , splineThru : function ( a ) { this . currentPath . splineThru ( a ) ; return this } , toShapes : function ( a , b ) { function c ( a ) { for ( var b = [ ] , c = 0 , d = a . length ; c < d ; c ++ ) { var e = a [ c ] , f = new Ib ; f . curves = e . curves ; b . push ( f ) } return b } function d ( a , b ) { for ( var c =
b . length , d = ! 1 , e = c - 1 , f = 0 ; f < c ; e = f ++ ) { var g = b [ e ] , h = b [ f ] , l = h . x - g . x , k = h . y - g . y ; if ( Math . abs ( k ) > Number . EPSILON ) { if ( 0 > k && ( g = b [ f ] , l = - l , h = b [ e ] , k = - k ) , ! ( a . y < g . y || a . y > h . y ) ) if ( a . y === g . y ) { if ( a . x === g . x ) return ! 0 } else { e = k * ( a . x - g . x ) - l * ( a . y - g . y ) ; if ( 0 === e ) return ! 0 ; 0 > e || ( d = ! d ) } } else if ( a . y === g . y && ( h . x <= a . x && a . x <= g . x || g . x <= a . x && a . x <= h . x ) ) return ! 0 } return d } var e = qb . isClockWise , f = this . subPaths ; if ( 0 === f . length ) return [ ] ; if ( ! 0 === b ) return c ( f ) ; b = [ ] ; if ( 1 === f . length ) { var g = f [ 0 ] ; var h = new Ib ; h . curves = g . curves ; b . push ( h ) ; return b } var l =
! e ( f [ 0 ] . getPoints ( ) ) ; l = a ? ! l : l ; h = [ ] ; var k = [ ] , n = [ ] , p = 0 ; k [ p ] = void 0 ; n [ p ] = [ ] ; for ( var t = 0 , u = f . length ; t < u ; t ++ ) { g = f [ t ] ; var q = g . getPoints ( ) ; var v = e ( q ) ; ( v = a ? ! v : v ) ? ( ! l && k [ p ] && p ++ , k [ p ] = { s : new Ib , p : q } , k [ p ] . s . curves = g . curves , l && p ++ , n [ p ] = [ ] ) : n [ p ] . push ( { h : g , p : q [ 0 ] } ) } if ( ! k [ 0 ] ) return c ( f ) ; if ( 1 < k . length ) { t = ! 1 ; a = [ ] ; e = 0 ; for ( f = k . length ; e < f ; e ++ ) h [ e ] = [ ] ; e = 0 ; for ( f = k . length ; e < f ; e ++ ) for ( g = n [ e ] , v = 0 ; v < g . length ; v ++ ) { l = g [ v ] ; p = ! 0 ; for ( q = 0 ; q < k . length ; q ++ ) d ( l . p , k [ q ] . p ) && ( e !== q && a . push ( { froms : e , tos : q , hole : v } ) , p ? ( p = ! 1 , h [ q ] . push ( l ) ) :
t = ! 0 ) ; p && h [ e ] . push ( l ) } 0 < a . length && ( t || ( n = h ) ) } t = 0 ; for ( e = k . length ; t < e ; t ++ ) for ( h = k [ t ] . s , b . push ( h ) , a = n [ t ] , f = 0 , g = a . length ; f < g ; f ++ ) h . holes . push ( a [ f ] . h ) ; return b } } ) ; Object . assign ( Dg . prototype , { isFont : ! 0 , generateShapes : function ( a , b ) { void 0 === b && ( b = 100 ) ; var c = [ ] , d = b ; b = this . data ; var e = Array . from ? Array . from ( a ) : String ( a ) . split ( "" ) ; d /= b . resolution ; var f = ( b . boundingBox . yMax - b . boundingBox . yMin + b . underlineThickness ) * d ; a = [ ] ; for ( var g = 0 , h = 0 , l = 0 ; l < e . length ; l ++ ) { var k = e [ l ] ; if ( "\n" === k ) g = 0 , h -= f ; else { var n = k ; k = d ; var p =
g , t = h , u = b , q = u . glyphs [ n ] || u . glyphs [ "?" ] ; if ( q ) { n = new Cg ; if ( q . o ) { u = q . _cachedOutline || ( q . _cachedOutline = q . o . split ( " " ) ) ; for ( var v = 0 , A = u . length ; v < A ; ) switch ( u [ v ++ ] ) { case "m" : var w = u [ v ++ ] * k + p ; var x = u [ v ++ ] * k + t ; n . moveTo ( w , x ) ; break ; case "l" : w = u [ v ++ ] * k + p ; x = u [ v ++ ] * k + t ; n . lineTo ( w , x ) ; break ; case "q" : var y = u [ v ++ ] * k + p ; var B = u [ v ++ ] * k + t ; var z = u [ v ++ ] * k + p ; var C = u [ v ++ ] * k + t ; n . quadraticCurveTo ( z , C , y , B ) ; break ; case "b" : y = u [ v ++ ] * k + p , B = u [ v ++ ] * k + t , z = u [ v ++ ] * k + p , C = u [ v ++ ] * k + t , w = u [ v ++ ] * k + p , x = u [ v ++ ] * k + t , n . bezierCurveTo ( z , C , w , x , y ,
B ) } } k = { offsetX : q . ha * k , path : n } } else console . error ( 'THREE.Font: character "' + n + '" does not exists in font family ' + u . familyName + "." ) , k = void 0 ; g += k . offsetX ; a . push ( k . path ) } } b = 0 ; for ( e = a . length ; b < e ; b ++ ) Array . prototype . push . apply ( c , a [ b ] . toShapes ( ) ) ; return c } } ) ; Eg . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : Eg , load : function ( a , b , c , d ) { var e = this , f = new Pa ( this . manager ) ; f . setPath ( this . path ) ; f . load ( a , function ( a ) { try { var c = JSON . parse ( a ) } catch ( l ) { console . warn ( "THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead." ) ,
c = JSON . parse ( a . substring ( 65 , a . length - 2 ) ) } a = e . parse ( c ) ; b && b ( a ) } , c , d ) } , parse : function ( a ) { return new Dg ( a ) } } ) ; var Tf , Jg = { getContext : function ( ) { void 0 === Tf && ( Tf = new ( window . AudioContext || window . webkitAudioContext ) ) ; return Tf } , setContext : function ( a ) { Tf = a } } ; uf . prototype = Object . assign ( Object . create ( V . prototype ) , { constructor : uf , load : function ( a , b , c , d ) { var e = new Pa ( this . manager ) ; e . setResponseType ( "arraybuffer" ) ; e . setPath ( this . path ) ; e . load ( a , function ( a ) { a = a . slice ( 0 ) ; Jg . getContext ( ) . decodeAudioData ( a , function ( a ) { b ( a ) } ) } ,
c , d ) } } ) ; Object . assign ( vf . prototype , { isSphericalHarmonics3 : ! 0 , set : function ( a ) { for ( var b = 0 ; 9 > b ; b ++ ) this . coefficients [ b ] . copy ( a [ b ] ) ; return this } , zero : function ( ) { for ( var a = 0 ; 9 > a ; a ++ ) this . coefficients [ a ] . set ( 0 , 0 , 0 ) ; return this } , getAt : function ( a , b ) { var c = a . x , d = a . y ; a = a . z ; var e = this . coefficients ; b . copy ( e [ 0 ] ) . multiplyScalar ( . 282095 ) ; b . addScale ( e [ 1 ] , . 488603 * d ) ; b . addScale ( e [ 2 ] , . 488603 * a ) ; b . addScale ( e [ 3 ] , . 488603 * c ) ; b . addScale ( e [ 4 ] , 1.092548 * c * d ) ; b . addScale ( e [ 5 ] , 1.092548 * d * a ) ; b . addScale ( e [ 6 ] , . 315392 * ( 3 * a * a - 1 ) ) ;
2019-10-25 18:42:56 +08:00
b . addScale ( e [ 7 ] , 1.092548 * c * a ) ; b . addScale ( e [ 8 ] , . 546274 * ( c * c - d * d ) ) ; return b } , getIrradianceAt : function ( a , b ) { var c = a . x , d = a . y ; a = a . z ; var e = this . coefficients ; b . copy ( e [ 0 ] ) . multiplyScalar ( . 886227 ) ; b . addScale ( e [ 1 ] , 1.023328 * d ) ; b . addScale ( e [ 2 ] , 1.023328 * a ) ; b . addScale ( e [ 3 ] , 1.023328 * c ) ; b . addScale ( e [ 4 ] , . 858086 * c * d ) ; b . addScale ( e [ 5 ] , . 858086 * d * a ) ; b . addScale ( e [ 6 ] , . 743125 * a * a - . 247708 ) ; b . addScale ( e [ 7 ] , . 858086 * c * a ) ; b . addScale ( e [ 8 ] , . 429043 * ( c * c - d * d ) ) ; return b } , add : function ( a ) { for ( var b = 0 ; 9 > b ; b ++ ) this . coefficients [ b ] . add ( a . coefficients [ b ] ) ;
return this } , scale : function ( a ) { for ( var b = 0 ; 9 > b ; b ++ ) this . coefficients [ b ] . multiplyScalar ( a ) ; return this } , lerp : function ( a , b ) { for ( var c = 0 ; 9 > c ; c ++ ) this . coefficients [ c ] . lerp ( a . coefficients [ c ] , b ) ; return this } , equals : function ( a ) { for ( var b = 0 ; 9 > b ; b ++ ) if ( ! this . coefficients [ b ] . equals ( a . coefficients [ b ] ) ) return ! 1 ; return ! 0 } , copy : function ( a ) { return this . set ( a . coefficients ) } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , fromArray : function ( a , b ) { void 0 === b && ( b = 0 ) ; for ( var c = this . coefficients , d = 0 ; 9 > d ; d ++ ) c [ d ] . fromArray ( a ,
2019-12-11 10:47:24 +08:00
b + 3 * d ) ; return this } , toArray : function ( a , b ) { void 0 === a && ( a = [ ] ) ; void 0 === b && ( b = 0 ) ; for ( var c = this . coefficients , d = 0 ; 9 > d ; d ++ ) c [ d ] . toArray ( a , b + 3 * d ) ; return a } } ) ; Object . assign ( vf , { getBasisAt : function ( a , b ) { var c = a . x , d = a . y ; a = a . z ; b [ 0 ] = . 282095 ; b [ 1 ] = . 488603 * d ; b [ 2 ] = . 488603 * a ; b [ 3 ] = . 488603 * c ; b [ 4 ] = 1.092548 * c * d ; b [ 5 ] = 1.092548 * d * a ; b [ 6 ] = . 315392 * ( 3 * a * a - 1 ) ; b [ 7 ] = 1.092548 * c * a ; b [ 8 ] = . 546274 * ( c * c - d * d ) } } ) ; $a . prototype = Object . assign ( Object . create ( T . prototype ) , { constructor : $a , isLightProbe : ! 0 , copy : function ( a ) { T . prototype . copy . call ( this ,
a ) ; this . sh . copy ( a . sh ) ; this . intensity = a . intensity ; return this } , toJSON : function ( a ) { return T . prototype . toJSON . call ( this , a ) } } ) ; Fg . prototype = Object . assign ( Object . create ( $a . prototype ) , { constructor : Fg , isHemisphereLightProbe : ! 0 , copy : function ( a ) { $a . prototype . copy . call ( this , a ) ; return this } , toJSON : function ( a ) { return $a . prototype . toJSON . call ( this , a ) } } ) ; Gg . prototype = Object . assign ( Object . create ( $a . prototype ) , { constructor : Gg , isAmbientLightProbe : ! 0 , copy : function ( a ) { $a . prototype . copy . call ( this , a ) ; return this } , toJSON : function ( a ) { return $a . prototype . toJSON . call ( this ,
a ) } } ) ; var Li = new S , Mi = new S ; Object . assign ( ei . prototype , { update : function ( a ) { var b = this . _cache ; if ( b . focus !== a . focus || b . fov !== a . fov || b . aspect !== a . aspect * this . aspect || b . near !== a . near || b . far !== a . far || b . zoom !== a . zoom || b . eyeSep !== this . eyeSep ) { b . focus = a . focus ; b . fov = a . fov ; b . aspect = a . aspect * this . aspect ; b . near = a . near ; b . far = a . far ; b . zoom = a . zoom ; b . eyeSep = this . eyeSep ; var c = a . projectionMatrix . clone ( ) , d = b . eyeSep / 2 , e = d * b . near / b . focus , f = b . near * Math . tan ( R . DEG2RAD * b . fov * . 5 ) / b . zoom ; Mi . elements [ 12 ] = - d ; Li . elements [ 12 ] = d ;
d = - f * b . aspect + e ; var g = f * b . aspect + e ; c . elements [ 0 ] = 2 * b . near / ( g - d ) ; c . elements [ 8 ] = ( g + d ) / ( g - d ) ; this . cameraL . projectionMatrix . copy ( c ) ; d = - f * b . aspect - e ; g = f * b . aspect - e ; c . elements [ 0 ] = 2 * b . near / ( g - d ) ; c . elements [ 8 ] = ( g + d ) / ( g - d ) ; this . cameraR . projectionMatrix . copy ( c ) } this . cameraL . matrixWorld . copy ( a . matrixWorld ) . multiply ( Mi ) ; this . cameraR . matrixWorld . copy ( a . matrixWorld ) . multiply ( Li ) } } ) ; Object . assign ( Hg . prototype , { start : function ( ) { this . oldTime = this . startTime = ( "undefined" === typeof performance ? Date : performance ) . now ( ) ;
this . elapsedTime = 0 ; this . running = ! 0 } , stop : function ( ) { this . getElapsedTime ( ) ; this . autoStart = this . running = ! 1 } , getElapsedTime : function ( ) { this . getDelta ( ) ; return this . elapsedTime } , getDelta : function ( ) { var a = 0 ; if ( this . autoStart && ! this . running ) return this . start ( ) , 0 ; if ( this . running ) { var b = ( "undefined" === typeof performance ? Date : performance ) . now ( ) ; a = ( b - this . oldTime ) / 1E3 ; this . oldTime = b ; this . elapsedTime += a } return a } } ) ; var sc = new n , Ni = new ua , Nk = new n , tc = new n ; Ig . prototype = Object . assign ( Object . create ( y . prototype ) ,
{ constructor : Ig , getInput : function ( ) { return this . gain } , removeFilter : function ( ) { null !== this . filter && ( this . gain . disconnect ( this . filter ) , this . filter . disconnect ( this . context . destination ) , this . gain . connect ( this . context . destination ) , this . filter = null ) ; return this } , getFilter : function ( ) { return this . filter } , setFilter : function ( a ) { null !== this . filter ? ( this . gain . disconnect ( this . filter ) , this . filter . disconnect ( this . context . destination ) ) : this . gain . disconnect ( this . context . destination ) ; this . filter = a ; this . gain . connect ( this . filter ) ;
this . filter . connect ( this . context . destination ) ; return this } , getMasterVolume : function ( ) { return this . gain . gain . value } , setMasterVolume : function ( a ) { this . gain . gain . setTargetAtTime ( a , this . context . currentTime , . 01 ) ; return this } , updateMatrixWorld : function ( a ) { y . prototype . updateMatrixWorld . call ( this , a ) ; a = this . context . listener ; var b = this . up ; this . timeDelta = this . _clock . getDelta ( ) ; this . matrixWorld . decompose ( sc , Ni , Nk ) ; tc . set ( 0 , 0 , - 1 ) . applyQuaternion ( Ni ) ; if ( a . positionX ) { var c = this . context . currentTime + this . timeDelta ;
a . positionX . linearRampToValueAtTime ( sc . x , c ) ; a . positionY . linearRampToValueAtTime ( sc . y , c ) ; a . positionZ . linearRampToValueAtTime ( sc . z , c ) ; a . forwardX . linearRampToValueAtTime ( tc . x , c ) ; a . forwardY . linearRampToValueAtTime ( tc . y , c ) ; a . forwardZ . linearRampToValueAtTime ( tc . z , c ) ; a . upX . linearRampToValueAtTime ( b . x , c ) ; a . upY . linearRampToValueAtTime ( b . y , c ) ; a . upZ . linearRampToValueAtTime ( b . z , c ) } else a . setPosition ( sc . x , sc . y , sc . z ) , a . setOrientation ( tc . x , tc . y , tc . z , b . x , b . y , b . z ) } } ) ; bd . prototype = Object . assign ( Object . create ( y . prototype ) ,
{ constructor : bd , getOutput : function ( ) { return this . gain } , setNodeSource : function ( a ) { this . hasPlaybackControl = ! 1 ; this . sourceType = "audioNode" ; this . source = a ; this . connect ( ) ; return this } , setMediaElementSource : function ( a ) { this . hasPlaybackControl = ! 1 ; this . sourceType = "mediaNode" ; this . source = this . context . createMediaElementSource ( a ) ; this . connect ( ) ; return this } , setMediaStreamSource : function ( a ) { this . hasPlaybackControl = ! 1 ; this . sourceType = "mediaStreamNode" ; this . source = this . context . createMediaStreamSource ( a ) ; this . connect ( ) ;
return this } , setBuffer : function ( a ) { this . buffer = a ; this . sourceType = "buffer" ; this . autoplay && this . play ( ) ; return this } , play : function ( a ) { void 0 === a && ( a = 0 ) ; if ( ! 0 === this . isPlaying ) console . warn ( "THREE.Audio: Audio is already playing." ) ; else if ( ! 1 === this . hasPlaybackControl ) console . warn ( "THREE.Audio: this Audio has no playback control." ) ; else return this . _startedAt = this . context . currentTime + a , a = this . context . createBufferSource ( ) , a . buffer = this . buffer , a . loop = this . loop , a . loopStart = this . loopStart , a . loopEnd = this . loopEnd ,
a . onended = this . onEnded . bind ( this ) , a . start ( this . _startedAt , this . _pausedAt + this . offset , this . duration ) , this . isPlaying = ! 0 , this . source = a , this . setDetune ( this . detune ) , this . setPlaybackRate ( this . playbackRate ) , this . connect ( ) } , pause : function ( ) { if ( ! 1 === this . hasPlaybackControl ) console . warn ( "THREE.Audio: this Audio has no playback control." ) ; else return ! 0 === this . isPlaying && ( this . _pausedAt = ( this . context . currentTime - this . _startedAt ) * this . playbackRate , this . source . stop ( ) , this . source . onended = null , this . isPlaying = ! 1 ) ,
this } , stop : function ( ) { if ( ! 1 === this . hasPlaybackControl ) console . warn ( "THREE.Audio: this Audio has no playback control." ) ; else return this . _pausedAt = 0 , this . source . stop ( ) , this . source . onended = null , this . isPlaying = ! 1 , this } , connect : function ( ) { if ( 0 < this . filters . length ) { this . source . connect ( this . filters [ 0 ] ) ; for ( var a = 1 , b = this . filters . length ; a < b ; a ++ ) this . filters [ a - 1 ] . connect ( this . filters [ a ] ) ; this . filters [ this . filters . length - 1 ] . connect ( this . getOutput ( ) ) } else this . source . connect ( this . getOutput ( ) ) ; return this } ,
disconnect : function ( ) { if ( 0 < this . filters . length ) { this . source . disconnect ( this . filters [ 0 ] ) ; for ( var a = 1 , b = this . filters . length ; a < b ; a ++ ) this . filters [ a - 1 ] . disconnect ( this . filters [ a ] ) ; this . filters [ this . filters . length - 1 ] . disconnect ( this . getOutput ( ) ) } else this . source . disconnect ( this . getOutput ( ) ) ; return this } , getFilters : function ( ) { return this . filters } , setFilters : function ( a ) { a || ( a = [ ] ) ; ! 0 === this . isPlaying ? ( this . disconnect ( ) , this . filters = a , this . connect ( ) ) : this . filters = a ; return this } , setDetune : function ( a ) { this . detune =
a ; if ( void 0 !== this . source . detune ) return ! 0 === this . isPlaying && this . source . detune . setTargetAtTime ( this . detune , this . context . currentTime , . 01 ) , this } , getDetune : function ( ) { return this . detune } , getFilter : function ( ) { return this . getFilters ( ) [ 0 ] } , setFilter : function ( a ) { return this . setFilters ( a ? [ a ] : [ ] ) } , setPlaybackRate : function ( a ) { if ( ! 1 === this . hasPlaybackControl ) console . warn ( "THREE.Audio: this Audio has no playback control." ) ; else return this . playbackRate = a , ! 0 === this . isPlaying && this . source . playbackRate . setTargetAtTime ( this . playbackRate ,
this . context . currentTime , . 01 ) , this } , getPlaybackRate : function ( ) { return this . playbackRate } , onEnded : function ( ) { this . isPlaying = ! 1 } , getLoop : function ( ) { return ! 1 === this . hasPlaybackControl ? ( console . warn ( "THREE.Audio: this Audio has no playback control." ) , ! 1 ) : this . loop } , setLoop : function ( a ) { if ( ! 1 === this . hasPlaybackControl ) console . warn ( "THREE.Audio: this Audio has no playback control." ) ; else return this . loop = a , ! 0 === this . isPlaying && ( this . source . loop = this . loop ) , this } , setLoopStart : function ( a ) { this . loopStart = a ;
return this } , setLoopEnd : function ( a ) { this . loopEnd = a ; return this } , getVolume : function ( ) { return this . gain . gain . value } , setVolume : function ( a ) { this . gain . gain . setTargetAtTime ( a , this . context . currentTime , . 01 ) ; return this } } ) ; var uc = new n , Oi = new ua , Ok = new n , vc = new n ; Kg . prototype = Object . assign ( Object . create ( bd . prototype ) , { constructor : Kg , getOutput : function ( ) { return this . panner } , getRefDistance : function ( ) { return this . panner . refDistance } , setRefDistance : function ( a ) { this . panner . refDistance = a ; return this } , getRolloffFactor : function ( ) { return this . panner . rolloffFactor } ,
setRolloffFactor : function ( a ) { this . panner . rolloffFactor = a ; return this } , getDistanceModel : function ( ) { return this . panner . distanceModel } , setDistanceModel : function ( a ) { this . panner . distanceModel = a ; return this } , getMaxDistance : function ( ) { return this . panner . maxDistance } , setMaxDistance : function ( a ) { this . panner . maxDistance = a ; return this } , setDirectionalCone : function ( a , b , c ) { this . panner . coneInnerAngle = a ; this . panner . coneOuterAngle = b ; this . panner . coneOuterGain = c ; return this } , updateMatrixWorld : function ( a ) { y . prototype . updateMatrixWorld . call ( this ,
a ) ; if ( ! 0 !== this . hasPlaybackControl || ! 1 !== this . isPlaying ) if ( this . matrixWorld . decompose ( uc , Oi , Ok ) , vc . set ( 0 , 0 , 1 ) . applyQuaternion ( Oi ) , a = this . panner , a . positionX ) { var b = this . context . currentTime + this . listener . timeDelta ; a . positionX . linearRampToValueAtTime ( uc . x , b ) ; a . positionY . linearRampToValueAtTime ( uc . y , b ) ; a . positionZ . linearRampToValueAtTime ( uc . z , b ) ; a . orientationX . linearRampToValueAtTime ( vc . x , b ) ; a . orientationY . linearRampToValueAtTime ( vc . y , b ) ; a . orientationZ . linearRampToValueAtTime ( vc . z , b ) } else a . setPosition ( uc . x ,
uc . y , uc . z ) , a . setOrientation ( vc . x , vc . y , vc . z ) } } ) ; Object . assign ( Lg . prototype , { getFrequencyData : function ( ) { this . analyser . getByteFrequencyData ( this . data ) ; return this . data } , getAverageFrequency : function ( ) { for ( var a = 0 , b = this . getFrequencyData ( ) , c = 0 ; c < b . length ; c ++ ) a += b [ c ] ; return a / b . length } } ) ; Object . assign ( Mg . prototype , { accumulate : function ( a , b ) { var c = this . buffer , d = this . valueSize ; a = a * d + d ; var e = this . cumulativeWeight ; if ( 0 === e ) { for ( e = 0 ; e !== d ; ++ e ) c [ a + e ] = c [ e ] ; e = b } else e += b , this . _mixBufferRegion ( c , a , 0 , b / e , d ) ; this . cumulativeWeight =
e } , apply : function ( a ) { var b = this . valueSize , c = this . buffer ; a = a * b + b ; var d = this . cumulativeWeight , e = this . binding ; this . cumulativeWeight = 0 ; 1 > d && this . _mixBufferRegion ( c , a , 3 * b , 1 - d , b ) ; d = b ; for ( var f = b + b ; d !== f ; ++ d ) if ( c [ d ] !== c [ d + b ] ) { e . setValue ( c , a ) ; break } } , saveOriginalState : function ( ) { var a = this . buffer , b = this . valueSize , c = 3 * b ; this . binding . getValue ( a , c ) ; for ( var d = b ; d !== c ; ++ d ) a [ d ] = a [ c + d % b ] ; this . cumulativeWeight = 0 } , restoreOriginalState : function ( ) { this . binding . setValue ( this . buffer , 3 * this . valueSize ) } , _select : function ( a ,
b , c , d , e ) { if ( . 5 <= d ) for ( d = 0 ; d !== e ; ++ d ) a [ b + d ] = a [ c + d ] } , _slerp : function ( a , b , c , d ) { ua . slerpFlat ( a , b , a , b , a , c , d ) } , _lerp : function ( a , b , c , d , e ) { for ( var f = 1 - d , g = 0 ; g !== e ; ++ g ) { var h = b + g ; a [ h ] = a [ h ] * f + a [ c + g ] * d } } } ) ; var Pk = /[\[\]\.:\/]/g , Qk = "[^" + "\\[\\]\\.:\\/" . replace ( "\\." , "" ) + "]" , Rk = /((?:WC+[\/:])*)/ . source . replace ( "WC" , "[^\\[\\]\\.:\\/]" ) , Sk = /(WCOD+)?/ . source . replace ( "WCOD" , Qk ) , Tk = /(?:\.(WC+)(?:\[(.+)\])?)?/ . source . replace ( "WC" , "[^\\[\\]\\.:\\/]" ) , Uk = /\.(WC+)(?:\[(.+)\])?/ . source . replace ( "WC" , "[^\\[\\]\\.:\\/]" ) ,
Vk = new RegExp ( "^" + Rk + Sk + Tk + Uk + "$" ) , Wk = [ "material" , "materials" , "bones" ] ; Object . assign ( fi . prototype , { getValue : function ( a , b ) { this . bind ( ) ; var c = this . _bindings [ this . _targetGroup . nCachedObjects _ ] ; void 0 !== c && c . getValue ( a , b ) } , setValue : function ( a , b ) { for ( var c = this . _bindings , d = this . _targetGroup . nCachedObjects _ , e = c . length ; d !== e ; ++ d ) c [ d ] . setValue ( a , b ) } , bind : function ( ) { for ( var a = this . _bindings , b = this . _targetGroup . nCachedObjects _ , c = a . length ; b !== c ; ++ b ) a [ b ] . bind ( ) } , unbind : function ( ) { for ( var a = this . _bindings , b = this . _targetGroup . nCachedObjects _ ,
c = a . length ; b !== c ; ++ b ) a [ b ] . unbind ( ) } } ) ; Object . assign ( za , { Composite : fi , create : function ( a , b , c ) { return a && a . isAnimationObjectGroup ? new za . Composite ( a , b , c ) : new za ( a , b , c ) } , sanitizeNodeName : function ( a ) { return a . replace ( /\s/g , "_" ) . replace ( Pk , "" ) } , parseTrackName : function ( a ) { var b = Vk . exec ( a ) ; if ( ! b ) throw Error ( "PropertyBinding: Cannot parse trackName: " + a ) ; b = { nodeName : b [ 2 ] , objectName : b [ 3 ] , objectIndex : b [ 4 ] , propertyName : b [ 5 ] , propertyIndex : b [ 6 ] } ; var c = b . nodeName && b . nodeName . lastIndexOf ( "." ) ; if ( void 0 !== c && - 1 !==
c ) { var d = b . nodeName . substring ( c + 1 ) ; - 1 !== Wk . indexOf ( d ) && ( b . nodeName = b . nodeName . substring ( 0 , c ) , b . objectName = d ) } if ( null === b . propertyName || 0 === b . propertyName . length ) throw Error ( "PropertyBinding: can not parse propertyName from trackName: " + a ) ; return b } , findNode : function ( a , b ) { if ( ! b || "" === b || "root" === b || "." === b || - 1 === b || b === a . name || b === a . uuid ) return a ; if ( a . skeleton ) { var c = a . skeleton . getBoneByName ( b ) ; if ( void 0 !== c ) return c } if ( a . children ) { var d = function ( a ) { for ( var c = 0 ; c < a . length ; c ++ ) { var e = a [ c ] ; if ( e . name ===
b || e . uuid === b || ( e = d ( e . children ) ) ) return e } return null } ; if ( a = d ( a . children ) ) return a } return null } } ) ; Object . assign ( za . prototype , { _getValue _unavailable : function ( ) { } , _setValue _unavailable : function ( ) { } , BindingType : { Direct : 0 , EntireArray : 1 , ArrayElement : 2 , HasFromToArray : 3 } , Versioning : { None : 0 , NeedsUpdate : 1 , MatrixWorldNeedsUpdate : 2 } , GetterByBindingType : [ function ( a , b ) { a [ b ] = this . node [ this . propertyName ] } , function ( a , b ) { for ( var c = this . resolvedProperty , d = 0 , e = c . length ; d !== e ; ++ d ) a [ b ++ ] = c [ d ] } , function ( a , b ) { a [ b ] = this . resolvedProperty [ this . propertyIndex ] } ,
function ( a , b ) { this . resolvedProperty . toArray ( a , b ) } ] , SetterByBindingTypeAndVersioning : [ [ function ( a , b ) { this . targetObject [ this . propertyName ] = a [ b ] } , function ( a , b ) { this . targetObject [ this . propertyName ] = a [ b ] ; this . targetObject . needsUpdate = ! 0 } , function ( a , b ) { this . targetObject [ this . propertyName ] = a [ b ] ; this . targetObject . matrixWorldNeedsUpdate = ! 0 } ] , [ function ( a , b ) { for ( var c = this . resolvedProperty , d = 0 , e = c . length ; d !== e ; ++ d ) c [ d ] = a [ b ++ ] } , function ( a , b ) { for ( var c = this . resolvedProperty , d = 0 , e = c . length ; d !== e ; ++ d ) c [ d ] = a [ b ++ ] ;
this . targetObject . needsUpdate = ! 0 } , function ( a , b ) { for ( var c = this . resolvedProperty , d = 0 , e = c . length ; d !== e ; ++ d ) c [ d ] = a [ b ++ ] ; this . targetObject . matrixWorldNeedsUpdate = ! 0 } ] , [ function ( a , b ) { this . resolvedProperty [ this . propertyIndex ] = a [ b ] } , function ( a , b ) { this . resolvedProperty [ this . propertyIndex ] = a [ b ] ; this . targetObject . needsUpdate = ! 0 } , function ( a , b ) { this . resolvedProperty [ this . propertyIndex ] = a [ b ] ; this . targetObject . matrixWorldNeedsUpdate = ! 0 } ] , [ function ( a , b ) { this . resolvedProperty . fromArray ( a , b ) } , function ( a , b ) { this . resolvedProperty . fromArray ( a ,
b ) ; this . targetObject . needsUpdate = ! 0 } , function ( a , b ) { this . resolvedProperty . fromArray ( a , b ) ; this . targetObject . matrixWorldNeedsUpdate = ! 0 } ] ] , getValue : function ( a , b ) { this . bind ( ) ; this . getValue ( a , b ) } , setValue : function ( a , b ) { this . bind ( ) ; this . setValue ( a , b ) } , bind : function ( ) { var a = this . node , b = this . parsedPath , c = b . objectName , d = b . propertyName , e = b . propertyIndex ; a || ( this . node = a = za . findNode ( this . rootNode , b . nodeName ) || this . rootNode ) ; this . getValue = this . _getValue _unavailable ; this . setValue = this . _setValue _unavailable ; if ( a ) { if ( c ) { var f =
b . objectIndex ; switch ( c ) { case "materials" : if ( ! a . material ) { console . error ( "THREE.PropertyBinding: Can not bind to material as node does not have a material." , this ) ; return } if ( ! a . material . materials ) { console . error ( "THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array." , this ) ; return } a = a . material . materials ; break ; case "bones" : if ( ! a . skeleton ) { console . error ( "THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton." , this ) ; return } a = a . skeleton . bones ;
for ( c = 0 ; c < a . length ; c ++ ) if ( a [ c ] . name === f ) { f = c ; break } break ; default : if ( void 0 === a [ c ] ) { console . error ( "THREE.PropertyBinding: Can not bind to objectName of node undefined." , this ) ; return } a = a [ c ] } if ( void 0 !== f ) { if ( void 0 === a [ f ] ) { console . error ( "THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined." , this , a ) ; return } a = a [ f ] } } f = a [ d ] ; if ( void 0 === f ) console . error ( "THREE.PropertyBinding: Trying to update property for track: " + b . nodeName + "." + d + " but it wasn't found." , a ) ; else { b = this . Versioning . None ;
this . targetObject = a ; void 0 !== a . needsUpdate ? b = this . Versioning . NeedsUpdate : void 0 !== a . matrixWorldNeedsUpdate && ( b = this . Versioning . MatrixWorldNeedsUpdate ) ; c = this . BindingType . Direct ; if ( void 0 !== e ) { if ( "morphTargetInfluences" === d ) { if ( ! a . geometry ) { console . error ( "THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry." , this ) ; return } if ( a . geometry . isBufferGeometry ) { if ( ! a . geometry . morphAttributes ) { console . error ( "THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes." ,
this ) ; return } for ( c = 0 ; c < this . node . geometry . morphAttributes . position . length ; c ++ ) if ( a . geometry . morphAttributes . position [ c ] . name === e ) { e = c ; break } } else { if ( ! a . geometry . morphTargets ) { console . error ( "THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets." , this ) ; return } for ( c = 0 ; c < this . node . geometry . morphTargets . length ; c ++ ) if ( a . geometry . morphTargets [ c ] . name === e ) { e = c ; break } } } c = this . BindingType . ArrayElement ; this . resolvedProperty = f ; this . propertyIndex = e } else void 0 !==
f . fromArray && void 0 !== f . toArray ? ( c = this . BindingType . HasFromToArray , this . resolvedProperty = f ) : Array . isArray ( f ) ? ( c = this . BindingType . EntireArray , this . resolvedProperty = f ) : this . propertyName = d ; this . getValue = this . GetterByBindingType [ c ] ; this . setValue = this . SetterByBindingTypeAndVersioning [ c ] [ b ] } } else console . error ( "THREE.PropertyBinding: Trying to update node for track: " + this . path + " but it wasn't found." ) } , unbind : function ( ) { this . node = null ; this . getValue = this . _getValue _unbound ; this . setValue = this . _setValue _unbound } } ) ;
Object . assign ( za . prototype , { _getValue _unbound : za . prototype . getValue , _setValue _unbound : za . prototype . setValue } ) ; Object . assign ( gi . prototype , { isAnimationObjectGroup : ! 0 , add : function ( ) { for ( var a = this . _objects , b = a . length , c = this . nCachedObjects _ , d = this . _indicesByUUID , e = this . _paths , f = this . _parsedPaths , g = this . _bindings , h = g . length , l = void 0 , k = 0 , n = arguments . length ; k !== n ; ++ k ) { var p = arguments [ k ] , t = p . uuid , u = d [ t ] ; if ( void 0 === u ) { u = b ++ ; d [ t ] = u ; a . push ( p ) ; t = 0 ; for ( var q = h ; t !== q ; ++ t ) g [ t ] . push ( new za ( p , e [ t ] , f [ t ] ) ) } else if ( u <
c ) { l = a [ u ] ; var v = -- c ; q = a [ v ] ; d [ q . uuid ] = u ; a [ u ] = q ; d [ t ] = v ; a [ v ] = p ; t = 0 ; for ( q = h ; t !== q ; ++ t ) { var A = g [ t ] , w = A [ u ] ; A [ u ] = A [ v ] ; void 0 === w && ( w = new za ( p , e [ t ] , f [ t ] ) ) ; A [ v ] = w } } else a [ u ] !== l && console . error ( "THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes." ) } this . nCachedObjects _ = c } , remove : function ( ) { for ( var a = this . _objects , b = this . nCachedObjects _ , c = this . _indicesByUUID , d = this . _bindings , e = d . length , f = 0 , g = arguments . length ; f !== g ; ++ f ) { var h =
arguments [ f ] , k = h . uuid , m = c [ k ] ; if ( void 0 !== m && m >= b ) { var n = b ++ , p = a [ n ] ; c [ p . uuid ] = m ; a [ m ] = p ; c [ k ] = n ; a [ n ] = h ; h = 0 ; for ( k = e ; h !== k ; ++ h ) { p = d [ h ] ; var t = p [ m ] ; p [ m ] = p [ n ] ; p [ n ] = t } } } this . nCachedObjects _ = b } , uncache : function ( ) { for ( var a = this . _objects , b = a . length , c = this . nCachedObjects _ , d = this . _indicesByUUID , e = this . _bindings , f = e . length , g = 0 , h = arguments . length ; g !== h ; ++ g ) { var k = arguments [ g ] . uuid , m = d [ k ] ; if ( void 0 !== m ) if ( delete d [ k ] , m < c ) { k = -- c ; var n = a [ k ] , p = -- b , t = a [ p ] ; d [ n . uuid ] = m ; a [ m ] = n ; d [ t . uuid ] = k ; a [ k ] = t ; a . pop ( ) ; n = 0 ; for ( t = f ; n !==
t ; ++ n ) { var u = e [ n ] , q = u [ p ] ; u [ m ] = u [ k ] ; u [ k ] = q ; u . pop ( ) } } else for ( p = -- b , t = a [ p ] , d [ t . uuid ] = m , a [ m ] = t , a . pop ( ) , n = 0 , t = f ; n !== t ; ++ n ) u = e [ n ] , u [ m ] = u [ p ] , u . pop ( ) } this . nCachedObjects _ = c } , subscribe _ : function ( a , b ) { var c = this . _bindingsIndicesByPath , d = c [ a ] , e = this . _bindings ; if ( void 0 !== d ) return e [ d ] ; var f = this . _paths , g = this . _parsedPaths , h = this . _objects , k = this . nCachedObjects _ , m = Array ( h . length ) ; d = e . length ; c [ a ] = d ; f . push ( a ) ; g . push ( b ) ; e . push ( m ) ; c = k ; for ( d = h . length ; c !== d ; ++ c ) m [ c ] = new za ( h [ c ] , a , b ) ; return m } , unsubscribe _ : function ( a ) { var b =
this . _bindingsIndicesByPath , c = b [ a ] ; if ( void 0 !== c ) { var d = this . _paths , e = this . _parsedPaths , f = this . _bindings , g = f . length - 1 , h = f [ g ] ; b [ a [ g ] ] = c ; f [ c ] = h ; f . pop ( ) ; e [ c ] = e [ g ] ; e . pop ( ) ; d [ c ] = d [ g ] ; d . pop ( ) } } } ) ; Object . assign ( hi . prototype , { play : function ( ) { this . _mixer . _activateAction ( this ) ; return this } , stop : function ( ) { this . _mixer . _deactivateAction ( this ) ; return this . reset ( ) } , reset : function ( ) { this . paused = ! 1 ; this . enabled = ! 0 ; this . time = 0 ; this . _loopCount = - 1 ; this . _startTime = null ; return this . stopFading ( ) . stopWarping ( ) } , isRunning : function ( ) { return this . enabled &&
! this . paused && 0 !== this . timeScale && null === this . _startTime && this . _mixer . _isActiveAction ( this ) } , isScheduled : function ( ) { return this . _mixer . _isActiveAction ( this ) } , startAt : function ( a ) { this . _startTime = a ; return this } , setLoop : function ( a , b ) { this . loop = a ; this . repetitions = b ; return this } , setEffectiveWeight : function ( a ) { this . weight = a ; this . _effectiveWeight = this . enabled ? a : 0 ; return this . stopFading ( ) } , getEffectiveWeight : function ( ) { return this . _effectiveWeight } , fadeIn : function ( a ) { return this . _scheduleFading ( a , 0 , 1 ) } , fadeOut : function ( a ) { return this . _scheduleFading ( a ,
1 , 0 ) } , crossFadeFrom : function ( a , b , c ) { a . fadeOut ( b ) ; this . fadeIn ( b ) ; if ( c ) { c = this . _clip . duration ; var d = a . _clip . duration , e = c / d ; a . warp ( 1 , d / c , b ) ; this . warp ( e , 1 , b ) } return this } , crossFadeTo : function ( a , b , c ) { return a . crossFadeFrom ( this , b , c ) } , stopFading : function ( ) { var a = this . _weightInterpolant ; null !== a && ( this . _weightInterpolant = null , this . _mixer . _takeBackControlInterpolant ( a ) ) ; return this } , setEffectiveTimeScale : function ( a ) { this . timeScale = a ; this . _effectiveTimeScale = this . paused ? 0 : a ; return this . stopWarping ( ) } , getEffectiveTimeScale : function ( ) { return this . _effectiveTimeScale } ,
setDuration : function ( a ) { this . timeScale = this . _clip . duration / a ; return this . stopWarping ( ) } , syncWith : function ( a ) { this . time = a . time ; this . timeScale = a . timeScale ; return this . stopWarping ( ) } , halt : function ( a ) { return this . warp ( this . _effectiveTimeScale , 0 , a ) } , warp : function ( a , b , c ) { var d = this . _mixer , e = d . time , f = this . _timeScaleInterpolant , g = this . timeScale ; null === f && ( this . _timeScaleInterpolant = f = d . _lendControlInterpolant ( ) ) ; d = f . parameterPositions ; f = f . sampleValues ; d [ 0 ] = e ; d [ 1 ] = e + c ; f [ 0 ] = a / g ; f [ 1 ] = b / g ; return this } , stopWarping : function ( ) { var a =
this . _timeScaleInterpolant ; null !== a && ( this . _timeScaleInterpolant = null , this . _mixer . _takeBackControlInterpolant ( a ) ) ; return this } , getMixer : function ( ) { return this . _mixer } , getClip : function ( ) { return this . _clip } , getRoot : function ( ) { return this . _localRoot || this . _mixer . _root } , _update : function ( a , b , c , d ) { if ( this . enabled ) { var e = this . _startTime ; if ( null !== e ) { b = ( a - e ) * c ; if ( 0 > b || 0 === c ) return ; this . _startTime = null ; b *= c } b *= this . _updateTimeScale ( a ) ; c = this . _updateTime ( b ) ; a = this . _updateWeight ( a ) ; if ( 0 < a ) { b = this . _interpolants ;
e = this . _propertyBindings ; for ( var f = 0 , g = b . length ; f !== g ; ++ f ) b [ f ] . evaluate ( c ) , e [ f ] . accumulate ( d , a ) } } else this . _updateWeight ( a ) } , _updateWeight : function ( a ) { var b = 0 ; if ( this . enabled ) { b = this . weight ; var c = this . _weightInterpolant ; if ( null !== c ) { var d = c . evaluate ( a ) [ 0 ] ; b *= d ; a > c . parameterPositions [ 1 ] && ( this . stopFading ( ) , 0 === d && ( this . enabled = ! 1 ) ) } } return this . _effectiveWeight = b } , _updateTimeScale : function ( a ) { var b = 0 ; if ( ! this . paused ) { b = this . timeScale ; var c = this . _timeScaleInterpolant ; if ( null !== c ) { var d = c . evaluate ( a ) [ 0 ] ;
b *= d ; a > c . parameterPositions [ 1 ] && ( this . stopWarping ( ) , 0 === b ? this . paused = ! 0 : this . timeScale = b ) } } return this . _effectiveTimeScale = b } , _updateTime : function ( a ) { var b = this . time + a , c = this . _clip . duration , d = this . loop , e = this . _loopCount , f = 2202 === d ; if ( 0 === a ) return - 1 === e ? b : f && 1 === ( e & 1 ) ? c - b : b ; if ( 2200 === d ) a : { if ( - 1 === e && ( this . _loopCount = 0 , this . _setEndings ( ! 0 , ! 0 , ! 1 ) ) , b >= c ) b = c ; else if ( 0 > b ) b = 0 ; else { this . time = b ; break a } this . clampWhenFinished ? this . paused = ! 0 : this . enabled = ! 1 ; this . time = b ; this . _mixer . dispatchEvent ( { type : "finished" ,
action : this , direction : 0 > a ? - 1 : 1 } ) } else { - 1 === e && ( 0 <= a ? ( e = 0 , this . _setEndings ( ! 0 , 0 === this . repetitions , f ) ) : this . _setEndings ( 0 === this . repetitions , ! 0 , f ) ) ; if ( b >= c || 0 > b ) { d = Math . floor ( b / c ) ; b -= c * d ; e += Math . abs ( d ) ; var g = this . repetitions - e ; 0 >= g ? ( this . clampWhenFinished ? this . paused = ! 0 : this . enabled = ! 1 , this . time = b = 0 < a ? c : 0 , this . _mixer . dispatchEvent ( { type : "finished" , action : this , direction : 0 < a ? 1 : - 1 } ) ) : ( 1 === g ? ( a = 0 > a , this . _setEndings ( a , ! a , f ) ) : this . _setEndings ( ! 1 , ! 1 , f ) , this . _loopCount = e , this . time = b , this . _mixer . dispatchEvent ( { type : "loop" ,
action : this , loopDelta : d } ) ) } else this . time = b ; if ( f && 1 === ( e & 1 ) ) return c - b } return b } , _setEndings : function ( a , b , c ) { var d = this . _interpolantSettings ; c ? ( d . endingStart = 2401 , d . endingEnd = 2401 ) : ( d . endingStart = a ? this . zeroSlopeAtStart ? 2401 : 2400 : 2402 , d . endingEnd = b ? this . zeroSlopeAtEnd ? 2401 : 2400 : 2402 ) } , _scheduleFading : function ( a , b , c ) { var d = this . _mixer , e = d . time , f = this . _weightInterpolant ; null === f && ( this . _weightInterpolant = f = d . _lendControlInterpolant ( ) ) ; d = f . parameterPositions ; f = f . sampleValues ; d [ 0 ] = e ; f [ 0 ] = b ; d [ 1 ] = e + a ; f [ 1 ] =
c ; return this } } ) ; Ng . prototype = Object . assign ( Object . create ( Aa . prototype ) , { constructor : Ng , _bindAction : function ( a , b ) { var c = a . _localRoot || this . _root , d = a . _clip . tracks , e = d . length , f = a . _propertyBindings ; a = a . _interpolants ; var g = c . uuid , h = this . _bindingsByRootAndName , k = h [ g ] ; void 0 === k && ( k = { } , h [ g ] = k ) ; for ( h = 0 ; h !== e ; ++ h ) { var m = d [ h ] , n = m . name , p = k [ n ] ; if ( void 0 === p ) { p = f [ h ] ; if ( void 0 !== p ) { null === p . _cacheIndex && ( ++ p . referenceCount , this . _addInactiveBinding ( p , g , n ) ) ; continue } p = new Mg ( za . create ( c , n , b && b . _propertyBindings [ h ] . binding . parsedPath ) ,
m . ValueTypeName , m . getValueSize ( ) ) ; ++ p . referenceCount ; this . _addInactiveBinding ( p , g , n ) } f [ h ] = p ; a [ h ] . resultBuffer = p . buffer } } , _activateAction : function ( a ) { if ( ! this . _isActiveAction ( a ) ) { if ( null === a . _cacheIndex ) { var b = ( a . _localRoot || this . _root ) . uuid , c = a . _clip . uuid , d = this . _actionsByClip [ c ] ; this . _bindAction ( a , d && d . knownActions [ 0 ] ) ; this . _addInactiveAction ( a , c , b ) } b = a . _propertyBindings ; c = 0 ; for ( d = b . length ; c !== d ; ++ c ) { var e = b [ c ] ; 0 === e . useCount ++ && ( this . _lendBinding ( e ) , e . saveOriginalState ( ) ) } this . _lendAction ( a ) } } ,
_deactivateAction : function ( a ) { if ( this . _isActiveAction ( a ) ) { for ( var b = a . _propertyBindings , c = 0 , d = b . length ; c !== d ; ++ c ) { var e = b [ c ] ; 0 === -- e . useCount && ( e . restoreOriginalState ( ) , this . _takeBackBinding ( e ) ) } this . _takeBackAction ( a ) } } , _initMemoryManager : function ( ) { this . _actions = [ ] ; this . _nActiveActions = 0 ; this . _actionsByClip = { } ; this . _bindings = [ ] ; this . _nActiveBindings = 0 ; this . _bindingsByRootAndName = { } ; this . _controlInterpolants = [ ] ; this . _nActiveControlInterpolants = 0 ; var a = this ; this . stats = { actions : { get total ( ) { return a . _actions . length } ,
get inUse ( ) { return a . _nActiveActions } } , bindings : { get total ( ) { return a . _bindings . length } , get inUse ( ) { return a . _nActiveBindings } } , controlInterpolants : { get total ( ) { return a . _controlInterpolants . length } , get inUse ( ) { return a . _nActiveControlInterpolants } } } } , _isActiveAction : function ( a ) { a = a . _cacheIndex ; return null !== a && a < this . _nActiveActions } , _addInactiveAction : function ( a , b , c ) { var d = this . _actions , e = this . _actionsByClip , f = e [ b ] ; void 0 === f ? ( f = { knownActions : [ a ] , actionByRoot : { } } , a . _byClipCacheIndex = 0 , e [ b ] = f ) : ( b =
f . knownActions , a . _byClipCacheIndex = b . length , b . push ( a ) ) ; a . _cacheIndex = d . length ; d . push ( a ) ; f . actionByRoot [ c ] = a } , _removeInactiveAction : function ( a ) { var b = this . _actions , c = b [ b . length - 1 ] , d = a . _cacheIndex ; c . _cacheIndex = d ; b [ d ] = c ; b . pop ( ) ; a . _cacheIndex = null ; b = a . _clip . uuid ; c = this . _actionsByClip ; d = c [ b ] ; var e = d . knownActions , f = e [ e . length - 1 ] , g = a . _byClipCacheIndex ; f . _byClipCacheIndex = g ; e [ g ] = f ; e . pop ( ) ; a . _byClipCacheIndex = null ; delete d . actionByRoot [ ( a . _localRoot || this . _root ) . uuid ] ; 0 === e . length && delete c [ b ] ; this . _removeInactiveBindingsForAction ( a ) } ,
_removeInactiveBindingsForAction : function ( a ) { a = a . _propertyBindings ; for ( var b = 0 , c = a . length ; b !== c ; ++ b ) { var d = a [ b ] ; 0 === -- d . referenceCount && this . _removeInactiveBinding ( d ) } } , _lendAction : function ( a ) { var b = this . _actions , c = a . _cacheIndex , d = this . _nActiveActions ++ , e = b [ d ] ; a . _cacheIndex = d ; b [ d ] = a ; e . _cacheIndex = c ; b [ c ] = e } , _takeBackAction : function ( a ) { var b = this . _actions , c = a . _cacheIndex , d = -- this . _nActiveActions , e = b [ d ] ; a . _cacheIndex = d ; b [ d ] = a ; e . _cacheIndex = c ; b [ c ] = e } , _addInactiveBinding : function ( a , b , c ) { var d = this . _bindingsByRootAndName ,
e = d [ b ] , f = this . _bindings ; void 0 === e && ( e = { } , d [ b ] = e ) ; e [ c ] = a ; a . _cacheIndex = f . length ; f . push ( a ) } , _removeInactiveBinding : function ( a ) { var b = this . _bindings , c = a . binding , d = c . rootNode . uuid ; c = c . path ; var e = this . _bindingsByRootAndName , f = e [ d ] , g = b [ b . length - 1 ] ; a = a . _cacheIndex ; g . _cacheIndex = a ; b [ a ] = g ; b . pop ( ) ; delete f [ c ] ; 0 === Object . keys ( f ) . length && delete e [ d ] } , _lendBinding : function ( a ) { var b = this . _bindings , c = a . _cacheIndex , d = this . _nActiveBindings ++ , e = b [ d ] ; a . _cacheIndex = d ; b [ d ] = a ; e . _cacheIndex = c ; b [ c ] = e } , _takeBackBinding : function ( a ) { var b =
this . _bindings , c = a . _cacheIndex , d = -- this . _nActiveBindings , e = b [ d ] ; a . _cacheIndex = d ; b [ d ] = a ; e . _cacheIndex = c ; b [ c ] = e } , _lendControlInterpolant : function ( ) { var a = this . _controlInterpolants , b = this . _nActiveControlInterpolants ++ , c = a [ b ] ; void 0 === c && ( c = new le ( new Float32Array ( 2 ) , new Float32Array ( 2 ) , 1 , this . _controlInterpolantsResultBuffer ) , c . _ _cacheIndex = b , a [ b ] = c ) ; return c } , _takeBackControlInterpolant : function ( a ) { var b = this . _controlInterpolants , c = a . _ _cacheIndex , d = -- this . _nActiveControlInterpolants , e = b [ d ] ; a . _ _cacheIndex =
d ; b [ d ] = a ; e . _ _cacheIndex = c ; b [ c ] = e } , _controlInterpolantsResultBuffer : new Float32Array ( 1 ) , clipAction : function ( a , b ) { var c = b || this . _root , d = c . uuid ; c = "string" === typeof a ? Oa . findByName ( c , a ) : a ; a = null !== c ? c . uuid : a ; var e = this . _actionsByClip [ a ] , f = null ; if ( void 0 !== e ) { f = e . actionByRoot [ d ] ; if ( void 0 !== f ) return f ; f = e . knownActions [ 0 ] ; null === c && ( c = f . _clip ) } if ( null === c ) return null ; b = new hi ( this , c , b ) ; this . _bindAction ( b , f ) ; this . _addInactiveAction ( b , a , d ) ; return b } , existingAction : function ( a , b ) { var c = b || this . _root ; b = c . uuid ;
c = "string" === typeof a ? Oa . findByName ( c , a ) : a ; a = this . _actionsByClip [ c ? c . uuid : a ] ; return void 0 !== a ? a . actionByRoot [ b ] || null : null } , stopAllAction : function ( ) { for ( var a = this . _actions , b = this . _nActiveActions , c = this . _bindings , d = this . _nActiveBindings , e = this . _nActiveBindings = this . _nActiveActions = 0 ; e !== b ; ++ e ) a [ e ] . reset ( ) ; for ( e = 0 ; e !== d ; ++ e ) c [ e ] . useCount = 0 ; return this } , update : function ( a ) { a *= this . timeScale ; for ( var b = this . _actions , c = this . _nActiveActions , d = this . time += a , e = Math . sign ( a ) , f = this . _accuIndex ^= 1 , g = 0 ; g !== c ; ++ g ) b [ g ] . _update ( d ,
a , e , f ) ; a = this . _bindings ; b = this . _nActiveBindings ; for ( g = 0 ; g !== b ; ++ g ) a [ g ] . apply ( f ) ; return this } , setTime : function ( a ) { for ( var b = this . time = 0 ; b < this . _actions . length ; b ++ ) this . _actions [ b ] . time = 0 ; return this . update ( a ) } , getRoot : function ( ) { return this . _root } , uncacheClip : function ( a ) { var b = this . _actions ; a = a . uuid ; var c = this . _actionsByClip , d = c [ a ] ; if ( void 0 !== d ) { d = d . knownActions ; for ( var e = 0 , f = d . length ; e !== f ; ++ e ) { var g = d [ e ] ; this . _deactivateAction ( g ) ; var h = g . _cacheIndex , k = b [ b . length - 1 ] ; g . _cacheIndex = null ; g . _byClipCacheIndex =
null ; k . _cacheIndex = h ; b [ h ] = k ; b . pop ( ) ; this . _removeInactiveBindingsForAction ( g ) } delete c [ a ] } } , uncacheRoot : function ( a ) { a = a . uuid ; var b = this . _actionsByClip ; for ( d in b ) { var c = b [ d ] . actionByRoot [ a ] ; void 0 !== c && ( this . _deactivateAction ( c ) , this . _removeInactiveAction ( c ) ) } var d = this . _bindingsByRootAndName [ a ] ; if ( void 0 !== d ) for ( var e in d ) a = d [ e ] , a . restoreOriginalState ( ) , this . _removeInactiveBinding ( a ) } , uncacheAction : function ( a , b ) { a = this . existingAction ( a , b ) ; null !== a && ( this . _deactivateAction ( a ) , this . _removeInactiveAction ( a ) ) } } ) ;
wf . prototype . clone = function ( ) { return new wf ( void 0 === this . value . clone ? this . value : this . value . clone ( ) ) } ; Og . prototype = Object . assign ( Object . create ( pb . prototype ) , { constructor : Og , isInstancedInterleavedBuffer : ! 0 , copy : function ( a ) { pb . prototype . copy . call ( this , a ) ; this . meshPerAttribute = a . meshPerAttribute ; return this } } ) ; Object . assign ( ii . prototype , { linePrecision : 1 , set : function ( a , b ) { this . ray . set ( a , b ) } , setFromCamera : function ( a , b ) { b && b . isPerspectiveCamera ? ( this . ray . origin . setFromMatrixPosition ( b . matrixWorld ) , this . ray . direction . set ( a . x ,
a . y , . 5 ) . unproject ( b ) . sub ( this . ray . origin ) . normalize ( ) , this . camera = b ) : b && b . isOrthographicCamera ? ( this . ray . origin . set ( a . x , a . y , ( b . near + b . far ) / ( b . near - b . far ) ) . unproject ( b ) , this . ray . direction . set ( 0 , 0 , - 1 ) . transformDirection ( b . matrixWorld ) , this . camera = b ) : console . error ( "THREE.Raycaster: Unsupported camera type." ) } , intersectObject : function ( a , b , c ) { c = c || [ ] ; Pg ( a , this , c , b ) ; c . sort ( ji ) ; return c } , intersectObjects : function ( a , b , c ) { c = c || [ ] ; if ( ! 1 === Array . isArray ( a ) ) return console . warn ( "THREE.Raycaster.intersectObjects: objects is not an Array." ) ,
c ; for ( var d = 0 , e = a . length ; d < e ; d ++ ) Pg ( a [ d ] , this , c , b ) ; c . sort ( ji ) ; return c } } ) ; Object . assign ( ki . prototype , { set : function ( a , b , c ) { this . radius = a ; this . phi = b ; this . theta = c ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . radius = a . radius ; this . phi = a . phi ; this . theta = a . theta ; return this } , makeSafe : function ( ) { this . phi = Math . max ( 1E-6 , Math . min ( Math . PI - 1E-6 , this . phi ) ) ; return this } , setFromVector3 : function ( a ) { return this . setFromCartesianCoords ( a . x , a . y , a . z ) } , setFromCartesianCoords : function ( a ,
b , c ) { this . radius = Math . sqrt ( a * a + b * b + c * c ) ; 0 === this . radius ? this . phi = this . theta = 0 : ( this . theta = Math . atan2 ( a , c ) , this . phi = Math . acos ( R . clamp ( b / this . radius , - 1 , 1 ) ) ) ; return this } } ) ; Object . assign ( li . prototype , { set : function ( a , b , c ) { this . radius = a ; this . theta = b ; this . y = c ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . radius = a . radius ; this . theta = a . theta ; this . y = a . y ; return this } , setFromVector3 : function ( a ) { return this . setFromCartesianCoords ( a . x , a . y , a . z ) } , setFromCartesianCoords : function ( a ,
b , c ) { this . radius = Math . sqrt ( a * a + c * c ) ; this . theta = Math . atan2 ( a , c ) ; this . y = b ; return this } } ) ; var Pi = new B ; Object . assign ( Qg . prototype , { set : function ( a , b ) { this . min . copy ( a ) ; this . max . copy ( b ) ; return this } , setFromPoints : function ( a ) { this . makeEmpty ( ) ; for ( var b = 0 , c = a . length ; b < c ; b ++ ) this . expandByPoint ( a [ b ] ) ; return this } , setFromCenterAndSize : function ( a , b ) { b = Pi . copy ( b ) . multiplyScalar ( . 5 ) ; this . min . copy ( a ) . sub ( b ) ; this . max . copy ( a ) . add ( b ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . min . copy ( a . min ) ;
this . max . copy ( a . max ) ; return this } , makeEmpty : function ( ) { this . min . x = this . min . y = Infinity ; this . max . x = this . max . y = - Infinity ; return this } , isEmpty : function ( ) { return this . max . x < this . min . x || this . max . y < this . min . y } , getCenter : function ( a ) { void 0 === a && ( console . warn ( "THREE.Box2: .getCenter() target is now required" ) , a = new B ) ; return this . isEmpty ( ) ? a . set ( 0 , 0 ) : a . addVectors ( this . min , this . max ) . multiplyScalar ( . 5 ) } , getSize : function ( a ) { void 0 === a && ( console . warn ( "THREE.Box2: .getSize() target is now required" ) , a = new B ) ; return this . isEmpty ( ) ?
a . set ( 0 , 0 ) : a . subVectors ( this . max , this . min ) } , expandByPoint : function ( a ) { this . min . min ( a ) ; this . max . max ( a ) ; return this } , expandByVector : function ( a ) { this . min . sub ( a ) ; this . max . add ( a ) ; return this } , expandByScalar : function ( a ) { this . min . addScalar ( - a ) ; this . max . addScalar ( a ) ; return this } , containsPoint : function ( a ) { return a . x < this . min . x || a . x > this . max . x || a . y < this . min . y || a . y > this . max . y ? ! 1 : ! 0 } , containsBox : function ( a ) { return this . min . x <= a . min . x && a . max . x <= this . max . x && this . min . y <= a . min . y && a . max . y <= this . max . y } , getParameter : function ( a ,
b ) { void 0 === b && ( console . warn ( "THREE.Box2: .getParameter() target is now required" ) , b = new B ) ; return b . set ( ( a . x - this . min . x ) / ( this . max . x - this . min . x ) , ( a . y - this . min . y ) / ( this . max . y - this . min . y ) ) } , intersectsBox : function ( a ) { return a . max . x < this . min . x || a . min . x > this . max . x || a . max . y < this . min . y || a . min . y > this . max . y ? ! 1 : ! 0 } , clampPoint : function ( a , b ) { void 0 === b && ( console . warn ( "THREE.Box2: .clampPoint() target is now required" ) , b = new B ) ; return b . copy ( a ) . clamp ( this . min , this . max ) } , distanceToPoint : function ( a ) { return Pi . copy ( a ) . clamp ( this . min ,
this . max ) . sub ( a ) . length ( ) } , intersect : function ( a ) { this . min . max ( a . min ) ; this . max . min ( a . max ) ; return this } , union : function ( a ) { this . min . min ( a . min ) ; this . max . max ( a . max ) ; return this } , translate : function ( a ) { this . min . add ( a ) ; this . max . add ( a ) ; return this } , equals : function ( a ) { return a . min . equals ( this . min ) && a . max . equals ( this . max ) } } ) ; var Qi = new n , Uf = new n ; Object . assign ( Rg . prototype , { set : function ( a , b ) { this . start . copy ( a ) ; this . end . copy ( b ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } , copy : function ( a ) { this . start . copy ( a . start ) ;
this . end . copy ( a . end ) ; return this } , getCenter : function ( a ) { void 0 === a && ( console . warn ( "THREE.Line3: .getCenter() target is now required" ) , a = new n ) ; return a . addVectors ( this . start , this . end ) . multiplyScalar ( . 5 ) } , delta : function ( a ) { void 0 === a && ( console . warn ( "THREE.Line3: .delta() target is now required" ) , a = new n ) ; return a . subVectors ( this . end , this . start ) } , distanceSq : function ( ) { return this . start . distanceToSquared ( this . end ) } , distance : function ( ) { return this . start . distanceTo ( this . end ) } , at : function ( a , b ) { void 0 ===
b && ( console . warn ( "THREE.Line3: .at() target is now required" ) , b = new n ) ; return this . delta ( b ) . multiplyScalar ( a ) . add ( this . start ) } , closestPointToPointParameter : function ( a , b ) { Qi . subVectors ( a , this . start ) ; Uf . subVectors ( this . end , this . start ) ; a = Uf . dot ( Uf ) ; a = Uf . dot ( Qi ) / a ; b && ( a = R . clamp ( a , 0 , 1 ) ) ; return a } , closestPointToPoint : function ( a , b , c ) { a = this . closestPointToPointParameter ( a , b ) ; void 0 === c && ( console . warn ( "THREE.Line3: .closestPointToPoint() target is now required" ) , c = new n ) ; return this . delta ( c ) . multiplyScalar ( a ) . add ( this . start ) } ,
applyMatrix4 : function ( a ) { this . start . applyMatrix4 ( a ) ; this . end . applyMatrix4 ( a ) ; return this } , equals : function ( a ) { return a . start . equals ( this . start ) && a . end . equals ( this . end ) } } ) ; qe . prototype = Object . create ( y . prototype ) ; qe . prototype . constructor = qe ; qe . prototype . isImmediateRenderObject = ! 0 ; var lb = new n , Ab = new n , nh = new ca , Xk = [ "a" , "b" , "c" ] ; re . prototype = Object . create ( X . prototype ) ; re . prototype . constructor = re ; re . prototype . update = function ( ) { this . object . updateMatrixWorld ( ! 0 ) ; nh . getNormalMatrix ( this . object . matrixWorld ) ;
var a = this . object . matrixWorld , b = this . geometry . attributes . position , c = this . object . geometry ; if ( c && c . isGeometry ) for ( var d = c . vertices , e = c . faces , f = c = 0 , g = e . length ; f < g ; f ++ ) for ( var h = e [ f ] , k = 0 , m = h . vertexNormals . length ; k < m ; k ++ ) { var n = h . vertexNormals [ k ] ; lb . copy ( d [ h [ Xk [ k ] ] ] ) . applyMatrix4 ( a ) ; Ab . copy ( n ) . applyMatrix3 ( nh ) . normalize ( ) . multiplyScalar ( this . size ) . add ( lb ) ; b . setXYZ ( c , lb . x , lb . y , lb . z ) ; c += 1 ; b . setXYZ ( c , Ab . x , Ab . y , Ab . z ) ; c += 1 } else if ( c && c . isBufferGeometry ) for ( d = c . attributes . position , e = c . attributes . normal , k = c =
0 , m = d . count ; k < m ; k ++ ) lb . set ( d . getX ( k ) , d . getY ( k ) , d . getZ ( k ) ) . applyMatrix4 ( a ) , Ab . set ( e . getX ( k ) , e . getY ( k ) , e . getZ ( k ) ) , Ab . applyMatrix3 ( nh ) . normalize ( ) . multiplyScalar ( this . size ) . add ( lb ) , b . setXYZ ( c , lb . x , lb . y , lb . z ) , c += 1 , b . setXYZ ( c , Ab . x , Ab . y , Ab . z ) , c += 1 ; b . needsUpdate = ! 0 } ; var Ri = new n ; cd . prototype = Object . create ( y . prototype ) ; cd . prototype . constructor = cd ; cd . prototype . dispose = function ( ) { this . cone . geometry . dispose ( ) ; this . cone . material . dispose ( ) } ; cd . prototype . update = function ( ) { this . light . updateMatrixWorld ( ) ; var a = this . light . distance ?
this . light . distance : 1E3 , b = a * Math . tan ( this . light . angle ) ; this . cone . scale . set ( b , b , a ) ; Ri . setFromMatrixPosition ( this . light . target . matrixWorld ) ; this . cone . lookAt ( Ri ) ; void 0 !== this . color ? this . cone . material . color . set ( this . color ) : this . cone . material . color . copy ( this . light . color ) } ; var Ob = new n , Vf = new S , oh = new S ; dd . prototype = Object . create ( X . prototype ) ; dd . prototype . constructor = dd ; dd . prototype . updateMatrixWorld = function ( a ) { var b = this . bones , c = this . geometry , d = c . getAttribute ( "position" ) ; oh . getInverse ( this . root . matrixWorld ) ;
for ( var e = 0 , f = 0 ; e < b . length ; e ++ ) { var g = b [ e ] ; g . parent && g . parent . isBone && ( Vf . multiplyMatrices ( oh , g . matrixWorld ) , Ob . setFromMatrixPosition ( Vf ) , d . setXYZ ( f , Ob . x , Ob . y , Ob . z ) , Vf . multiplyMatrices ( oh , g . parent . matrixWorld ) , Ob . setFromMatrixPosition ( Vf ) , d . setXYZ ( f + 1 , Ob . x , Ob . y , Ob . z ) , f += 2 ) } c . getAttribute ( "position" ) . needsUpdate = ! 0 ; y . prototype . updateMatrixWorld . call ( this , a ) } ; ed . prototype = Object . create ( ja . prototype ) ; ed . prototype . constructor = ed ; ed . prototype . dispose = function ( ) { this . geometry . dispose ( ) ; this . material . dispose ( ) } ;
ed . prototype . update = function ( ) { void 0 !== this . color ? this . material . color . set ( this . color ) : this . material . color . copy ( this . light . color ) } ; fd . prototype = Object . create ( wa . prototype ) ; fd . prototype . constructor = fd ; fd . prototype . update = function ( ) { this . scale . set ( . 5 * this . light . width , . 5 * this . light . height , 1 ) ; if ( void 0 !== this . color ) this . material . color . set ( this . color ) , this . children [ 0 ] . material . color . set ( this . color ) ; else { this . material . color . copy ( this . light . color ) . multiplyScalar ( this . light . intensity ) ; var a = this . material . color ,
b = Math . max ( a . r , a . g , a . b ) ; 1 < b && a . multiplyScalar ( 1 / b ) ; this . children [ 0 ] . material . color . copy ( this . material . color ) } } ; fd . prototype . dispose = function ( ) { this . geometry . dispose ( ) ; this . material . dispose ( ) ; this . children [ 0 ] . geometry . dispose ( ) ; this . children [ 0 ] . material . dispose ( ) } ; var Yk = new n , Si = new H , Ti = new H ; gd . prototype = Object . create ( y . prototype ) ; gd . prototype . constructor = gd ; gd . prototype . dispose = function ( ) { this . children [ 0 ] . geometry . dispose ( ) ; this . children [ 0 ] . material . dispose ( ) } ; gd . prototype . update = function ( ) { var a =
this . children [ 0 ] ; if ( void 0 !== this . color ) this . material . color . set ( this . color ) ; else { var b = a . geometry . getAttribute ( "color" ) ; Si . copy ( this . light . color ) ; Ti . copy ( this . light . groundColor ) ; for ( var c = 0 , d = b . count ; c < d ; c ++ ) { var e = c < d / 2 ? Si : Ti ; b . setXYZ ( c , e . r , e . g , e . b ) } b . needsUpdate = ! 0 } a . lookAt ( Yk . setFromMatrixPosition ( this . light . matrixWorld ) . negate ( ) ) } ; hd . prototype = Object . create ( ja . prototype ) ; hd . prototype . constructor = hd ; hd . prototype . dispose = function ( ) { this . geometry . dispose ( ) ; this . material . dispose ( ) } ; hd . prototype . onBeforeRender =
function ( ) { this . position . copy ( this . lightProbe . position ) ; this . scale . set ( 1 , 1 , 1 ) . multiplyScalar ( this . size ) ; this . material . uniforms . intensity . value = this . lightProbe . intensity } ; xf . prototype = Object . assign ( Object . create ( X . prototype ) , { constructor : xf , copy : function ( a ) { X . prototype . copy . call ( this , a ) ; this . geometry . copy ( a . geometry ) ; this . material . copy ( a . material ) ; return this } , clone : function ( ) { return ( new this . constructor ) . copy ( this ) } } ) ; yf . prototype = Object . create ( X . prototype ) ; yf . prototype . constructor = yf ; id . prototype =
Object . create ( wa . prototype ) ; id . prototype . constructor = id ; id . prototype . update = function ( ) { function a ( a , b , d , e ) { d = ( b - a ) / d ; u . setXYZ ( k , 0 , 0 , 0 ) ; m ++ ; for ( n = a ; n < b ; n += d ) p = k + m , u . setXYZ ( p , Math . sin ( n ) * c , 0 , Math . cos ( n ) * c ) , u . setXYZ ( p + 1 , Math . sin ( Math . min ( n + d , b ) ) * c , 0 , Math . cos ( Math . min ( n + d , b ) ) * c ) , u . setXYZ ( p + 2 , 0 , 0 , 0 ) , m += 3 ; t . addGroup ( k , m , e ) ; k += m ; m = 0 } var b = this . audio , c = this . range , d = this . divisionsInnerAngle , e = this . divisionsOuterAngle , f = R . degToRad ( b . panner . coneInnerAngle ) ; b = R . degToRad ( b . panner . coneOuterAngle ) ; var g = f / 2 , h = b /
2 , k = 0 , m = 0 , n , p , t = this . geometry , u = t . attributes . position ; t . clearGroups ( ) ; a ( - h , - g , e , 0 ) ; a ( - g , g , d , 1 ) ; a ( g , h , e , 0 ) ; u . needsUpdate = ! 0 ; f === b && ( this . material [ 0 ] . visible = ! 1 ) } ; id . prototype . dispose = function ( ) { this . geometry . dispose ( ) ; this . material [ 0 ] . dispose ( ) ; this . material [ 1 ] . dispose ( ) } ; var He = new n , Wf = new n , Ui = new ca ; se . prototype = Object . create ( X . prototype ) ; se . prototype . constructor = se ; se . prototype . update = function ( ) { this . object . updateMatrixWorld ( ! 0 ) ; Ui . getNormalMatrix ( this . object . matrixWorld ) ; var a = this . object . matrixWorld ,
b = this . geometry . attributes . position , c = this . object . geometry , d = c . vertices ; c = c . faces ; for ( var e = 0 , f = 0 , g = c . length ; f < g ; f ++ ) { var h = c [ f ] , k = h . normal ; He . copy ( d [ h . a ] ) . add ( d [ h . b ] ) . add ( d [ h . c ] ) . divideScalar ( 3 ) . applyMatrix4 ( a ) ; Wf . copy ( k ) . applyMatrix3 ( Ui ) . normalize ( ) . multiplyScalar ( this . size ) . add ( He ) ; b . setXYZ ( e , He . x , He . y , He . z ) ; e += 1 ; b . setXYZ ( e , Wf . x , Wf . y , Wf . z ) ; e += 1 } b . needsUpdate = ! 0 } ; var Vi = new n , Xf = new n , Wi = new n ; jd . prototype = Object . create ( y . prototype ) ; jd . prototype . constructor = jd ; jd . prototype . dispose = function ( ) { this . lightPlane . geometry . dispose ( ) ;
this . lightPlane . material . dispose ( ) ; this . targetLine . geometry . dispose ( ) ; this . targetLine . material . dispose ( ) } ; jd . prototype . update = function ( ) { Vi . setFromMatrixPosition ( this . light . matrixWorld ) ; Xf . setFromMatrixPosition ( this . light . target . matrixWorld ) ; Wi . subVectors ( Xf , Vi ) ; this . lightPlane . lookAt ( Xf ) ; void 0 !== this . color ? ( this . lightPlane . material . color . set ( this . color ) , this . targetLine . material . color . set ( this . color ) ) : ( this . lightPlane . material . color . copy ( this . light . color ) , this . targetLine . material . color . copy ( this . light . color ) ) ;
this . targetLine . lookAt ( Xf ) ; this . targetLine . scale . z = Wi . length ( ) } ; var zf = new n , U = new cb ; te . prototype = Object . create ( X . prototype ) ; te . prototype . constructor = te ; te . prototype . update = function ( ) { var a = this . geometry , b = this . pointMap ; U . projectionMatrixInverse . copy ( this . camera . projectionMatrixInverse ) ; pa ( "c" , b , a , U , 0 , 0 , - 1 ) ; pa ( "t" , b , a , U , 0 , 0 , 1 ) ; pa ( "n1" , b , a , U , - 1 , - 1 , - 1 ) ; pa ( "n2" , b , a , U , 1 , - 1 , - 1 ) ; pa ( "n3" , b , a , U , - 1 , 1 , - 1 ) ; pa ( "n4" , b , a , U , 1 , 1 , - 1 ) ; pa ( "f1" , b , a , U , - 1 , - 1 , 1 ) ; pa ( "f2" , b , a , U , 1 , - 1 , 1 ) ; pa ( "f3" , b , a , U , - 1 , 1 , 1 ) ; pa ( "f4" , b , a ,
U , 1 , 1 , 1 ) ; pa ( "u1" , b , a , U , . 7 , 1.1 , - 1 ) ; pa ( "u2" , b , a , U , - . 7 , 1.1 , - 1 ) ; pa ( "u3" , b , a , U , 0 , 2 , - 1 ) ; pa ( "cf1" , b , a , U , - 1 , 0 , 1 ) ; pa ( "cf2" , b , a , U , 1 , 0 , 1 ) ; pa ( "cf3" , b , a , U , 0 , - 1 , 1 ) ; pa ( "cf4" , b , a , U , 0 , 1 , 1 ) ; pa ( "cn1" , b , a , U , - 1 , 0 , - 1 ) ; pa ( "cn2" , b , a , U , 1 , 0 , - 1 ) ; pa ( "cn3" , b , a , U , 0 , - 1 , - 1 ) ; pa ( "cn4" , b , a , U , 0 , 1 , - 1 ) ; a . getAttribute ( "position" ) . needsUpdate = ! 0 } ; var Yf = new Qa ; tb . prototype = Object . create ( X . prototype ) ; tb . prototype . constructor = tb ; tb . prototype . update = function ( a ) { void 0 !== a && console . warn ( "THREE.BoxHelper: .update() has no longer arguments." ) ;
void 0 !== this . object && Yf . setFromObject ( this . object ) ; if ( ! Yf . isEmpty ( ) ) { a = Yf . min ; var b = Yf . max , c = this . geometry . attributes . position , d = c . array ; d [ 0 ] = b . x ; d [ 1 ] = b . y ; d [ 2 ] = b . z ; d [ 3 ] = a . x ; d [ 4 ] = b . y ; d [ 5 ] = b . z ; d [ 6 ] = a . x ; d [ 7 ] = a . y ; d [ 8 ] = b . z ; d [ 9 ] = b . x ; d [ 10 ] = a . y ; d [ 11 ] = b . z ; d [ 12 ] = b . x ; d [ 13 ] = b . y ; d [ 14 ] = a . z ; d [ 15 ] = a . x ; d [ 16 ] = b . y ; d [ 17 ] = a . z ; d [ 18 ] = a . x ; d [ 19 ] = a . y ; d [ 20 ] = a . z ; d [ 21 ] = b . x ; d [ 22 ] = a . y ; d [ 23 ] = a . z ; c . needsUpdate = ! 0 ; this . geometry . computeBoundingSphere ( ) } } ; tb . prototype . setFromObject = function ( a ) { this . object = a ; this . update ( ) ; return this } ;
tb . prototype . copy = function ( a ) { X . prototype . copy . call ( this , a ) ; this . object = a . object ; return this } ; tb . prototype . clone = function ( ) { return ( new this . constructor ) . copy ( this ) } ; ue . prototype = Object . create ( X . prototype ) ; ue . prototype . constructor = ue ; ue . prototype . updateMatrixWorld = function ( a ) { var b = this . box ; b . isEmpty ( ) || ( b . getCenter ( this . position ) , b . getSize ( this . scale ) , this . scale . multiplyScalar ( . 5 ) , y . prototype . updateMatrixWorld . call ( this , a ) ) } ; ve . prototype = Object . create ( wa . prototype ) ; ve . prototype . constructor = ve ; ve . prototype . updateMatrixWorld =
function ( a ) { var b = - this . plane . constant ; 1E-8 > Math . abs ( b ) && ( b = 1E-8 ) ; this . scale . set ( . 5 * this . size , . 5 * this . size , b ) ; this . children [ 0 ] . material . side = 0 > b ? 1 : 0 ; this . lookAt ( this . plane . normal ) ; y . prototype . updateMatrixWorld . call ( this , a ) } ; var Xi = new n , Af , Sg ; ub . prototype = Object . create ( y . prototype ) ; ub . prototype . constructor = ub ; ub . prototype . setDirection = function ( a ) { . 99999 < a . y ? this . quaternion . set ( 0 , 0 , 0 , 1 ) : - . 99999 > a . y ? this . quaternion . set ( 1 , 0 , 0 , 0 ) : ( Xi . set ( a . z , 0 , - a . x ) . normalize ( ) , this . quaternion . setFromAxisAngle ( Xi , Math . acos ( a . y ) ) ) } ;
ub . prototype . setLength = function ( a , b , c ) { void 0 === b && ( b = . 2 * a ) ; void 0 === c && ( c = . 2 * b ) ; this . line . scale . set ( 1 , Math . max ( 1E-4 , a - b ) , 1 ) ; this . line . updateMatrix ( ) ; this . cone . scale . set ( c , b , c ) ; this . cone . position . y = a ; this . cone . updateMatrix ( ) } ; ub . prototype . setColor = function ( a ) { this . line . material . color . set ( a ) ; this . cone . material . color . set ( a ) } ; ub . prototype . copy = function ( a ) { y . prototype . copy . call ( this , a , ! 1 ) ; this . line . copy ( a . line ) ; this . cone . copy ( a . cone ) ; return this } ; ub . prototype . clone = function ( ) { return ( new this . constructor ) . copy ( this ) } ;
we . prototype = Object . create ( X . prototype ) ; we . prototype . constructor = we ; F . create = function ( a , b ) { console . log ( "THREE.Curve.create() has been deprecated" ) ; a . prototype = Object . create ( F . prototype ) ; a . prototype . constructor = a ; a . prototype . getPoint = b ; return a } ; Object . assign ( sb . prototype , { createPointsGeometry : function ( a ) { console . warn ( "THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead." ) ; a = this . getPoints ( a ) ; return this . createGeometry ( a ) } , createSpacedPointsGeometry : function ( a ) { console . warn ( "THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead." ) ;
a = this . getSpacedPoints ( a ) ; return this . createGeometry ( a ) } , createGeometry : function ( a ) { console . warn ( "THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead." ) ; for ( var b = new O , c = 0 , d = a . length ; c < d ; c ++ ) { var e = a [ c ] ; b . vertices . push ( new n ( e . x , e . y , e . z || 0 ) ) } return b } } ) ; Object . assign ( Za . prototype , { fromPoints : function ( a ) { console . warn ( "THREE.Path: .fromPoints() has been renamed to .setFromPoints()." ) ; return this . setFromPoints ( a ) } } ) ; ni . prototype = Object . create ( xa . prototype ) ;
oi . prototype = Object . create ( xa . prototype ) ; Tg . prototype = Object . create ( xa . prototype ) ; Object . assign ( Tg . prototype , { initFromArray : function ( ) { console . error ( "THREE.Spline: .initFromArray() has been removed." ) } , getControlPointsArray : function ( ) { console . error ( "THREE.Spline: .getControlPointsArray() has been removed." ) } , reparametrizeByArcLength : function ( ) { console . error ( "THREE.Spline: .reparametrizeByArcLength() has been removed." ) } } ) ; xf . prototype . setColors = function ( ) { console . error ( "THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead." ) } ;
dd . prototype . update = function ( ) { console . error ( "THREE.SkeletonHelper: update() no longer needs to be called." ) } ; Object . assign ( V . prototype , { extractUrlBase : function ( a ) { console . warn ( "THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead." ) ; return lh . extractUrlBase ( a ) } } ) ; V . Handlers = { add : function ( ) { console . error ( "THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead." ) } , get : function ( ) { console . error ( "THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead." ) } } ;
Object . assign ( tf . prototype , { setTexturePath : function ( a ) { console . warn ( "THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath()." ) ; return this . setResourcePath ( a ) } } ) ; Object . assign ( Qg . prototype , { center : function ( a ) { console . warn ( "THREE.Box2: .center() has been renamed to .getCenter()." ) ; return this . getCenter ( a ) } , empty : function ( ) { console . warn ( "THREE.Box2: .empty() has been renamed to .isEmpty()." ) ; return this . isEmpty ( ) } , isIntersectionBox : function ( a ) { console . warn ( "THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()." ) ;
return this . intersectsBox ( a ) } , size : function ( a ) { console . warn ( "THREE.Box2: .size() has been renamed to .getSize()." ) ; return this . getSize ( a ) } } ) ; Object . assign ( Qa . prototype , { center : function ( a ) { console . warn ( "THREE.Box3: .center() has been renamed to .getCenter()." ) ; return this . getCenter ( a ) } , empty : function ( ) { console . warn ( "THREE.Box3: .empty() has been renamed to .isEmpty()." ) ; return this . isEmpty ( ) } , isIntersectionBox : function ( a ) { console . warn ( "THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()." ) ;
return this . intersectsBox ( a ) } , isIntersectionSphere : function ( a ) { console . warn ( "THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()." ) ; return this . intersectsSphere ( a ) } , size : function ( a ) { console . warn ( "THREE.Box3: .size() has been renamed to .getSize()." ) ; return this . getSize ( a ) } } ) ; Rg . prototype . center = function ( a ) { console . warn ( "THREE.Line3: .center() has been renamed to .getCenter()." ) ; return this . getCenter ( a ) } ; Object . assign ( R , { random16 : function ( ) { console . warn ( "THREE.Math: .random16() has been deprecated. Use Math.random() instead." ) ;
return Math . random ( ) } , nearestPowerOfTwo : function ( a ) { console . warn ( "THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()." ) ; return R . floorPowerOfTwo ( a ) } , nextPowerOfTwo : function ( a ) { console . warn ( "THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()." ) ; return R . ceilPowerOfTwo ( a ) } } ) ; Object . assign ( ca . prototype , { flattenToArrayOffset : function ( a , b ) { console . warn ( "THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ) ; return this . toArray ( a , b ) } ,
multiplyVector3 : function ( a ) { console . warn ( "THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead." ) ; return a . applyMatrix3 ( this ) } , multiplyVector3Array : function ( ) { console . error ( "THREE.Matrix3: .multiplyVector3Array() has been removed." ) } , applyToBuffer : function ( a ) { console . warn ( "THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead." ) ; return this . applyToBufferAttribute ( a ) } , applyToVector3Array : function ( ) { console . error ( "THREE.Matrix3: .applyToVector3Array() has been removed." ) } } ) ;
Object . assign ( S . prototype , { extractPosition : function ( a ) { console . warn ( "THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()." ) ; return this . copyPosition ( a ) } , flattenToArrayOffset : function ( a , b ) { console . warn ( "THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ) ; return this . toArray ( a , b ) } , getPosition : function ( ) { console . warn ( "THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead." ) ; return ( new n ) . setFromMatrixColumn ( this ,
3 ) } , setRotationFromQuaternion : function ( a ) { console . warn ( "THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()." ) ; return this . makeRotationFromQuaternion ( a ) } , multiplyToArray : function ( ) { console . warn ( "THREE.Matrix4: .multiplyToArray() has been removed." ) } , multiplyVector3 : function ( a ) { console . warn ( "THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead." ) ; return a . applyMatrix4 ( this ) } , multiplyVector4 : function ( a ) { console . warn ( "THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead." ) ;
return a . applyMatrix4 ( this ) } , multiplyVector3Array : function ( ) { console . error ( "THREE.Matrix4: .multiplyVector3Array() has been removed." ) } , rotateAxis : function ( a ) { console . warn ( "THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead." ) ; a . transformDirection ( this ) } , crossVector : function ( a ) { console . warn ( "THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead." ) ; return a . applyMatrix4 ( this ) } , translate : function ( ) { console . error ( "THREE.Matrix4: .translate() has been removed." ) } ,
rotateX : function ( ) { console . error ( "THREE.Matrix4: .rotateX() has been removed." ) } , rotateY : function ( ) { console . error ( "THREE.Matrix4: .rotateY() has been removed." ) } , rotateZ : function ( ) { console . error ( "THREE.Matrix4: .rotateZ() has been removed." ) } , rotateByAxis : function ( ) { console . error ( "THREE.Matrix4: .rotateByAxis() has been removed." ) } , applyToBuffer : function ( a ) { console . warn ( "THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead." ) ; return this . applyToBufferAttribute ( a ) } ,
applyToVector3Array : function ( ) { console . error ( "THREE.Matrix4: .applyToVector3Array() has been removed." ) } , makeFrustum : function ( a , b , c , d , e , f ) { console . warn ( "THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead." ) ; return this . makePerspective ( a , b , d , c , e , f ) } } ) ; Ra . prototype . isIntersectionLine = function ( a ) { console . warn ( "THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()." ) ; return this . intersectsLine ( a ) } ; ua . prototype . multiplyVector3 =
function ( a ) { console . warn ( "THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead." ) ; return a . applyQuaternion ( this ) } ; Object . assign ( Rb . prototype , { isIntersectionBox : function ( a ) { console . warn ( "THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()." ) ; return this . intersectsBox ( a ) } , isIntersectionPlane : function ( a ) { console . warn ( "THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()." ) ; return this . intersectsPlane ( a ) } , isIntersectionSphere : function ( a ) { console . warn ( "THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()." ) ;
return this . intersectsSphere ( a ) } } ) ; Object . assign ( ma . prototype , { area : function ( ) { console . warn ( "THREE.Triangle: .area() has been renamed to .getArea()." ) ; return this . getArea ( ) } , barycoordFromPoint : function ( a , b ) { console . warn ( "THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()." ) ; return this . getBarycoord ( a , b ) } , midpoint : function ( a ) { console . warn ( "THREE.Triangle: .midpoint() has been renamed to .getMidpoint()." ) ; return this . getMidpoint ( a ) } , normal : function ( a ) { console . warn ( "THREE.Triangle: .normal() has been renamed to .getNormal()." ) ;
return this . getNormal ( a ) } , plane : function ( a ) { console . warn ( "THREE.Triangle: .plane() has been renamed to .getPlane()." ) ; return this . getPlane ( a ) } } ) ; Object . assign ( ma , { barycoordFromPoint : function ( a , b , c , d , e ) { console . warn ( "THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()." ) ; return ma . getBarycoord ( a , b , c , d , e ) } , normal : function ( a , b , c , d ) { console . warn ( "THREE.Triangle: .normal() has been renamed to .getNormal()." ) ; return ma . getNormal ( a , b , c , d ) } } ) ; Object . assign ( Ib . prototype , { extractAllPoints : function ( a ) { console . warn ( "THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead." ) ;
return this . extractPoints ( a ) } , extrude : function ( a ) { console . warn ( "THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead." ) ; return new dc ( this , a ) } , makeGeometry : function ( a ) { console . warn ( "THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead." ) ; return new ec ( this , a ) } } ) ; Object . assign ( B . prototype , { fromAttribute : function ( a , b , c ) { console . warn ( "THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()." ) ; return this . fromBufferAttribute ( a , b , c ) } , distanceToManhattan : function ( a ) { console . warn ( "THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()." ) ;
return this . manhattanDistanceTo ( a ) } , lengthManhattan : function ( ) { console . warn ( "THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()." ) ; return this . manhattanLength ( ) } } ) ; Object . assign ( n . prototype , { setEulerFromRotationMatrix : function ( ) { console . error ( "THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead." ) } , setEulerFromQuaternion : function ( ) { console . error ( "THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead." ) } ,
getPositionFromMatrix : function ( a ) { console . warn ( "THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()." ) ; return this . setFromMatrixPosition ( a ) } , getScaleFromMatrix : function ( a ) { console . warn ( "THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()." ) ; return this . setFromMatrixScale ( a ) } , getColumnFromMatrix : function ( a , b ) { console . warn ( "THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()." ) ; return this . setFromMatrixColumn ( b ,
a ) } , applyProjection : function ( a ) { console . warn ( "THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead." ) ; return this . applyMatrix4 ( a ) } , fromAttribute : function ( a , b , c ) { console . warn ( "THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()." ) ; return this . fromBufferAttribute ( a , b , c ) } , distanceToManhattan : function ( a ) { console . warn ( "THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()." ) ; return this . manhattanDistanceTo ( a ) } , lengthManhattan : function ( ) { console . warn ( "THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()." ) ;
return this . manhattanLength ( ) } } ) ; Object . assign ( ba . prototype , { fromAttribute : function ( a , b , c ) { console . warn ( "THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()." ) ; return this . fromBufferAttribute ( a , b , c ) } , lengthManhattan : function ( ) { console . warn ( "THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()." ) ; return this . manhattanLength ( ) } } ) ; Object . assign ( O . prototype , { computeTangents : function ( ) { console . error ( "THREE.Geometry: .computeTangents() has been removed." ) } , computeLineDistances : function ( ) { console . error ( "THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead." ) } } ) ;
Object . assign ( y . prototype , { getChildByName : function ( a ) { console . warn ( "THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()." ) ; return this . getObjectByName ( a ) } , renderDepth : function ( ) { console . warn ( "THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead." ) } , translate : function ( a , b ) { console . warn ( "THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead." ) ; return this . translateOnAxis ( b , a ) } , getWorldRotation : function ( ) { console . error ( "THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead." ) } } ) ;
Object . defineProperties ( y . prototype , { eulerOrder : { get : function ( ) { console . warn ( "THREE.Object3D: .eulerOrder is now .rotation.order." ) ; return this . rotation . order } , set : function ( a ) { console . warn ( "THREE.Object3D: .eulerOrder is now .rotation.order." ) ; this . rotation . order = a } } , useQuaternion : { get : function ( ) { console . warn ( "THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default." ) } , set : function ( ) { console . warn ( "THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default." ) } } } ) ;
Object . defineProperties ( Od . prototype , { objects : { get : function ( ) { console . warn ( "THREE.LOD: .objects has been renamed to .levels." ) ; return this . levels } } } ) ; Object . defineProperty ( Ve . prototype , "useVertexTexture" , { get : function ( ) { console . warn ( "THREE.Skeleton: useVertexTexture has been removed." ) } , set : function ( ) { console . warn ( "THREE.Skeleton: useVertexTexture has been removed." ) } } ) ; Pd . prototype . initBones = function ( ) { console . error ( "THREE.SkinnedMesh: initBones() has been removed." ) } ; Object . defineProperty ( F . prototype ,
"__arcLengthDivisions" , { get : function ( ) { console . warn ( "THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions." ) ; return this . arcLengthDivisions } , set : function ( a ) { console . warn ( "THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions." ) ; this . arcLengthDivisions = a } } ) ; da . prototype . setLens = function ( a , b ) { console . warn ( "THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup." ) ; void 0 !== b && ( this . filmGauge = b ) ; this . setFocalLength ( a ) } ; Object . defineProperties ( T . prototype ,
2019-08-08 10:52:06 +08:00
{ onlyShadow : { set : function ( ) { console . warn ( "THREE.Light: .onlyShadow has been removed." ) } } , shadowCameraFov : { set : function ( a ) { console . warn ( "THREE.Light: .shadowCameraFov is now .shadow.camera.fov." ) ; this . shadow . camera . fov = a } } , shadowCameraLeft : { set : function ( a ) { console . warn ( "THREE.Light: .shadowCameraLeft is now .shadow.camera.left." ) ; this . shadow . camera . left = a } } , shadowCameraRight : { set : function ( a ) { console . warn ( "THREE.Light: .shadowCameraRight is now .shadow.camera.right." ) ; this . shadow . camera . right = a } } , shadowCameraTop : { set : function ( a ) { console . warn ( "THREE.Light: .shadowCameraTop is now .shadow.camera.top." ) ;
this . shadow . camera . top = a } } , shadowCameraBottom : { set : function ( a ) { console . warn ( "THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom." ) ; this . shadow . camera . bottom = a } } , shadowCameraNear : { set : function ( a ) { console . warn ( "THREE.Light: .shadowCameraNear is now .shadow.camera.near." ) ; this . shadow . camera . near = a } } , shadowCameraFar : { set : function ( a ) { console . warn ( "THREE.Light: .shadowCameraFar is now .shadow.camera.far." ) ; this . shadow . camera . far = a } } , shadowCameraVisible : { set : function ( ) { console . warn ( "THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead." ) } } ,
2019-12-11 10:47:24 +08:00
shadowBias : { set : function ( a ) { console . warn ( "THREE.Light: .shadowBias is now .shadow.bias." ) ; this . shadow . bias = a } } , shadowDarkness : { set : function ( ) { console . warn ( "THREE.Light: .shadowDarkness has been removed." ) } } , shadowMapWidth : { set : function ( a ) { console . warn ( "THREE.Light: .shadowMapWidth is now .shadow.mapSize.width." ) ; this . shadow . mapSize . width = a } } , shadowMapHeight : { set : function ( a ) { console . warn ( "THREE.Light: .shadowMapHeight is now .shadow.mapSize.height." ) ; this . shadow . mapSize . height = a } } } ) ; Object . defineProperties ( N . prototype ,
{ length : { get : function ( ) { console . warn ( "THREE.BufferAttribute: .length has been deprecated. Use .count instead." ) ; return this . array . length } } , dynamic : { get : function ( ) { console . warn ( "THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead." ) ; return 35048 === this . usage } , set : function ( ) { console . warn ( "THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead." ) ; this . setUsage ( 35048 ) } } } ) ; Object . assign ( N . prototype , { setDynamic : function ( a ) { console . warn ( "THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead." ) ;
this . setUsage ( ! 0 === a ? 35048 : 35044 ) ; return this } , copyIndicesArray : function ( ) { console . error ( "THREE.BufferAttribute: .copyIndicesArray() has been removed." ) } , setArray : function ( ) { console . error ( "THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers" ) } } ) ; Object . assign ( E . prototype , { addIndex : function ( a ) { console . warn ( "THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()." ) ; this . setIndex ( a ) } , addAttribute : function ( a , b , c ) { console . warn ( "THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()." ) ;
return b && b . isBufferAttribute || b && b . isInterleavedBufferAttribute ? "index" === a ? ( console . warn ( "THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute." ) , this . setIndex ( b ) , this ) : this . setAttribute ( a , b ) : ( console . warn ( "THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )." ) , this . setAttribute ( a , new N ( b , c ) ) ) } , addDrawCall : function ( a , b , c ) { void 0 !== c && console . warn ( "THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset." ) ; console . warn ( "THREE.BufferGeometry: .addDrawCall() is now .addGroup()." ) ;
this . addGroup ( a , b ) } , clearDrawCalls : function ( ) { console . warn ( "THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()." ) ; this . clearGroups ( ) } , computeTangents : function ( ) { console . warn ( "THREE.BufferGeometry: .computeTangents() has been removed." ) } , computeOffsets : function ( ) { console . warn ( "THREE.BufferGeometry: .computeOffsets() has been removed." ) } , removeAttribute : function ( a ) { console . warn ( "THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()." ) ; return this . deleteAttribute ( a ) } } ) ;
Object . defineProperties ( E . prototype , { drawcalls : { get : function ( ) { console . error ( "THREE.BufferGeometry: .drawcalls has been renamed to .groups." ) ; return this . groups } } , offsets : { get : function ( ) { console . warn ( "THREE.BufferGeometry: .offsets has been renamed to .groups." ) ; return this . groups } } } ) ; Object . defineProperties ( pb . prototype , { dynamic : { get : function ( ) { console . warn ( "THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead." ) ; return 35048 === this . usage } , set : function ( a ) { console . warn ( "THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead." ) ;
this . setUsage ( a ) } } } ) ; Object . assign ( pb . prototype , { setDynamic : function ( a ) { console . warn ( "THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead." ) ; this . setUsage ( ! 0 === a ? 35048 : 35044 ) ; return this } , setArray : function ( ) { console . error ( "THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers" ) } } ) ; Object . assign ( eb . prototype , { getArrays : function ( ) { console . error ( "THREE.ExtrudeBufferGeometry: .getArrays() has been removed." ) } ,
addShapeList : function ( ) { console . error ( "THREE.ExtrudeBufferGeometry: .addShapeList() has been removed." ) } , addShape : function ( ) { console . error ( "THREE.ExtrudeBufferGeometry: .addShape() has been removed." ) } } ) ; Object . defineProperties ( wf . prototype , { dynamic : { set : function ( ) { console . warn ( "THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead." ) } } , onUpdate : { value : function ( ) { console . warn ( "THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead." ) ; return this } } } ) ;
Object . defineProperties ( C . prototype , { wrapAround : { get : function ( ) { console . warn ( "THREE.Material: .wrapAround has been removed." ) } , set : function ( ) { console . warn ( "THREE.Material: .wrapAround has been removed." ) } } , overdraw : { get : function ( ) { console . warn ( "THREE.Material: .overdraw has been removed." ) } , set : function ( ) { console . warn ( "THREE.Material: .overdraw has been removed." ) } } , wrapRGB : { get : function ( ) { console . warn ( "THREE.Material: .wrapRGB has been removed." ) ; return new H } } , shading : { get : function ( ) { console . error ( "THREE." +
this . type + ": .shading has been removed. Use the boolean .flatShading instead." ) } , set : function ( a ) { console . warn ( "THREE." + this . type + ": .shading has been removed. Use the boolean .flatShading instead." ) ; this . flatShading = 1 === a } } , stencilMask : { get : function ( ) { console . warn ( "THREE." + this . type + ": .stencilMask has been removed. Use .stencilFuncMask instead." ) ; return this . stencilFuncMask } , set : function ( a ) { console . warn ( "THREE." + this . type + ": .stencilMask has been removed. Use .stencilFuncMask instead." ) ; this . stencilFuncMask =
a } } } ) ; Object . defineProperties ( Ua . prototype , { metal : { get : function ( ) { console . warn ( "THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead." ) ; return ! 1 } , set : function ( ) { console . warn ( "THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead" ) } } } ) ; Object . defineProperties ( na . prototype , { derivatives : { get : function ( ) { console . warn ( "THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives." ) ; return this . extensions . derivatives } ,
set : function ( a ) { console . warn ( "THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives." ) ; this . extensions . derivatives = a } } } ) ; Object . assign ( pg . prototype , { clearTarget : function ( a , b , c , d ) { console . warn ( "THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead." ) ; this . setRenderTarget ( a ) ; this . clear ( b , c , d ) } , animate : function ( a ) { console . warn ( "THREE.WebGLRenderer: .animate() is now .setAnimationLoop()." ) ; this . setAnimationLoop ( a ) } , getCurrentRenderTarget : function ( ) { console . warn ( "THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()." ) ;
return this . getRenderTarget ( ) } , getMaxAnisotropy : function ( ) { console . warn ( "THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()." ) ; return this . capabilities . getMaxAnisotropy ( ) } , getPrecision : function ( ) { console . warn ( "THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision." ) ; return this . capabilities . precision } , resetGLState : function ( ) { console . warn ( "THREE.WebGLRenderer: .resetGLState() is now .state.reset()." ) ; return this . state . reset ( ) } , supportsFloatTextures : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )." ) ;
return this . extensions . get ( "OES_texture_float" ) } , supportsHalfFloatTextures : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )." ) ; return this . extensions . get ( "OES_texture_half_float" ) } , supportsStandardDerivatives : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )." ) ; return this . extensions . get ( "OES_standard_derivatives" ) } , supportsCompressedTextureS3TC : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )." ) ;
return this . extensions . get ( "WEBGL_compressed_texture_s3tc" ) } , supportsCompressedTexturePVRTC : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )." ) ; return this . extensions . get ( "WEBGL_compressed_texture_pvrtc" ) } , supportsBlendMinMax : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )." ) ; return this . extensions . get ( "EXT_blend_minmax" ) } , supportsVertexTextures : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures." ) ;
return this . capabilities . vertexTextures } , supportsInstancedArrays : function ( ) { console . warn ( "THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )." ) ; return this . extensions . get ( "ANGLE_instanced_arrays" ) } , enableScissorTest : function ( a ) { console . warn ( "THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()." ) ; this . setScissorTest ( a ) } , initMaterial : function ( ) { console . warn ( "THREE.WebGLRenderer: .initMaterial() has been removed." ) } , addPrePlugin : function ( ) { console . warn ( "THREE.WebGLRenderer: .addPrePlugin() has been removed." ) } ,
addPostPlugin : function ( ) { console . warn ( "THREE.WebGLRenderer: .addPostPlugin() has been removed." ) } , updateShadowMap : function ( ) { console . warn ( "THREE.WebGLRenderer: .updateShadowMap() has been removed." ) } , setFaceCulling : function ( ) { console . warn ( "THREE.WebGLRenderer: .setFaceCulling() has been removed." ) } , allocTextureUnit : function ( ) { console . warn ( "THREE.WebGLRenderer: .allocTextureUnit() has been removed." ) } , setTexture : function ( ) { console . warn ( "THREE.WebGLRenderer: .setTexture() has been removed." ) } , setTexture2D : function ( ) { console . warn ( "THREE.WebGLRenderer: .setTexture2D() has been removed." ) } ,
setTextureCube : function ( ) { console . warn ( "THREE.WebGLRenderer: .setTextureCube() has been removed." ) } , getActiveMipMapLevel : function ( ) { console . warn ( "THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()." ) ; return this . getActiveMipmapLevel ( ) } } ) ; Object . defineProperties ( pg . prototype , { shadowMapEnabled : { get : function ( ) { return this . shadowMap . enabled } , set : function ( a ) { console . warn ( "THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled." ) ; this . shadowMap . enabled = a } } , shadowMapType : { get : function ( ) { return this . shadowMap . type } ,
set : function ( a ) { console . warn ( "THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type." ) ; this . shadowMap . type = a } } , shadowMapCullFace : { get : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead." ) } , set : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead." ) } } , context : { get : function ( ) { console . warn ( "THREE.WebGLRenderer: .context has been removed. Use .getContext() instead." ) ; return this . getContext ( ) } } } ) ;
Object . defineProperties ( Mh . prototype , { cullFace : { get : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead." ) } , set : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead." ) } } , renderReverseSided : { get : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead." ) } , set : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead." ) } } ,
renderSingleSided : { get : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead." ) } , set : function ( ) { console . warn ( "THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead." ) } } } ) ; Object . defineProperties ( Bb . prototype , { activeCubeFace : { set : function ( ) { console . warn ( "THREE.WebGLRenderTargetCube: .activeCubeFace has been removed. It is now the second parameter of WebGLRenderer.setRenderTarget()." ) } } ,
activeMipMapLevel : { set : function ( ) { console . warn ( "THREE.WebGLRenderTargetCube: .activeMipMapLevel has been removed. It is now the third parameter of WebGLRenderer.setRenderTarget()." ) } } } ) ; Object . defineProperties ( la . prototype , { wrapS : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS." ) ; return this . texture . wrapS } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS." ) ; this . texture . wrapS = a } } , wrapT : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT." ) ;
return this . texture . wrapT } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT." ) ; this . texture . wrapT = a } } , magFilter : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter." ) ; return this . texture . magFilter } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter." ) ; this . texture . magFilter = a } } , minFilter : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter." ) ; return this . texture . minFilter } ,
set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter." ) ; this . texture . minFilter = a } } , anisotropy : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy." ) ; return this . texture . anisotropy } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy." ) ; this . texture . anisotropy = a } } , offset : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .offset is now .texture.offset." ) ; return this . texture . offset } ,
set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .offset is now .texture.offset." ) ; this . texture . offset = a } } , repeat : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .repeat is now .texture.repeat." ) ; return this . texture . repeat } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .repeat is now .texture.repeat." ) ; this . texture . repeat = a } } , format : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .format is now .texture.format." ) ; return this . texture . format } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .format is now .texture.format." ) ;
this . texture . format = a } } , type : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .type is now .texture.type." ) ; return this . texture . type } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .type is now .texture.type." ) ; this . texture . type = a } } , generateMipmaps : { get : function ( ) { console . warn ( "THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps." ) ; return this . texture . generateMipmaps } , set : function ( a ) { console . warn ( "THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps." ) ;
this . texture . generateMipmaps = a } } } ) ; Object . defineProperties ( og . prototype , { standing : { set : function ( ) { console . warn ( "THREE.WebVRManager: .standing has been removed." ) } } , userHeight : { set : function ( ) { console . warn ( "THREE.WebVRManager: .userHeight has been removed." ) } } } ) ; Object . defineProperties ( bd . prototype , { load : { value : function ( a ) { console . warn ( "THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead." ) ; var b = this ; ( new uf ) . load ( a , function ( a ) { b . setBuffer ( a ) } ) ; return this } } , startTime : { set : function ( ) { console . warn ( "THREE.Audio: .startTime is now .play( delay )." ) } } } ) ;
Lg . prototype . getData = function ( ) { console . warn ( "THREE.AudioAnalyser: .getData() is now .getFrequencyData()." ) ; return this . getFrequencyData ( ) } ; Ac . prototype . updateCubeMap = function ( a , b ) { console . warn ( "THREE.CubeCamera: .updateCubeMap() is now .update()." ) ; return this . update ( a , b ) } ; Jb . crossOrigin = void 0 ; Jb . loadTexture = function ( a , b , c , d ) { console . warn ( "THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead." ) ; var e = new ff ; e . setCrossOrigin ( this . crossOrigin ) ; a = e . load ( a , c , void 0 , d ) ;
b && ( a . mapping = b ) ; return a } ; Jb . loadTextureCube = function ( a , b , c , d ) { console . warn ( "THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead." ) ; var e = new ef ; e . setCrossOrigin ( this . crossOrigin ) ; a = e . load ( a , c , void 0 , d ) ; b && ( a . mapping = b ) ; return a } ; Jb . loadCompressedTexture = function ( ) { console . error ( "THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead." ) } ; Jb . loadCompressedTextureCube = function ( ) { console . error ( "THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead." ) } ;
"undefined" !== typeof _ _THREE _DEVTOOLS _ _ && _ _THREE _DEVTOOLS _ _ . dispatchEvent ( new CustomEvent ( "register" , { detail : { revision : "111" } } ) ) ; k . ACESFilmicToneMapping = 5 ; k . AddEquation = 100 ; k . AddOperation = 2 ; k . AdditiveBlending = 2 ; k . AlphaFormat = 1021 ; k . AlwaysDepth = 1 ; k . AlwaysStencilFunc = 519 ; k . AmbientLight = nf ; k . AmbientLightProbe = Gg ; k . AnimationClip = Oa ; k . AnimationLoader = xg ; k . AnimationMixer = Ng ; k . AnimationObjectGroup = gi ; k . AnimationUtils = sa ; k . ArcCurve = ad ; k . ArrayCamera = Kd ; k . ArrowHelper = ub ; k . Audio = bd ; k . AudioAnalyser = Lg ; k . AudioContext =
Jg ; k . AudioListener = Ig ; k . AudioLoader = uf ; k . AxesHelper = we ; k . AxisHelper = function ( a ) { console . warn ( "THREE.AxisHelper has been renamed to THREE.AxesHelper." ) ; return new we ( a ) } ; k . BackSide = 1 ; k . BasicDepthPacking = 3200 ; k . BasicShadowMap = 0 ; k . BinaryTextureLoader = function ( a ) { console . warn ( "THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader." ) ; return new df ( a ) } ; k . Bone = qg ; k . BooleanKeyframeTrack = $e ; k . BoundingBoxHelper = function ( a , b ) { console . warn ( "THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead." ) ;
return new tb ( a , b ) } ; k . Box2 = Qg ; k . Box3 = Qa ; k . Box3Helper = ue ; k . BoxBufferGeometry = Gd ; k . BoxGeometry = fh ; k . BoxHelper = tb ; k . BufferAttribute = N ; k . BufferGeometry = E ; k . BufferGeometryLoader = sf ; k . ByteType = 1010 ; k . Cache = rc ; k . Camera = cb ; k . CameraHelper = te ; k . CanvasRenderer = function ( ) { console . error ( "THREE.CanvasRenderer has been removed" ) } ; k . CanvasTexture = Qd ; k . CatmullRomCurve3 = xa ; k . CineonToneMapping = 4 ; k . CircleBufferGeometry = Wc ; k . CircleGeometry = ke ; k . ClampToEdgeWrapping = 1001 ; k . Clock = Hg ; k . ClosedSplineCurve3 = ni ; k . Color = H ; k . ColorKeyframeTrack =
af ; k . CompressedTexture = Jc ; k . CompressedTextureLoader = yg ; k . ConeBufferGeometry = je ; k . ConeGeometry = ie ; k . CubeCamera = Ac ; k . CubeGeometry = fh ; k . CubeReflectionMapping = 301 ; k . CubeRefractionMapping = 302 ; k . CubeTexture = nb ; k . CubeTextureLoader = ef ; k . CubeUVReflectionMapping = 306 ; k . CubeUVRefractionMapping = 307 ; k . CubicBezierCurve = Va ; k . CubicBezierCurve3 = gb ; k . CubicInterpolant = Ye ; k . CullFaceBack = 1 ; k . CullFaceFront = 2 ; k . CullFaceFrontBack = 3 ; k . CullFaceNone = 0 ; k . Curve = F ; k . CurvePath = sb ; k . CustomBlending = 5 ; k . CylinderBufferGeometry = rb ; k . CylinderGeometry =
gc ; k . Cylindrical = li ; k . DataTexture = Yb ; k . DataTexture2DArray = Bc ; k . DataTexture3D = Cc ; k . DataTextureLoader = df ; k . DecrementStencilOp = 7683 ; k . DecrementWrapStencilOp = 34056 ; k . DefaultLoadingManager = ci ; k . DepthFormat = 1026 ; k . DepthStencilFormat = 1027 ; k . DepthTexture = Rd ; k . DirectionalLight = mf ; k . DirectionalLightHelper = jd ; k . DirectionalLightShadow = lf ; k . DiscreteInterpolant = Ze ; k . DodecahedronBufferGeometry = Oc ; k . DodecahedronGeometry = Xd ; k . DoubleSide = 2 ; k . DstAlphaFactor = 206 ; k . DstColorFactor = 208 ; k . DynamicBufferAttribute = function ( a ,
b ) { console . warn ( "THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead." ) ; return ( new N ( a , b ) ) . setDynamic ( ! 0 ) } ; k . DynamicCopyUsage = 35050 ; k . DynamicDrawUsage = 35048 ; k . DynamicReadUsage = 35049 ; k . EdgesGeometry = Vc ; k . EdgesHelper = function ( a , b ) { console . warn ( "THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead." ) ; return new X ( new Vc ( a . geometry ) , new P ( { color : void 0 !== b ? b : 16777215 } ) ) } ; k . EllipseCurve = Ja ; k . EqualDepth = 4 ; k . EqualStencilFunc = 514 ; k . EquirectangularReflectionMapping =
303 ; k . EquirectangularRefractionMapping = 304 ; k . Euler = Pb ; k . EventDispatcher = Aa ; k . ExtrudeBufferGeometry = eb ; k . ExtrudeGeometry = dc ; k . Face3 = wc ; k . Face4 = function ( a , b , c , d , e , f , g ) { console . warn ( "THREE.Face4 has been removed. A THREE.Face3 will be created instead." ) ; return new wc ( a , b , c , e , f , g ) } ; k . FaceColors = 1 ; k . FaceNormalsHelper = se ; k . FileLoader = Pa ; k . FlatShading = 1 ; k . Float32Attribute = function ( a , b ) { console . warn ( "THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead." ) ; return new D ( a ,
b ) } ; k . Float32BufferAttribute = D ; k . Float64Attribute = function ( a , b ) { console . warn ( "THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead." ) ; return new Cd ( a , b ) } ; k . Float64BufferAttribute = Cd ; k . FloatType = 1015 ; k . Fog = Te ; k . FogExp2 = Se ; k . Font = Dg ; k . FontLoader = Eg ; k . FrontFaceDirectionCCW = 1 ; k . FrontFaceDirectionCW = 0 ; k . FrontSide = 0 ; k . Frustum = Ed ; k . GammaEncoding = 3007 ; k . Geometry = O ; k . GeometryUtils = { merge : function ( a , b , c ) { console . warn ( "THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead." ) ;
if ( b . isMesh ) { b . matrixAutoUpdate && b . updateMatrix ( ) ; var d = b . matrix ; b = b . geometry } a . merge ( b , d , c ) } , center : function ( a ) { console . warn ( "THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead." ) ; return a . center ( ) } } ; k . GreaterDepth = 6 ; k . GreaterEqualDepth = 5 ; k . GreaterEqualStencilFunc = 518 ; k . GreaterStencilFunc = 516 ; k . GridHelper = xf ; k . Group = Fc ; k . HalfFloatType = 1016 ; k . HemisphereLight = gf ; k . HemisphereLightHelper = gd ; k . HemisphereLightProbe = Fg ; k . IcosahedronBufferGeometry = Nc ; k . IcosahedronGeometry =
Wd ; k . ImageBitmapLoader = Bg ; k . ImageLoader = $c ; k . ImageUtils = Jb ; k . ImmediateRenderObject = qe ; k . IncrementStencilOp = 7682 ; k . IncrementWrapStencilOp = 34055 ; k . InstancedBufferAttribute = rf ; k . InstancedBufferGeometry = qf ; k . InstancedInterleavedBuffer = Og ; k . InstancedMesh = We ; k . Int16Attribute = function ( a , b ) { console . warn ( "THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead." ) ; return new Ad ( a , b ) } ; k . Int16BufferAttribute = Ad ; k . Int32Attribute = function ( a , b ) { console . warn ( "THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead." ) ;
return new Bd ( a , b ) } ; k . Int32BufferAttribute = Bd ; k . Int8Attribute = function ( a , b ) { console . warn ( "THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead." ) ; return new xd ( a , b ) } ; k . Int8BufferAttribute = xd ; k . IntType = 1013 ; k . InterleavedBuffer = pb ; k . InterleavedBufferAttribute = Ld ; k . Interpolant = Ia ; k . InterpolateDiscrete = 2300 ; k . InterpolateLinear = 2301 ; k . InterpolateSmooth = 2302 ; k . InvertStencilOp = 5386 ; k . JSONLoader = function ( ) { console . error ( "THREE.JSONLoader has been removed." ) } ; k . KeepStencilOp = 7680 ;
k . KeyframeTrack = oa ; k . LOD = Od ; k . LatheBufferGeometry = Uc ; k . LatheGeometry = he ; k . Layers = $f ; k . LensFlare = function ( ) { console . error ( "THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js" ) } ; k . LessDepth = 2 ; k . LessEqualDepth = 3 ; k . LessEqualStencilFunc = 515 ; k . LessStencilFunc = 513 ; k . Light = T ; k . LightProbe = $a ; k . LightProbeHelper = hd ; k . LightShadow = ib ; k . Line = wa ; k . Line3 = Rg ; k . LineBasicMaterial = P ; k . LineCurve = ya ; k . LineCurve3 = Wa ; k . LineDashedMaterial = nc ; k . LineLoop = Xe ; k . LinePieces = 1 ; k . LineSegments = X ; k . LineStrip = 0 ; k . LinearEncoding =
3E3 ; k . LinearFilter = 1006 ; k . LinearInterpolant = le ; k . LinearMipMapLinearFilter = 1008 ; k . LinearMipMapNearestFilter = 1007 ; k . LinearMipmapLinearFilter = 1008 ; k . LinearMipmapNearestFilter = 1007 ; k . LinearToneMapping = 1 ; k . Loader = V ; k . LoaderUtils = lh ; k . LoadingManager = wg ; k . LogLuvEncoding = 3003 ; k . LoopOnce = 2200 ; k . LoopPingPong = 2202 ; k . LoopRepeat = 2201 ; k . LuminanceAlphaFormat = 1025 ; k . LuminanceFormat = 1024 ; k . MOUSE = { LEFT : 0 , MIDDLE : 1 , RIGHT : 2 , ROTATE : 0 , DOLLY : 1 , PAN : 2 } ; k . Material = C ; k . MaterialLoader = pf ; k . Math = R ; k . Matrix3 = ca ; k . Matrix4 = S ; k . MaxEquation =
104 ; k . Mesh = ja ; k . MeshBasicMaterial = Ga ; k . MeshDepthMaterial = Db ; k . MeshDistanceMaterial = Eb ; k . MeshFaceMaterial = function ( a ) { console . warn ( "THREE.MeshFaceMaterial has been removed. Use an Array instead." ) ; return a } ; k . MeshLambertMaterial = lc ; k . MeshMatcapMaterial = mc ; k . MeshNormalMaterial = kc ; k . MeshPhongMaterial = Ua ; k . MeshPhysicalMaterial = ic ; k . MeshStandardMaterial = fb ; k . MeshToonMaterial = jc ; k . MinEquation = 103 ; k . MirroredRepeatWrapping = 1002 ; k . MixOperation = 1 ; k . MultiMaterial = function ( a ) { void 0 === a && ( a = [ ] ) ; console . warn ( "THREE.MultiMaterial has been removed. Use an Array instead." ) ;
a . isMultiMaterial = ! 0 ; a . materials = a ; a . clone = function ( ) { return a . slice ( ) } ; return a } ; k . MultiplyBlending = 4 ; k . MultiplyOperation = 0 ; k . NearestFilter = 1003 ; k . NearestMipMapLinearFilter = 1005 ; k . NearestMipMapNearestFilter = 1004 ; k . NearestMipmapLinearFilter = 1005 ; k . NearestMipmapNearestFilter = 1004 ; k . NeverDepth = 0 ; k . NeverStencilFunc = 512 ; k . NoBlending = 0 ; k . NoColors = 0 ; k . NoToneMapping = 0 ; k . NormalBlending = 1 ; k . NotEqualDepth = 7 ; k . NotEqualStencilFunc = 517 ; k . NumberKeyframeTrack = Yc ; k . Object3D = y ; k . ObjectLoader = tf ; k . ObjectSpaceNormalMap =
1 ; k . OctahedronBufferGeometry = ac ; k . OctahedronGeometry = Vd ; k . OneFactor = 201 ; k . OneMinusDstAlphaFactor = 207 ; k . OneMinusDstColorFactor = 209 ; k . OneMinusSrcAlphaFactor = 205 ; k . OneMinusSrcColorFactor = 203 ; k . OrthographicCamera = pe ; k . PCFShadowMap = 1 ; k . PCFSoftShadowMap = 2 ; k . ParametricBufferGeometry = Lc ; k . ParametricGeometry = Sd ; k . Particle = function ( a ) { console . warn ( "THREE.Particle has been renamed to THREE.Sprite." ) ; return new Md ( a ) } ; k . ParticleBasicMaterial = function ( a ) { console . warn ( "THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial." ) ;
return new Ta ( a ) } ; k . ParticleSystem = function ( a , b ) { console . warn ( "THREE.ParticleSystem has been renamed to THREE.Points." ) ; return new Ic ( a , b ) } ; k . ParticleSystemMaterial = function ( a ) { console . warn ( "THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial." ) ; return new Ta ( a ) } ; k . Path = Za ; k . PerspectiveCamera = da ; k . Plane = Ra ; k . PlaneBufferGeometry = Zb ; k . PlaneGeometry = Fd ; k . PlaneHelper = ve ; k . PointCloud = function ( a , b ) { console . warn ( "THREE.PointCloud has been renamed to THREE.Points." ) ; return new Ic ( a , b ) } ;
k . PointCloudMaterial = function ( a ) { console . warn ( "THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial." ) ; return new Ta ( a ) } ; k . PointLight = kf ; k . PointLightHelper = ed ; k . Points = Ic ; k . PointsMaterial = Ta ; k . PolarGridHelper = yf ; k . PolyhedronBufferGeometry = Ca ; k . PolyhedronGeometry = Td ; k . PositionalAudio = Kg ; k . PositionalAudioHelper = id ; k . PropertyBinding = za ; k . PropertyMixer = Mg ; k . QuadraticBezierCurve = Xa ; k . QuadraticBezierCurve3 = hb ; k . Quaternion = ua ; k . QuaternionKeyframeTrack = me ; k . QuaternionLinearInterpolant = bf ; k . REVISION =
"111" ; k . RGBADepthPacking = 3201 ; k . RGBAFormat = 1023 ; k . RGBA _ASTC _10x10 _Format = 37819 ; k . RGBA _ASTC _10x5 _Format = 37816 ; k . RGBA _ASTC _10x6 _Format = 37817 ; k . RGBA _ASTC _10x8 _Format = 37818 ; k . RGBA _ASTC _12x10 _Format = 37820 ; k . RGBA _ASTC _12x12 _Format = 37821 ; k . RGBA _ASTC _4x4 _Format = 37808 ; k . RGBA _ASTC _5x4 _Format = 37809 ; k . RGBA _ASTC _5x5 _Format = 37810 ; k . RGBA _ASTC _6x5 _Format = 37811 ; k . RGBA _ASTC _6x6 _Format = 37812 ; k . RGBA _ASTC _8x5 _Format = 37813 ; k . RGBA _ASTC _8x6 _Format = 37814 ; k . RGBA _ASTC _8x8 _Format = 37815 ; k . RGBA _PVRTC _2BPPV1 _Format = 35843 ; k . RGBA _PVRTC _4BPPV1 _Format =
35842 ; k . RGBA _S3TC _DXT1 _Format = 33777 ; k . RGBA _S3TC _DXT3 _Format = 33778 ; k . RGBA _S3TC _DXT5 _Format = 33779 ; k . RGBDEncoding = 3006 ; k . RGBEEncoding = 3002 ; k . RGBEFormat = 1023 ; k . RGBFormat = 1022 ; k . RGBM16Encoding = 3005 ; k . RGBM7Encoding = 3004 ; k . RGB _ETC1 _Format = 36196 ; k . RGB _PVRTC _2BPPV1 _Format = 35841 ; k . RGB _PVRTC _4BPPV1 _Format = 35840 ; k . RGB _S3TC _DXT1 _Format = 33776 ; k . RawShaderMaterial = Xc ; k . Ray = Rb ; k . Raycaster = ii ; k . RectAreaLight = of ; k . RectAreaLightHelper = fd ; k . RedFormat = 1028 ; k . ReinhardToneMapping = 2 ; k . RepeatWrapping = 1E3 ; k . ReplaceStencilOp =
7681 ; k . ReverseSubtractEquation = 102 ; k . RingBufferGeometry = Tc ; k . RingGeometry = ge ; k . Scene = wd ; k . SceneUtils = { createMultiMaterialObject : function ( ) { console . error ( "THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js" ) } , detach : function ( ) { console . error ( "THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js" ) } , attach : function ( ) { console . error ( "THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js" ) } } ; k . ShaderChunk = Q ; k . ShaderLib = db ; k . ShaderMaterial = na ; k . ShadowMaterial =
hc ; k . Shape = Ib ; k . ShapeBufferGeometry = fc ; k . ShapeGeometry = ec ; k . ShapePath = Cg ; k . ShapeUtils = qb ; k . ShortType = 1011 ; k . Skeleton = Ve ; k . SkeletonHelper = dd ; k . SkinnedMesh = Pd ; k . SmoothShading = 2 ; k . Sphere = mb ; k . SphereBufferGeometry = Hb ; k . SphereGeometry = fe ; k . Spherical = ki ; k . SphericalHarmonics3 = vf ; k . SphericalReflectionMapping = 305 ; k . Spline = Tg ; k . SplineCurve = Ya ; k . SplineCurve3 = oi ; k . SpotLight = jf ; k . SpotLightHelper = cd ; k . SpotLightShadow = hf ; k . Sprite = Md ; k . SpriteMaterial = Gb ; k . SrcAlphaFactor = 204 ; k . SrcAlphaSaturateFactor = 210 ; k . SrcColorFactor =
202 ; k . StaticCopyUsage = 35046 ; k . StaticDrawUsage = 35044 ; k . StaticReadUsage = 35045 ; k . StereoCamera = ei ; k . StreamCopyUsage = 35042 ; k . StreamDrawUsage = 35040 ; k . StreamReadUsage = 35041 ; k . StringKeyframeTrack = cf ; k . SubtractEquation = 101 ; k . SubtractiveBlending = 3 ; k . TOUCH = { ROTATE : 0 , PAN : 1 , DOLLY _PAN : 2 , DOLLY _ROTATE : 3 } ; k . TangentSpaceNormalMap = 0 ; k . TetrahedronBufferGeometry = Mc ; k . TetrahedronGeometry = Ud ; k . TextBufferGeometry = Sc ; k . TextGeometry = ee ; k . Texture = Y ; k . TextureLoader = ff ; k . TorusBufferGeometry = Qc ; k . TorusGeometry = $d ; k . TorusKnotBufferGeometry =
Pc ; k . TorusKnotGeometry = Zd ; k . Triangle = ma ; k . TriangleFanDrawMode = 2 ; k . TriangleStripDrawMode = 1 ; k . TrianglesDrawMode = 0 ; k . TubeBufferGeometry = bc ; k . TubeGeometry = Yd ; k . UVMapping = 300 ; k . Uint16Attribute = function ( a , b ) { console . warn ( "THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead." ) ; return new Sb ( a , b ) } ; k . Uint16BufferAttribute = Sb ; k . Uint32Attribute = function ( a , b ) { console . warn ( "THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead." ) ; return new Tb ( a ,
b ) } ; k . Uint32BufferAttribute = Tb ; k . Uint8Attribute = function ( a , b ) { console . warn ( "THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead." ) ; return new yd ( a , b ) } ; k . Uint8BufferAttribute = yd ; k . Uint8ClampedAttribute = function ( a , b ) { console . warn ( "THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead." ) ; return new zd ( a , b ) } ; k . Uint8ClampedBufferAttribute = zd ; k . Uncharted2ToneMapping = 3 ; k . Uniform = wf ; k . UniformsLib = K ; k . UniformsUtils = Ik ; k . UnsignedByteType =
1009 ; k . UnsignedInt248Type = 1020 ; k . UnsignedIntType = 1014 ; k . UnsignedShort4444Type = 1017 ; k . UnsignedShort5551Type = 1018 ; k . UnsignedShort565Type = 1019 ; k . UnsignedShortType = 1012 ; k . VSMShadowMap = 3 ; k . Vector2 = B ; k . Vector3 = n ; k . Vector4 = ba ; k . VectorKeyframeTrack = Zc ; k . Vertex = function ( a , b , c ) { console . warn ( "THREE.Vertex has been removed. Use THREE.Vector3 instead." ) ; return new n ( a , b , c ) } ; k . VertexColors = 2 ; k . VertexNormalsHelper = re ; k . VideoTexture = tg ; k . WebGLMultisampleRenderTarget = Zf ; k . WebGLRenderTarget = la ; k . WebGLRenderTargetCube =
Bb ; k . WebGLRenderer = pg ; k . WebGLUtils = Oh ; k . WireframeGeometry = Kc ; k . WireframeHelper = function ( a , b ) { console . warn ( "THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead." ) ; return new X ( new Kc ( a . geometry ) , new P ( { color : void 0 !== b ? b : 16777215 } ) ) } ; k . WrapAroundEnding = 2402 ; k . XHRLoader = function ( a ) { console . warn ( "THREE.XHRLoader has been renamed to THREE.FileLoader." ) ; return new Pa ( a ) } ; k . ZeroCurvatureEnding = 2400 ; k . ZeroFactor = 200 ; k . ZeroSlopeEnding = 2401 ; k . ZeroStencilOp = 0 ; k . sRGBEncoding = 3001 ; Object . defineProperty ( k ,
"__esModule" , { value : ! 0 } ) } ) ;