b;b++)if((m=t?y(o(p=e[b])[0],p[1]):y(e[b]))===u||m===c)return m}else for(g=v.call(e);!(p=g.next()).done;)if((m=i(g,y,p.value,t))===u||m===c)return m}).BREAK=u,t.RETURN=c},No7X:function(e,t,n){"use strict";var r=n("C7PF");t.a=function(e,t,n){var i=t.smooth,a=t.points;if(a&&a.length>=2){if(i){var o=function(e,t,n,i){var a,o,s,l,u=[],c=[],h=[],d=[];if(i){s=[1/0,1/0],l=[-1/0,-1/0];for(var f=0,p=e.length;f=this._maxSize&&n>0){var r=this._list.head;this._list.remove(r),delete this._map[r.key]}var i=this._list.insert(t);i.key=e,this._map[e]=i}},O.prototype.get=function(e){var t=this._map[e];if(this._map.hasOwnProperty(e))return t!==this._list.tail&&(this._list.remove(t),this._list.insertEntry(t)),t.value},O.prototype.remove=function(e){var t=this._map[e];void 0!==t&&(delete this._map[e],this._list.remove(t))},O.prototype.clear=function(){this._list.clear(),this._map={}};var T=O,A={},M={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function E(e){return(e=Math.round(e))<0?0:e>255?255:e}function I(e){return e<0?0:e>1?1:e}function k(e){return e.length&&"%"===e.charAt(e.length-1)?E(parseFloat(e)/100*255):E(parseInt(e,10))}function D(e){return e.length&&"%"===e.charAt(e.length-1)?I(parseFloat(e)/100):I(parseFloat(e))}function P(e,t,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?e+(t-e)*n*6:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}function R(e,t,n){return e+(t-e)*n}function L(e,t,n,r,i){return e[0]=t,e[1]=n,e[2]=r,e[3]=i,e}function N(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}var B=new T(20),j=null;function F(e,t){j&&N(j,t),j=B.put(e,j||t.slice())}function z(e,t){var n=(parseFloat(e[0])%360+360)%360/360,r=D(e[1]),i=D(e[2]),a=i<=.5?i*(r+1):i+r-i*r,o=2*i-a;return L(t=t||[],E(255*P(o,a,n+1/3)),E(255*P(o,a,n)),E(255*P(o,a,n-1/3)),1),4===e.length&&(t[3]=e[3]),t}A.parse=function(e,t){if(e){t=t||[];var n=B.get(e);if(n)return N(t,n);var r,i=(e+="").replace(/ /g,"").toLowerCase();if(i in M)return N(t,M[i]),F(e,t),t;if("#"===i.charAt(0))return 4===i.length?(r=parseInt(i.substr(1),16))>=0&&r<=4095?(L(t,(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,1),F(e,t),t):void L(t,0,0,0,1):7===i.length?(r=parseInt(i.substr(1),16))>=0&&r<=16777215?(L(t,(16711680&r)>>16,(65280&r)>>8,255&r,1),F(e,t),t):void L(t,0,0,0,1):void 0;var a=i.indexOf("("),o=i.indexOf(")");if(-1!==a&&o+1===i.length){var s=i.substr(0,a),l=i.substr(a+1,o-(a+1)).split(","),u=1;switch(s){case"rgba":if(4!==l.length)return void L(t,0,0,0,1);u=D(l.pop());case"rgb":return 3!==l.length?void L(t,0,0,0,1):(L(t,k(l[0]),k(l[1]),k(l[2]),u),F(e,t),t);case"hsla":return 4!==l.length?void L(t,0,0,0,1):(l[3]=D(l[3]),z(l,t),F(e,t),t);case"hsl":return 3!==l.length?void L(t,0,0,0,1):(z(l,t),F(e,t),t);default:return}}L(t,0,0,0,1)}},A.parseToFloat=function(e,t){if(t=A.parse(e,t))return t[0]/=255,t[1]/=255,t[2]/=255,t},A.lift=function(e,t){var n=A.parse(e);if(n){for(var r=0;r<3;r++)n[r]=t<0?n[r]*(1-t)|0:(255-n[r])*t+n[r]|0;return A.stringify(n,4===n.length?"rgba":"rgb")}},A.toHex=function(e){var t=A.parse(e);if(t)return((1<<24)+(t[0]<<16)+(t[1]<<8)+ +t[2]).toString(16).slice(1)},A.fastLerp=function(e,t,n){if(t&&t.length&&e>=0&&e<=1){n=n||[];var r=e*(t.length-1),i=Math.floor(r),a=Math.ceil(r),o=t[i],s=t[a],l=r-i;return n[0]=E(R(o[0],s[0],l)),n[1]=E(R(o[1],s[1],l)),n[2]=E(R(o[2],s[2],l)),n[3]=I(R(o[3],s[3],l)),n}},A.fastMapToColor=A.fastLerp,A.lerp=function(e,t,n){if(t&&t.length&&e>=0&&e<=1){var r=e*(t.length-1),i=Math.floor(r),a=Math.ceil(r),o=A.parse(t[i]),s=A.parse(t[a]),l=r-i,u=A.stringify([E(R(o[0],s[0],l)),E(R(o[1],s[1],l)),E(R(o[2],s[2],l)),I(R(o[3],s[3],l))],"rgba");return n?{color:u,leftIndex:i,rightIndex:a,value:r}:u}},A.mapToColor=A.lerp,A.modifyHSL=function(e,t,n,r){if(e=A.parse(e))return e=function(e){if(e){var t,n,r=e[0]/255,i=e[1]/255,a=e[2]/255,o=Math.min(r,i,a),s=Math.max(r,i,a),l=s-o,u=(s+o)/2;if(0===l)t=0,n=0;else{n=u<.5?l/(s+o):l/(2-s-o);var c=((s-r)/6+l/2)/l,h=((s-i)/6+l/2)/l,d=((s-a)/6+l/2)/l;r===s?t=d-h:i===s?t=1/3+c-d:a===s&&(t=2/3+h-c),t<0&&(t+=1),t>1&&(t-=1)}var f=[360*t,n,u];return null!=e[3]&&f.push(e[3]),f}}(e),null!=t&&(e[0]=(i=t,(i=Math.round(i))<0?0:i>360?360:i)),null!=n&&(e[1]=D(n)),null!=r&&(e[2]=D(r)),A.stringify(z(e),"rgba");var i},A.modifyAlpha=function(e,t){if((e=A.parse(e))&&null!=t)return e[3]=I(t),A.stringify(e,"rgba")},A.stringify=function(e,t){if(e&&e.length){var n=e[0]+","+e[1]+","+e[2];return"rgba"!==t&&"hsva"!==t&&"hsla"!==t||(n+=","+e[3]),t+"("+n+")"}};var V=A.parseToFloat,H={};function U(e){var t=Object.keys(e);t.sort();for(var n=[],r=0;r=0},getEnabledUniforms:function(){return this._enabledUniforms},getTextureUniforms:function(){return this._textureUniforms},set:function(e,t){if("object"==typeof e)for(var n in e){var r=e[n];this.setUniform(n,r)}else this.setUniform(e,t)},get:function(e){var t=this.uniforms[e];if(t)return t.value},attachShader:function(e,t){var n=this.uniforms;this.uniforms=e.createUniforms(),this.shader=e;var r=this.uniforms;this._enabledUniforms=Object.keys(r),this._enabledUniforms.sort(),this._textureUniforms=this._enabledUniforms.filter(function(e){var t=this.uniforms[e].type;return"t"===t||"tv"===t},this);var i=this.vertexDefines,a=this.fragmentDefines;if(this.vertexDefines=g.clone(e.vertexDefines),this.fragmentDefines=g.clone(e.fragmentDefines),t){for(var o in n)r[o]&&(r[o].value=n[o].value);g.defaults(this.vertexDefines,i),g.defaults(this.fragmentDefines,a)}var s={};for(var l in e.textures)s[l]={shaderType:e.textures[l].shaderType,type:e.textures[l].type,enabled:!(!t||!this._textureStatus[l])&&this._textureStatus[l].enabled};this._textureStatus=s,this._programKey=""},clone:function(){var e=new this.constructor({name:this.name,shader:this.shader});for(var t in this.uniforms)e.uniforms[t].value=this.uniforms[t].value;return e.depthTest=this.depthTest,e.depthMask=this.depthMask,e.transparent=this.transparent,e.blend=this.blend,e.vertexDefines=g.clone(this.vertexDefines),e.fragmentDefines=g.clone(this.fragmentDefines),e.enableTexture(this.getEnabledTextures()),e.precision=this.precision,e},define:function(e,t,n){var r=this.vertexDefines,i=this.fragmentDefines;"vertex"!==e&&"fragment"!==e&&"both"!==e&&arguments.length<3&&(n=t,t=e,e="both"),n=null!=n?n:null,"vertex"!==e&&"both"!==e||r[t]!==n&&(r[t]=n,this._programKey=""),"fragment"!==e&&"both"!==e||i[t]!==n&&(i[t]=n,"both"!==e&&(this._programKey=""))},undefine:function(e,t){"vertex"!==e&&"fragment"!==e&&"both"!==e&&arguments.length<2&&(t=e,e="both"),"vertex"!==e&&"both"!==e||this.isDefined("vertex",t)&&(delete this.vertexDefines[t],this._programKey=""),"fragment"!==e&&"both"!==e||this.isDefined("fragment",t)&&(delete this.fragmentDefines[t],"both"!==e&&(this._programKey=""))},isDefined:function(e,t){switch(e){case"vertex":return void 0!==this.vertexDefines[t];case"fragment":return void 0!==this.fragmentDefines[t]}},getDefine:function(e,t){switch(e){case"vertex":return this.vertexDefines[t];case"fragment":return this.fragmentDefines[t]}},enableTexture:function(e){if(Array.isArray(e))for(var t=0;t0&&(i=1/Math.sqrt(i),e[0]=t[0]*i,e[1]=t[1]*i),e},q.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},q.cross=function(e,t,n){var r=t[0]*n[1]-t[1]*n[0];return e[0]=e[1]=0,e[2]=r,e},q.lerp=function(e,t,n,r){var i=t[0],a=t[1];return e[0]=i+r*(n[0]-i),e[1]=a+r*(n[1]-a),e},q.random=function(e,t){t=t||1;var n=2*GLMAT_RANDOM()*Math.PI;return e[0]=Math.cos(n)*t,e[1]=Math.sin(n)*t,e},q.transformMat2=function(e,t,n){var r=t[0],i=t[1];return e[0]=n[0]*r+n[2]*i,e[1]=n[1]*r+n[3]*i,e},q.transformMat2d=function(e,t,n){var r=t[0],i=t[1];return e[0]=n[0]*r+n[2]*i+n[4],e[1]=n[1]*r+n[3]*i+n[5],e},q.transformMat3=function(e,t,n){var r=t[0],i=t[1];return e[0]=n[0]*r+n[3]*i+n[6],e[1]=n[1]*r+n[4]*i+n[7],e},q.transformMat4=function(e,t,n){var r=t[0],i=t[1];return e[0]=n[0]*r+n[4]*i+n[12],e[1]=n[1]*r+n[5]*i+n[13],e},q.forEach=(G=q.create(),function(e,t,n,r,i,a){var o,s;for(t||(t=2),n||(n=0),s=r?Math.min(r*t+n,e.length):e.length,o=n;o0&&r.push("#define "+i.toUpperCase()+"_COUNT "+a)}if(n)for(var o=0;ol.getMaxJointNumber()&&(d.USE_SKIN_MATRICES_TEXTURE=null),h+="\n"+ae(d)+"\n"}a&&(h+="\n#define INSTANCING\n");var f=h+ae(t.vertexDefines,s,c),p=h+ae(t.fragmentDefines,s,c),g=f+"\n"+t.shader.vertex,m=["OES_standard_derivatives","EXT_shader_texture_lod"].filter(function(e){return null!=l.getGLExtension(e)});m.indexOf("EXT_shader_texture_lod")>=0&&(p+="\n#define SUPPORT_TEXTURE_LOD"),m.indexOf("OES_standard_derivatives")>=0&&(p+="\n#define SUPPORT_STANDARD_DERIVATIVES");var v,y,b=function(e){for(var t=[],n=0;n=0){if(1!==s&&4!==s){xe();break}s=2,u=[]}else if(1!==s)if(4!==s)c(h),s=0;else{var d=h;pe.indexOf(d)>=0||ge.indexOf(d)>=0||me.indexOf(d)>=0?l[o].semantic=d:"ignore"===d||"unconfigurable"===d?l[o].ignore=!0:l[o].value="bool"===e?"true"===d:parseFloat(d)}else l[o].value="bool"===e?"true"===h:parseFloat(h),u=null;else{if(2!==s){xe();break}if(!(u instanceof Array)){xe();break}u.push(+r[++a])}else l[o].value=new w.a.Float32Array(u),u=null,s=5;else if(2===s){if(!(u instanceof Array)){xe();break}u.push(+r[++a])}else s=5;else s=4;else{if(0!==s&&3!==s){xe();break}s=1}}return l}function Se(e,t){"object"==typeof e&&(t=e.fragment,e=e.vertex),e=_e(e),t=_e(t),this._shaderID=function(e,t){var n="vertex:"+e+"fragment:"+t;if(ye[n])return ye[n];var r=g.genGUID();return ye[n]=r,be[r]={vertex:e,fragment:t},r}(e,t),this._vertexCode=Se.parseImport(e),this._fragmentCode=Se.parseImport(t),this.attributeSemantics={},this.matrixSemantics={},this.uniformSemantics={},this.matrixSemanticKeys=[],this.uniformTemplates={},this.attributes={},this.textures={},this.vertexDefines={},this.fragmentDefines={},this._parseAttributes(),this._parseUniforms(),this._parseDefines()}Se.prototype={constructor:Se,createUniforms:function(){var e={};for(var t in this.uniformTemplates){var n=this.uniformTemplates[t];e[t]={type:n.type,value:n.value()}}return e},_parseImport:function(){this._vertexCode=Se.parseImport(this.vertex),this._fragmentCode=Se.parseImport(this.fragment)},_addSemanticUniform:function(e,t,n){if(pe.indexOf(n)>=0)this.attributeSemantics[n]={symbol:e,type:t};else if(me.indexOf(n)>=0){var r=!1,i=n;n.match(/TRANSPOSE$/)&&(r=!0,i=n.slice(0,-9)),this.matrixSemantics[n]={symbol:e,type:t,isTranspose:r,semanticNoTranspose:i}}else ge.indexOf(n)>=0&&(this.uniformSemantics[n]={symbol:e,type:t})},_addMaterialUniform:function(e,t,n,r,i,a){a[e]={type:n,value:i?fe.array:r||fe[t],semantic:null}},_parseUniforms:function(){var e={},t=this,n="vertex";function r(e){return null!=e?function(){return e}:null}function i(i,a,o){var s=we(a,o),l=[];for(var u in s){var c=s[u],h=c.semantic,d=u,f=he[a],p=r(s[u].value);s[u].isArray&&(d+="["+s[u].arraySize+"]",f+="v"),l.push(d),t._uniformList.push(u),c.ignore||("sampler2D"!==a&&"samplerCube"!==a||(t.textures[u]={shaderType:n,type:a}),h?t._addSemanticUniform(u,f,h):t._addMaterialUniform(u,a,f,p,s[u].isArray,e))}return l.length>0?"uniform "+a+" "+l.join(",")+";\n":""}this._uniformList=[],this._vertexCode=this._vertexCode.replace(le,i),n="fragment",this._fragmentCode=this._fragmentCode.replace(le,i),t.matrixSemanticKeys=Object.keys(this.matrixSemantics),this.uniformTemplates=e},_parseAttributes:function(){var e={},t=this;this._vertexCode=this._vertexCode.replace(ue,function(n,r,i){var a=we(r,i),o=ve[r]||1,s=[];for(var l in a){var u=a[l].semantic;if(e[l]={type:"float",size:o,semantic:u||null},u){if(pe.indexOf(u)<0)throw new Error('Unkown semantic "'+u+'"');t.attributeSemantics[u]={symbol:l,type:r}}s.push(l)}return"attribute "+r+" "+s.join(",")+";\n"}),this.attributes=e},_parseDefines:function(){var e=this,t="vertex";function n(n,r,i){var a="vertex"===t?e.vertexDefines:e.fragmentDefines;return a[r]||(a[r]="false"!==i&&("true"===i||(i?isNaN(parseFloat(i))?i.trim():parseFloat(i):null))),""}this._vertexCode=this._vertexCode.replace(ce,n),t="fragment",this._fragmentCode=this._fragmentCode.replace(ce,n)},clone:function(){var e=be[this._shaderID];return new Se(e.vertex,e.fragment)}},Object.defineProperty&&(Object.defineProperty(Se.prototype,"shaderID",{get:function(){return this._shaderID}}),Object.defineProperty(Se.prototype,"vertex",{get:function(){return this._vertexCode}}),Object.defineProperty(Se.prototype,"fragment",{get:function(){return this._fragmentCode}}),Object.defineProperty(Se.prototype,"uniforms",{get:function(){return this._uniformList}}));var Ce=/(@import)\s*([0-9a-zA-Z_\-\.]*)/g;Se.parseImport=function(e){return e=e.replace(Ce,function(e,t,n){return(e=Se.source(n))?Se.parseImport(e):(console.error('Shader chunk "'+n+'" not existed in library'),"")})};var Oe=/(@export)\s*([0-9a-zA-Z_\-\.]*)\s*\n([\s\S]*?)@end/g;Se.import=function(e){e.replace(Oe,function(e,t,n,r){if(r=r.replace(/(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+\x24)/g,"")){for(var i,a=n.split("."),o=Se.codes,s=0;s 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end",Me={create:function(){var e=new $(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},clone:function(e){var t=new $(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},transpose:function(e,t){if(e===t){var n=t[1],r=t[2],i=t[3],a=t[6],o=t[7],s=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=a,e[11]=t[14],e[12]=i,e[13]=o,e[14]=s}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e},invert:function(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=t[4],s=t[5],l=t[6],u=t[7],c=t[8],h=t[9],d=t[10],f=t[11],p=t[12],g=t[13],m=t[14],v=t[15],y=n*s-r*o,b=n*l-i*o,_=n*u-a*o,x=r*l-i*s,w=r*u-a*s,S=i*u-a*l,C=c*g-h*p,O=c*m-d*p,T=c*v-f*p,A=h*m-d*g,M=h*v-f*g,E=d*v-f*m,I=y*E-b*M+_*A+x*T-w*O+S*C;return I?(I=1/I,e[0]=(s*E-l*M+u*A)*I,e[1]=(i*M-r*E-a*A)*I,e[2]=(g*S-m*w+v*x)*I,e[3]=(d*w-h*S-f*x)*I,e[4]=(l*T-o*E-u*O)*I,e[5]=(n*E-i*T+a*O)*I,e[6]=(m*_-p*S-v*b)*I,e[7]=(c*S-d*_+f*b)*I,e[8]=(o*M-s*T+u*C)*I,e[9]=(r*T-n*M-a*C)*I,e[10]=(p*w-g*_+v*y)*I,e[11]=(h*_-c*w-f*y)*I,e[12]=(s*O-o*A-l*C)*I,e[13]=(n*A-r*O+i*C)*I,e[14]=(g*b-p*x-m*y)*I,e[15]=(c*x-h*b+d*y)*I,e):null},adjoint:function(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=t[4],s=t[5],l=t[6],u=t[7],c=t[8],h=t[9],d=t[10],f=t[11],p=t[12],g=t[13],m=t[14],v=t[15];return e[0]=s*(d*v-f*m)-h*(l*v-u*m)+g*(l*f-u*d),e[1]=-(r*(d*v-f*m)-h*(i*v-a*m)+g*(i*f-a*d)),e[2]=r*(l*v-u*m)-s*(i*v-a*m)+g*(i*u-a*l),e[3]=-(r*(l*f-u*d)-s*(i*f-a*d)+h*(i*u-a*l)),e[4]=-(o*(d*v-f*m)-c*(l*v-u*m)+p*(l*f-u*d)),e[5]=n*(d*v-f*m)-c*(i*v-a*m)+p*(i*f-a*d),e[6]=-(n*(l*v-u*m)-o*(i*v-a*m)+p*(i*u-a*l)),e[7]=n*(l*f-u*d)-o*(i*f-a*d)+c*(i*u-a*l),e[8]=o*(h*v-f*g)-c*(s*v-u*g)+p*(s*f-u*h),e[9]=-(n*(h*v-f*g)-c*(r*v-a*g)+p*(r*f-a*h)),e[10]=n*(s*v-u*g)-o*(r*v-a*g)+p*(r*u-a*s),e[11]=-(n*(s*f-u*h)-o*(r*f-a*h)+c*(r*u-a*s)),e[12]=-(o*(h*m-d*g)-c*(s*m-l*g)+p*(s*d-l*h)),e[13]=n*(h*m-d*g)-c*(r*m-i*g)+p*(r*d-i*h),e[14]=-(n*(s*m-l*g)-o*(r*m-i*g)+p*(r*l-i*s)),e[15]=n*(s*d-l*h)-o*(r*d-i*h)+c*(r*l-i*s),e},determinant:function(e){var t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],h=e[10],d=e[11],f=e[12],p=e[13],g=e[14],m=e[15];return(t*o-n*a)*(h*m-d*g)-(t*s-r*a)*(c*m-d*p)+(t*l-i*a)*(c*g-h*p)+(n*s-r*o)*(u*m-d*f)-(n*l-i*o)*(u*g-h*f)+(r*l-i*s)*(u*p-c*f)},multiply:function(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],h=t[8],d=t[9],f=t[10],p=t[11],g=t[12],m=t[13],v=t[14],y=t[15],b=n[0],_=n[1],x=n[2],w=n[3];return e[0]=b*r+_*s+x*h+w*g,e[1]=b*i+_*l+x*d+w*m,e[2]=b*a+_*u+x*f+w*v,e[3]=b*o+_*c+x*p+w*y,b=n[4],_=n[5],x=n[6],w=n[7],e[4]=b*r+_*s+x*h+w*g,e[5]=b*i+_*l+x*d+w*m,e[6]=b*a+_*u+x*f+w*v,e[7]=b*o+_*c+x*p+w*y,b=n[8],_=n[9],x=n[10],w=n[11],e[8]=b*r+_*s+x*h+w*g,e[9]=b*i+_*l+x*d+w*m,e[10]=b*a+_*u+x*f+w*v,e[11]=b*o+_*c+x*p+w*y,b=n[12],_=n[13],x=n[14],w=n[15],e[12]=b*r+_*s+x*h+w*g,e[13]=b*i+_*l+x*d+w*m,e[14]=b*a+_*u+x*f+w*v,e[15]=b*o+_*c+x*p+w*y,e},multiplyAffine:function(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[4],s=t[5],l=t[6],u=t[8],c=t[9],h=t[10],d=t[12],f=t[13],p=t[14],g=n[0],m=n[1],v=n[2];return e[0]=g*r+m*o+v*u,e[1]=g*i+m*s+v*c,e[2]=g*a+m*l+v*h,g=n[4],m=n[5],v=n[6],e[4]=g*r+m*o+v*u,e[5]=g*i+m*s+v*c,e[6]=g*a+m*l+v*h,g=n[8],m=n[9],v=n[10],e[8]=g*r+m*o+v*u,e[9]=g*i+m*s+v*c,e[10]=g*a+m*l+v*h,g=n[12],m=n[13],v=n[14],e[12]=g*r+m*o+v*u+d,e[13]=g*i+m*s+v*c+f,e[14]=g*a+m*l+v*h+p,e}};Me.mul=Me.multiply,Me.mulAffine=Me.multiplyAffine,Me.translate=function(e,t,n){var r,i,a,o,s,l,u,c,h,d,f,p,g=n[0],m=n[1],v=n[2];return t===e?(e[12]=t[0]*g+t[4]*m+t[8]*v+t[12],e[13]=t[1]*g+t[5]*m+t[9]*v+t[13],e[14]=t[2]*g+t[6]*m+t[10]*v+t[14],e[15]=t[3]*g+t[7]*m+t[11]*v+t[15]):(r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],h=t[8],d=t[9],f=t[10],p=t[11],e[0]=r,e[1]=i,e[2]=a,e[3]=o,e[4]=s,e[5]=l,e[6]=u,e[7]=c,e[8]=h,e[9]=d,e[10]=f,e[11]=p,e[12]=r*g+s*m+h*v+t[12],e[13]=i*g+l*m+d*v+t[13],e[14]=a*g+u*m+f*v+t[14],e[15]=o*g+c*m+p*v+t[15]),e},Me.scale=function(e,t,n){var r=n[0],i=n[1],a=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},Me.rotate=function(e,t,n,r){var i,a,o,s,l,u,c,h,d,f,p,g,m,v,y,b,_,x,w,S,C,O,T,A,M=r[0],E=r[1],I=r[2],k=Math.sqrt(M*M+E*E+I*I);return Math.abs(k)<1e-6?null:(M*=k=1/k,E*=k,I*=k,i=Math.sin(n),o=1-(a=Math.cos(n)),s=t[0],l=t[1],u=t[2],c=t[3],h=t[4],d=t[5],f=t[6],p=t[7],g=t[8],m=t[9],v=t[10],y=t[11],b=M*M*o+a,_=E*M*o+I*i,x=I*M*o-E*i,w=M*E*o-I*i,S=E*E*o+a,C=I*E*o+M*i,O=M*I*o+E*i,T=E*I*o-M*i,A=I*I*o+a,e[0]=s*b+h*_+g*x,e[1]=l*b+d*_+m*x,e[2]=u*b+f*_+v*x,e[3]=c*b+p*_+y*x,e[4]=s*w+h*S+g*C,e[5]=l*w+d*S+m*C,e[6]=u*w+f*S+v*C,e[7]=c*w+p*S+y*C,e[8]=s*O+h*T+g*A,e[9]=l*O+d*T+m*A,e[10]=u*O+f*T+v*A,e[11]=c*O+p*T+y*A,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)},Me.rotateX=function(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],h=t[10],d=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=a*i+u*r,e[5]=o*i+c*r,e[6]=s*i+h*r,e[7]=l*i+d*r,e[8]=u*i-a*r,e[9]=c*i-o*r,e[10]=h*i-s*r,e[11]=d*i-l*r,e},Me.rotateY=function(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],o=t[1],s=t[2],l=t[3],u=t[8],c=t[9],h=t[10],d=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i-u*r,e[1]=o*i-c*r,e[2]=s*i-h*r,e[3]=l*i-d*r,e[8]=a*r+u*i,e[9]=o*r+c*i,e[10]=s*r+h*i,e[11]=l*r+d*i,e},Me.rotateZ=function(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],o=t[1],s=t[2],l=t[3],u=t[4],c=t[5],h=t[6],d=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i+u*r,e[1]=o*i+c*r,e[2]=s*i+h*r,e[3]=l*i+d*r,e[4]=u*i-a*r,e[5]=c*i-o*r,e[6]=h*i-s*r,e[7]=d*i-l*r,e},Me.fromRotationTranslation=function(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[3],s=r+r,l=i+i,u=a+a,c=r*s,h=r*l,d=r*u,f=i*l,p=i*u,g=a*u,m=o*s,v=o*l,y=o*u;return e[0]=1-(f+g),e[1]=h+y,e[2]=d-v,e[3]=0,e[4]=h-y,e[5]=1-(c+g),e[6]=p+m,e[7]=0,e[8]=d+v,e[9]=p-m,e[10]=1-(c+f),e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e},Me.fromQuat=function(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=n+n,s=r+r,l=i+i,u=n*o,c=r*o,h=r*s,d=i*o,f=i*s,p=i*l,g=a*o,m=a*s,v=a*l;return e[0]=1-h-p,e[1]=c+v,e[2]=d-m,e[3]=0,e[4]=c-v,e[5]=1-u-p,e[6]=f+g,e[7]=0,e[8]=d+m,e[9]=f-g,e[10]=1-u-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},Me.frustum=function(e,t,n,r,i,a,o){var s=1/(n-t),l=1/(i-r),u=1/(a-o);return e[0]=2*a*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*a*l,e[6]=0,e[7]=0,e[8]=(n+t)*s,e[9]=(i+r)*l,e[10]=(o+a)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*a*2*u,e[15]=0,e},Me.perspective=function(e,t,n,r,i){var a=1/Math.tan(t/2),o=1/(r-i);return e[0]=a/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=(i+r)*o,e[11]=-1,e[12]=0,e[13]=0,e[14]=2*i*r*o,e[15]=0,e},Me.ortho=function(e,t,n,r,i,a,o){var s=1/(t-n),l=1/(r-i),u=1/(a-o);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(t+n)*s,e[13]=(i+r)*l,e[14]=(o+a)*u,e[15]=1,e},Me.lookAt=function(e,t,n,r){var i,a,o,s,l,u,c,h,d,f,p=t[0],g=t[1],m=t[2],v=r[0],y=r[1],b=r[2],_=n[0],x=n[1],w=n[2];return Math.abs(p-_)<1e-6&&Math.abs(g-x)<1e-6&&Math.abs(m-w)<1e-6?Me.identity(e):(c=p-_,h=g-x,d=m-w,i=y*(d*=f=1/Math.sqrt(c*c+h*h+d*d))-b*(h*=f),a=b*(c*=f)-v*d,o=v*h-y*c,(f=Math.sqrt(i*i+a*a+o*o))?(i*=f=1/f,a*=f,o*=f):(i=0,a=0,o=0),s=h*o-d*a,l=d*i-c*o,u=c*a-h*i,(f=Math.sqrt(s*s+l*l+u*u))?(s*=f=1/f,l*=f,u*=f):(s=0,l=0,u=0),e[0]=i,e[1]=s,e[2]=c,e[3]=0,e[4]=a,e[5]=l,e[6]=h,e[7]=0,e[8]=o,e[9]=u,e[10]=d,e[11]=0,e[12]=-(i*p+a*g+o*m),e[13]=-(s*p+l*g+u*m),e[14]=-(c*p+h*g+d*m),e[15]=1,e)},Me.frob=function(e){return Math.sqrt(Math.pow(e[0],2)+Math.pow(e[1],2)+Math.pow(e[2],2)+Math.pow(e[3],2)+Math.pow(e[4],2)+Math.pow(e[5],2)+Math.pow(e[6],2)+Math.pow(e[7],2)+Math.pow(e[8],2)+Math.pow(e[9],2)+Math.pow(e[10],2)+Math.pow(e[11],2)+Math.pow(e[12],2)+Math.pow(e[13],2)+Math.pow(e[14],2)+Math.pow(e[15],2))};var Ee=Me,Ie={create:function(){var e=new $(3);return e[0]=0,e[1]=0,e[2]=0,e},clone:function(e){var t=new $(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t},fromValues:function(e,t,n){var r=new $(3);return r[0]=e,r[1]=t,r[2]=n,r},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},set:function(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e},add:function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e},subtract:function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}};Ie.sub=Ie.subtract,Ie.multiply=function(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e},Ie.mul=Ie.multiply,Ie.divide=function(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e},Ie.div=Ie.divide,Ie.min=function(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e},Ie.max=function(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e},Ie.scale=function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e},Ie.scaleAndAdd=function(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e},Ie.distance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(n*n+r*r+i*i)},Ie.dist=Ie.distance,Ie.squaredDistance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return n*n+r*r+i*i},Ie.sqrDist=Ie.squaredDistance,Ie.length=function(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)},Ie.len=Ie.length,Ie.squaredLength=function(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r},Ie.sqrLen=Ie.squaredLength,Ie.negate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e},Ie.inverse=function(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e},Ie.normalize=function(e,t){var n=t[0],r=t[1],i=t[2],a=n*n+r*r+i*i;return a>0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a),e},Ie.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},Ie.cross=function(e,t,n){var r=t[0],i=t[1],a=t[2],o=n[0],s=n[1],l=n[2];return e[0]=i*l-a*s,e[1]=a*o-r*l,e[2]=r*s-i*o,e},Ie.lerp=function(e,t,n,r){var i=t[0],a=t[1],o=t[2];return e[0]=i+r*(n[0]-i),e[1]=a+r*(n[1]-a),e[2]=o+r*(n[2]-o),e},Ie.random=function(e,t){t=t||1;var n=2*X()*Math.PI,r=2*X()-1,i=Math.sqrt(1-r*r)*t;return e[0]=Math.cos(n)*i,e[1]=Math.sin(n)*i,e[2]=r*t,e},Ie.transformMat4=function(e,t,n){var r=t[0],i=t[1],a=t[2],o=n[3]*r+n[7]*i+n[11]*a+n[15];return o=o||1,e[0]=(n[0]*r+n[4]*i+n[8]*a+n[12])/o,e[1]=(n[1]*r+n[5]*i+n[9]*a+n[13])/o,e[2]=(n[2]*r+n[6]*i+n[10]*a+n[14])/o,e},Ie.transformMat3=function(e,t,n){var r=t[0],i=t[1],a=t[2];return e[0]=r*n[0]+i*n[3]+a*n[6],e[1]=r*n[1]+i*n[4]+a*n[7],e[2]=r*n[2]+i*n[5]+a*n[8],e},Ie.transformQuat=function(e,t,n){var r=t[0],i=t[1],a=t[2],o=n[0],s=n[1],l=n[2],u=n[3],c=u*r+s*a-l*i,h=u*i+l*r-o*a,d=u*a+o*i-s*r,f=-o*r-s*i-l*a;return e[0]=c*u+f*-o+h*-l-d*-s,e[1]=h*u+f*-s+d*-o-c*-l,e[2]=d*u+f*-l+c*-s-h*-o,e},Ie.rotateX=function(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0],a[1]=i[1]*Math.cos(r)-i[2]*Math.sin(r),a[2]=i[1]*Math.sin(r)+i[2]*Math.cos(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e},Ie.rotateY=function(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[2]*Math.sin(r)+i[0]*Math.cos(r),a[1]=i[1],a[2]=i[2]*Math.cos(r)-i[0]*Math.sin(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e},Ie.rotateZ=function(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0]*Math.cos(r)-i[1]*Math.sin(r),a[1]=i[0]*Math.sin(r)+i[1]*Math.cos(r),a[2]=i[2],e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e},Ie.forEach=function(){var e=Ie.create();return function(t,n,r,i,a,o){var s,l;for(n||(n=3),r||(r=0),l=i?Math.min(i*n+r,t.length):t.length,s=r;s1?0:Math.acos(i)};var ke=Ie;Te.import(Ae);var De=Ee.create,Pe={};function Re(e){return e.material}function Le(e,t,n){return t.uniforms[n].value}function Ne(e,t,n,r){return n!==r}function Be(e){return!0}function je(){}var Fe={float:x.FLOAT,byte:x.BYTE,ubyte:x.UNSIGNED_BYTE,short:x.SHORT,ushort:x.UNSIGNED_SHORT};var ze=v.extend(function(){return{canvas:null,_width:100,_height:100,devicePixelRatio:"undefined"!=typeof window&&window.devicePixelRatio||1,clearColor:[0,0,0,0],clearBit:17664,alpha:!0,depth:!0,stencil:!1,antialias:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,throwError:!0,gl:null,viewport:{},maxJointNumber:20,__currentFrameBuffer:null,_viewportStack:[],_clearStack:[],_sceneRendering:null}},function(){this.canvas||(this.canvas=w.a.createCanvas());var e=this.canvas;try{var t={alpha:this.alpha,depth:this.depth,stencil:this.stencil,antialias:this.antialias,premultipliedAlpha:this.premultipliedAlpha,preserveDrawingBuffer:this.preserveDrawingBuffer};if(this.gl=e.getContext("webgl",t)||e.getContext("experimental-webgl",t),!this.gl)throw new Error;this._glinfo=new _(this.gl),this.gl.targetRenderer&&console.error("Already created a renderer"),this.gl.targetRenderer=this,this.resize()}catch(e){throw"Error creating WebGL Context "+e}this._programMgr=new se(this),this._placeholderTexture=new function(e){var t,n;this.bind=function(e){t||((t=w.a.createCanvas()).width=t.height=1,t.getContext("2d"));var r=e.gl,i=!n;i&&(n=r.createTexture()),r.bindTexture(r.TEXTURE_2D,n),i&&r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)},this.unbind=function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,null)},this.isRenderable=function(){return!0}}(this)},{resize:function(e,t){var n=this.canvas,r=this.devicePixelRatio;null!=e?(n.style&&(n.style.width=e+"px",n.style.height=t+"px"),n.width=e*r,n.height=t*r,this._width=e,this._height=t):(this._width=n.width/r,this._height=n.height/r),this.setViewport(0,0,this._width,this._height)},getWidth:function(){return this._width},getHeight:function(){return this._height},getViewportAspect:function(){var e=this.viewport;return e.width/e.height},setDevicePixelRatio:function(e){this.devicePixelRatio=e,this.resize(this._width,this._height)},getDevicePixelRatio:function(){return this.devicePixelRatio},getGLExtension:function(e){return this._glinfo.getExtension(e)},getGLParameter:function(e){return this._glinfo.getParameter(e)},setViewport:function(e,t,n,r,i){if("object"==typeof e){var a=e;e=a.x,t=a.y,n=a.width,r=a.height,i=a.devicePixelRatio}i=i||this.devicePixelRatio,this.gl.viewport(e*i,t*i,n*i,r*i),this.viewport={x:e,y:t,width:n,height:r,devicePixelRatio:i}},saveViewport:function(){this._viewportStack.push(this.viewport)},restoreViewport:function(){this._viewportStack.length>0&&this.setViewport(this._viewportStack.pop())},saveClear:function(){this._clearStack.push({clearBit:this.clearBit,clearColor:this.clearColor})},restoreClear:function(){if(this._clearStack.length>0){var e=this._clearStack.pop();this.clearColor=e.clearColor,this.clearBit=e.clearBit}},bindSceneRendering:function(e){this._sceneRendering=e},render:function(e,t,n,r){var i=this.gl,a=this.clearColor;if(this.clearBit){i.colorMask(!0,!0,!0,!0),i.depthMask(!0);var o=this.viewport,s=!1,l=o.devicePixelRatio;(o.width!==this._width||o.height!==this._height||l&&l!==this.devicePixelRatio||o.x||o.y)&&(s=!0,i.enable(i.SCISSOR_TEST),i.scissor(o.x*l,o.y*l,o.width*l,o.height*l)),i.clearColor(a[0],a[1],a[2],a[3]),i.clear(this.clearBit),s&&i.disable(i.SCISSOR_TEST)}if(n||e.update(!1),e.updateLights(),t=t||e.getMainCamera()){t.update();var u=e.updateRenderList(t,!0);this._sceneRendering=e;var c=u.opaque,h=u.transparent,d=e.material;e.trigger("beforerender",this,e,t,u),r?(this.renderPreZ(c,e,t),i.depthFunc(i.LEQUAL)):i.depthFunc(i.LESS);for(var f=De(),p=ke.create(),g=0;g0){var s=e[i-1],l=s.joints?s.joints.length:0;if((a.joints?a.joints.length:0)===l&&a.material===s.material&&a.lightGroup===s.lightGroup){a.__program=s.__program;continue}}var u=this._programMgr.getProgram(a,o,t);this.validateProgram(u),a.__program=u}},renderPass:function(e,t,n){this.trigger("beforerenderpass",this,e,t,n),(n=n||{}).getMaterial=n.getMaterial||Re,n.getUniform=n.getUniform||Le,n.isMaterialChanged=n.isMaterialChanged||Ne,n.beforeRender=n.beforeRender||je,n.afterRender=n.afterRender||je;var r=n.ifRender||Be;this.updatePrograms(e,this._sceneRendering,n),n.sortCompare&&e.sort(n.sortCompare);var i=this.viewport,a=i.devicePixelRatio,o=[i.x*a,i.y*a,i.width*a,i.height*a],s=this.devicePixelRatio,l=this.__currentFrameBuffer?[this.__currentFrameBuffer.getTextureWidth(),this.__currentFrameBuffer.getTextureHeight()]:[this._width*s,this._height*s],u=[o[2],o[3]],c=Date.now();t?(Ee.copy(Ve.VIEW,t.viewMatrix.array),Ee.copy(Ve.PROJECTION,t.projectionMatrix.array),Ee.copy(Ve.VIEWINVERSE,t.worldTransform.array)):(Ee.identity(Ve.VIEW),Ee.identity(Ve.PROJECTION),Ee.identity(Ve.VIEWINVERSE)),Ee.multiply(Ve.VIEWPROJECTION,Ve.PROJECTION,Ve.VIEW),Ee.invert(Ve.PROJECTIONINVERSE,Ve.PROJECTION),Ee.invert(Ve.VIEWPROJECTIONINVERSE,Ve.VIEWPROJECTION);for(var h,d,f,p,g,m,v,y,b,_,x,w,S=this.gl,C=this._sceneRendering,O=0;Othis.getMaxJointNumber()){var a=i.getSubSkinMatricesTexture(e.__uid__,e.joints);t.useTextureSlot(this,a,n),t.setUniform(r,"1i","skinMatricesTexture",n),t.setUniform(r,"1f","skinMatricesTextureSize",a.width)}else{var o=i.getSubSkinMatrices(e.__uid__,e.joints);t.setUniformOfSemantic(r,"SKIN_MATRIX",o)}},_renderObject:function(e,t,n){var r=this.gl,i=e.geometry,a=e.mode;null==a&&(a=4);var o=null,s=e.isInstancedMesh&&e.isInstancedMesh();if(!s||(o=this.getGLExtension("ANGLE_instanced_arrays"))){var l;if(s&&(l=this._bindInstancedAttributes(e,n,o)),t.indicesBuffer){var u=this.getGLExtension("OES_element_index_uint")&&i.indices instanceof Uint32Array?r.UNSIGNED_INT:r.UNSIGNED_SHORT;s?o.drawElementsInstancedANGLE(a,t.indicesBuffer.count,u,0,e.getInstanceCount()):r.drawElements(a,t.indicesBuffer.count,u,0)}else s?o.drawArraysInstancedANGLE(a,0,i.vertexCount,e.getInstanceCount()):r.drawArrays(a,0,i.vertexCount);if(s)for(var c=0;cn?n:e}Ue.add=function(e,t,n){return ke.add(e.array,t.array,n.array),e._dirty=!0,e},Ue.set=function(e,t,n,r){ke.set(e.array,t,n,r),e._dirty=!0},Ue.copy=function(e,t){return ke.copy(e.array,t.array),e._dirty=!0,e},Ue.cross=function(e,t,n){return ke.cross(e.array,t.array,n.array),e._dirty=!0,e},Ue.distance=Ue.dist=function(e,t){return ke.distance(e.array,t.array)},Ue.divide=Ue.div=function(e,t,n){return ke.divide(e.array,t.array,n.array),e._dirty=!0,e},Ue.dot=function(e,t){return ke.dot(e.array,t.array)},Ue.len=function(e){return ke.length(e.array)},Ue.lerp=function(e,t,n,r){return ke.lerp(e.array,t.array,n.array,r),e._dirty=!0,e},Ue.min=function(e,t,n){return ke.min(e.array,t.array,n.array),e._dirty=!0,e},Ue.max=function(e,t,n){return ke.max(e.array,t.array,n.array),e._dirty=!0,e},Ue.multiply=Ue.mul=function(e,t,n){return ke.multiply(e.array,t.array,n.array),e._dirty=!0,e},Ue.negate=function(e,t){return ke.negate(e.array,t.array),e._dirty=!0,e},Ue.normalize=function(e,t){return ke.normalize(e.array,t.array),e._dirty=!0,e},Ue.random=function(e,t){return ke.random(e.array,t),e._dirty=!0,e},Ue.scale=function(e,t,n){return ke.scale(e.array,t.array,n),e._dirty=!0,e},Ue.scaleAndAdd=function(e,t,n,r){return ke.scaleAndAdd(e.array,t.array,n.array,r),e._dirty=!0,e},Ue.squaredDistance=Ue.sqrDist=function(e,t){return ke.sqrDist(e.array,t.array)},Ue.squaredLength=Ue.sqrLen=function(e){return ke.sqrLen(e.array)},Ue.subtract=Ue.sub=function(e,t,n){return ke.subtract(e.array,t.array,n.array),e._dirty=!0,e},Ue.transformMat3=function(e,t,n){return ke.transformMat3(e.array,t.array,n.array),e._dirty=!0,e},Ue.transformMat4=function(e,t,n){return ke.transformMat4(e.array,t.array,n.array),e._dirty=!0,e},Ue.transformQuat=function(e,t,n){return ke.transformQuat(e.array,t.array,n.array),e._dirty=!0,e};var Xe=Math.atan2,qe=Math.asin,Ye=Math.abs;Ue.eulerFromQuat=function(e,t,n){e._dirty=!0,t=t.array;var r=e.array,i=t[0],a=t[1],o=t[2],s=t[3],l=i*i,u=a*a,c=o*o,h=s*s;switch(n=(n||"XYZ").toUpperCase()){case"XYZ":r[0]=Xe(2*(i*s-a*o),h-l-u+c),r[1]=qe($e(2*(i*o+a*s),-1,1)),r[2]=Xe(2*(o*s-i*a),h+l-u-c);break;case"YXZ":r[0]=qe($e(2*(i*s-a*o),-1,1)),r[1]=Xe(2*(i*o+a*s),h-l-u+c),r[2]=Xe(2*(i*a+o*s),h-l+u-c);break;case"ZXY":r[0]=qe($e(2*(i*s+a*o),-1,1)),r[1]=Xe(2*(a*s-o*i),h-l-u+c),r[2]=Xe(2*(o*s-i*a),h-l+u-c);break;case"ZYX":r[0]=Xe(2*(i*s+o*a),h-l-u+c),r[1]=qe($e(2*(a*s-i*o),-1,1)),r[2]=Xe(2*(i*a+o*s),h+l-u-c);break;case"YZX":r[0]=Xe(2*(i*s-o*a),h-l+u-c),r[1]=Xe(2*(a*s-i*o),h+l-u-c),r[2]=qe($e(2*(i*a+o*s),-1,1));break;case"XZY":r[0]=Xe(2*(i*s+a*o),h-l+u-c),r[1]=Xe(2*(i*o+a*s),h+l-u-c),r[2]=qe($e(2*(o*s-i*a),-1,1));break;default:console.warn("Unkown order: "+n)}return e},Ue.eulerFromMat3=function(e,t,n){var r=t.array,i=r[0],a=r[3],o=r[6],s=r[1],l=r[4],u=r[7],c=r[2],h=r[5],d=r[8],f=e.array;switch(n=(n||"XYZ").toUpperCase()){case"XYZ":f[1]=qe($e(o,-1,1)),Ye(o)<.99999?(f[0]=Xe(-u,d),f[2]=Xe(-a,i)):(f[0]=Xe(h,l),f[2]=0);break;case"YXZ":f[0]=qe(-$e(u,-1,1)),Ye(u)<.99999?(f[1]=Xe(o,d),f[2]=Xe(s,l)):(f[1]=Xe(-c,i),f[2]=0);break;case"ZXY":f[0]=qe($e(h,-1,1)),Ye(h)<.99999?(f[1]=Xe(-c,d),f[2]=Xe(-a,l)):(f[1]=0,f[2]=Xe(s,i));break;case"ZYX":f[1]=qe(-$e(c,-1,1)),Ye(c)<.99999?(f[0]=Xe(h,d),f[2]=Xe(s,i)):(f[0]=0,f[2]=Xe(-a,l));break;case"YZX":f[2]=qe($e(s,-1,1)),Ye(s)<.99999?(f[0]=Xe(-u,l),f[1]=Xe(-c,i)):(f[0]=0,f[1]=Xe(o,d));break;case"XZY":f[2]=qe(-$e(a,-1,1)),Ye(a)<.99999?(f[0]=Xe(h,l),f[1]=Xe(o,i)):(f[0]=Xe(-u,d),f[1]=0);break;default:console.warn("Unkown order: "+n)}return e._dirty=!0,e},Object.defineProperties(Ue,{POSITIVE_X:{get:function(){return new Ue(1,0,0)}},NEGATIVE_X:{get:function(){return new Ue(-1,0,0)}},POSITIVE_Y:{get:function(){return new Ue(0,1,0)}},NEGATIVE_Y:{get:function(){return new Ue(0,-1,0)}},POSITIVE_Z:{get:function(){return new Ue(0,0,1)}},NEGATIVE_Z:{get:function(){return new Ue(0,0,-1)}},UP:{get:function(){return new Ue(0,1,0)}},ZERO:{get:function(){return new Ue}}});var Ke,Ze,Je,Qe,et,tt=Ue,nt=function(e,t){this.origin=e||new tt,this.direction=t||new tt};nt.prototype={constructor:nt,intersectPlane:function(e,t){var n=e.normal.array,r=e.distance,i=this.origin.array,a=this.direction.array,o=ke.dot(n,a);if(0===o)return null;t||(t=new tt);var s=(ke.dot(n,i)-r)/o;return ke.scaleAndAdd(t.array,i,a,-s),t._dirty=!0,t},mirrorAgainstPlane:function(e){var t=ke.dot(e.normal.array,this.direction.array);ke.scaleAndAdd(this.direction.array,this.direction.array,e.normal.array,2*-t),this.direction._dirty=!0},distanceToPoint:(et=ke.create(),function(e){ke.sub(et,e,this.origin.array);var t=ke.dot(et,this.direction.array);if(t<0)return ke.distance(this.origin.array,e);var n=ke.lenSquared(et);return Math.sqrt(n-t*t)}),intersectSphere:function(){var e=ke.create();return function(t,n,r){var i=this.origin.array,a=this.direction.array;t=t.array,ke.sub(e,t,i);var o=ke.dot(e,a),s=ke.squaredLength(e)-o*o,l=n*n;if(!(s>l)){var u=Math.sqrt(l-s),c=o-u,h=o+u;return r||(r=new tt),c<0?h<0?null:(ke.scaleAndAdd(r.array,i,a,h),r):(ke.scaleAndAdd(r.array,i,a,c),r)}}}(),intersectBoundingBox:function(e,t){var n,r,i,a,o,s,l=this.direction.array,u=this.origin.array,c=e.min.array,h=e.max.array,d=1/l[0],f=1/l[1],p=1/l[2];if(d>=0?(n=(c[0]-u[0])*d,r=(h[0]-u[0])*d):(r=(c[0]-u[0])*d,n=(h[0]-u[0])*d),f>=0?(i=(c[1]-u[1])*f,a=(h[1]-u[1])*f):(a=(c[1]-u[1])*f,i=(h[1]-u[1])*f),n>a||i>r)return null;if((i>n||n!=n)&&(n=i),(a=0?(o=(c[2]-u[2])*p,s=(h[2]-u[2])*p):(s=(c[2]-u[2])*p,o=(h[2]-u[2])*p),n>s||o>r)return null;if((o>n||n!=n)&&(n=o),(s=0?n:r;return t||(t=new tt),ke.scaleAndAdd(t.array,u,l,g),t},intersectTriangle:(Ke=ke.create(),Ze=ke.create(),Je=ke.create(),Qe=ke.create(),function(e,t,n,r,i,a){var o=this.direction.array,s=this.origin.array;e=e.array,t=t.array,n=n.array,ke.sub(Ke,t,e),ke.sub(Ze,n,e),ke.cross(Qe,Ze,o);var l=ke.dot(Ke,Qe);if(r){if(l>-1e-5)return null}else if(l>-1e-5&&l<1e-5)return null;ke.sub(Je,s,e);var u=ke.dot(Qe,Je)/l;if(u<0||u>1)return null;ke.cross(Qe,Ke,Je);var c=ke.dot(o,Qe)/l;if(c<0||c>1||u+c>1)return null;ke.cross(Qe,Ke,Ze);var h=-ke.dot(Je,Qe)/l;return h<0?null:(i||(i=new tt),a&&tt.set(a,1-u-c,u,c),ke.scaleAndAdd(i.array,s,o,h),i)}),applyTransform:function(e){tt.add(this.direction,this.direction,this.origin),tt.transformMat4(this.origin,this.origin,e),tt.transformMat4(this.direction,this.direction,e),tt.sub(this.direction,this.direction,this.origin),tt.normalize(this.direction,this.direction)},copy:function(e){tt.copy(this.origin,e.origin),tt.copy(this.direction,e.direction)},clone:function(){var e=new nt;return e.copy(this),e}};var rt=nt,it={create:function(){var e=new $(4);return e[0]=0,e[1]=0,e[2]=0,e[3]=0,e},clone:function(e){var t=new $(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},fromValues:function(e,t,n,r){var i=new $(4);return i[0]=e,i[1]=t,i[2]=n,i[3]=r,i},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},set:function(e,t,n,r,i){return e[0]=t,e[1]=n,e[2]=r,e[3]=i,e},add:function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e},subtract:function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e}};it.sub=it.subtract,it.multiply=function(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e[3]=t[3]*n[3],e},it.mul=it.multiply,it.divide=function(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e[3]=t[3]/n[3],e},it.div=it.divide,it.min=function(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e[3]=Math.min(t[3],n[3]),e},it.max=function(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e[3]=Math.max(t[3],n[3]),e},it.scale=function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e},it.scaleAndAdd=function(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e[3]=t[3]+n[3]*r,e},it.distance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=t[3]-e[3];return Math.sqrt(n*n+r*r+i*i+a*a)},it.dist=it.distance,it.squaredDistance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=t[3]-e[3];return n*n+r*r+i*i+a*a},it.sqrDist=it.squaredDistance,it.length=function(e){var t=e[0],n=e[1],r=e[2],i=e[3];return Math.sqrt(t*t+n*n+r*r+i*i)},it.len=it.length,it.squaredLength=function(e){var t=e[0],n=e[1],r=e[2],i=e[3];return t*t+n*n+r*r+i*i},it.sqrLen=it.squaredLength,it.negate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=-t[3],e},it.inverse=function(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e[3]=1/t[3],e},it.normalize=function(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=n*n+r*r+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,e[3]=t[3]*o),e},it.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},it.lerp=function(e,t,n,r){var i=t[0],a=t[1],o=t[2],s=t[3];return e[0]=i+r*(n[0]-i),e[1]=a+r*(n[1]-a),e[2]=o+r*(n[2]-o),e[3]=s+r*(n[3]-s),e},it.random=function(e,t){return t=t||1,e[0]=X(),e[1]=X(),e[2]=X(),e[3]=X(),it.normalize(e,e),it.scale(e,e,t),e},it.transformMat4=function(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[3];return e[0]=n[0]*r+n[4]*i+n[8]*a+n[12]*o,e[1]=n[1]*r+n[5]*i+n[9]*a+n[13]*o,e[2]=n[2]*r+n[6]*i+n[10]*a+n[14]*o,e[3]=n[3]*r+n[7]*i+n[11]*a+n[15]*o,e},it.transformQuat=function(e,t,n){var r=t[0],i=t[1],a=t[2],o=n[0],s=n[1],l=n[2],u=n[3],c=u*r+s*a-l*i,h=u*i+l*r-o*a,d=u*a+o*i-s*r,f=-o*r-s*i-l*a;return e[0]=c*u+f*-o+h*-l-d*-s,e[1]=h*u+f*-s+d*-o-c*-l,e[2]=d*u+f*-l+c*-s-h*-o,e},it.forEach=function(){var e=it.create();return function(t,n,r,i,a,o){var s,l;for(n||(n=4),r||(r=0),l=i?Math.min(i*n+r,t.length):t.length,s=r;s.999999?(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e):(ke.cross(st,t,n),e[0]=st[0],e[1]=st[1],e[2]=st[2],e[3]=1+r,dt.normalize(e,e))}),dt.setAxes=(ct=ht.create(),function(e,t,n,r){return ct[0]=n[0],ct[3]=n[1],ct[6]=n[2],ct[1]=r[0],ct[4]=r[1],ct[7]=r[2],ct[2]=-t[0],ct[5]=-t[1],ct[8]=-t[2],dt.normalize(e,dt.fromMat3(e,ct))}),dt.clone=at.clone,dt.fromValues=at.fromValues,dt.copy=at.copy,dt.set=at.set,dt.identity=function(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e},dt.setAxisAngle=function(e,t,n){n*=.5;var r=Math.sin(n);return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=Math.cos(n),e},dt.add=at.add,dt.multiply=function(e,t,n){var r=t[0],i=t[1],a=t[2],o=t[3],s=n[0],l=n[1],u=n[2],c=n[3];return e[0]=r*c+o*s+i*u-a*l,e[1]=i*c+o*l+a*s-r*u,e[2]=a*c+o*u+r*l-i*s,e[3]=o*c-r*s-i*l-a*u,e},dt.mul=dt.multiply,dt.scale=at.scale,dt.rotateX=function(e,t,n){n*=.5;var r=t[0],i=t[1],a=t[2],o=t[3],s=Math.sin(n),l=Math.cos(n);return e[0]=r*l+o*s,e[1]=i*l+a*s,e[2]=a*l-i*s,e[3]=o*l-r*s,e},dt.rotateY=function(e,t,n){n*=.5;var r=t[0],i=t[1],a=t[2],o=t[3],s=Math.sin(n),l=Math.cos(n);return e[0]=r*l-a*s,e[1]=i*l+o*s,e[2]=a*l+r*s,e[3]=o*l-i*s,e},dt.rotateZ=function(e,t,n){n*=.5;var r=t[0],i=t[1],a=t[2],o=t[3],s=Math.sin(n),l=Math.cos(n);return e[0]=r*l+i*s,e[1]=i*l-r*s,e[2]=a*l+o*s,e[3]=o*l-a*s,e},dt.calculateW=function(e,t){var n=t[0],r=t[1],i=t[2];return e[0]=n,e[1]=r,e[2]=i,e[3]=Math.sqrt(Math.abs(1-n*n-r*r-i*i)),e},dt.dot=at.dot,dt.lerp=at.lerp,dt.slerp=function(e,t,n,r){var i,a,o,s,l,u=t[0],c=t[1],h=t[2],d=t[3],f=n[0],p=n[1],g=n[2],m=n[3];return(a=u*f+c*p+h*g+d*m)<0&&(a=-a,f=-f,p=-p,g=-g,m=-m),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-r)*i)/o,l=Math.sin(r*i)/o):(s=1-r,l=r),e[0]=s*u+l*f,e[1]=s*c+l*p,e[2]=s*h+l*g,e[3]=s*d+l*m,e},dt.invert=function(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],o=n*n+r*r+i*i+a*a,s=o?1/o:0;return e[0]=-n*s,e[1]=-r*s,e[2]=-i*s,e[3]=a*s,e},dt.conjugate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e},dt.length=at.length,dt.len=dt.length,dt.squaredLength=at.squaredLength,dt.sqrLen=dt.squaredLength,dt.normalize=at.normalize,dt.fromMat3=function(e,t){var n,r=t[0]+t[4]+t[8];if(r>0)n=Math.sqrt(r+1),e[3]=.5*n,n=.5/n,e[0]=(t[5]-t[7])*n,e[1]=(t[6]-t[2])*n,e[2]=(t[1]-t[3])*n;else{var i=0;t[4]>t[0]&&(i=1),t[8]>t[3*i+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;n=Math.sqrt(t[3*i+i]-t[3*a+a]-t[3*o+o]+1),e[i]=.5*n,n=.5/n,e[3]=(t[3*a+o]-t[3*o+a])*n,e[a]=(t[3*a+i]+t[3*i+a])*n,e[o]=(t[3*o+i]+t[3*i+o])*n}return e};var ft,pt,gt,mt,vt=dt,yt=function(){this._axisX=new tt,this._axisY=new tt,this._axisZ=new tt,this.array=Ee.create(),this._dirty=!0};yt.prototype={constructor:yt,setArray:function(e){for(var t=0;t0){var t=this.min,n=this.max,r=t.array,i=n.array;Pt(r,e[0]),Pt(i,e[0]);for(var a=1;ai[0]&&(i[0]=o[0]),o[1]>i[1]&&(i[1]=o[1]),o[2]>i[2]&&(i[2]=o[2])}t._dirty=!0,n._dirty=!0}},union:function(e){var t=this.min,n=this.max;return ke.min(t.array,t.array,e.min.array),ke.max(n.array,n.array,e.max.array),t._dirty=!0,n._dirty=!0,this},intersection:function(e){var t=this.min,n=this.max;return ke.max(t.array,t.array,e.min.array),ke.min(n.array,n.array,e.max.array),t._dirty=!0,n._dirty=!0,this},intersectBoundingBox:function(e){var t=this.min.array,n=this.max.array,r=e.min.array,i=e.max.array;return!(t[0]>i[0]||t[1]>i[1]||t[2]>i[2]||n[0]=i[0]&&n[1]>=i[1]&&n[2]>=i[2]},containPoint:function(e){var t=this.min.array,n=this.max.array,r=e.array;return t[0]<=r[0]&&t[1]<=r[1]&&t[2]<=r[2]&&n[0]>=r[0]&&n[1]>=r[1]&&n[2]>=r[2]},isFinite:function(){var e=this.min.array,t=this.max.array;return isFinite(e[0])&&isFinite(e[1])&&isFinite(e[2])&&isFinite(t[0])&&isFinite(t[1])&&isFinite(t[2])},applyTransform:function(e){this.transformFrom(this,e)},transformFrom:(Ot=ke.create(),Tt=ke.create(),At=ke.create(),Mt=ke.create(),Et=ke.create(),It=ke.create(),function(e,t){var n=e.min.array,r=e.max.array,i=t.array;return Ot[0]=i[0]*n[0],Ot[1]=i[1]*n[0],Ot[2]=i[2]*n[0],Tt[0]=i[0]*r[0],Tt[1]=i[1]*r[0],Tt[2]=i[2]*r[0],At[0]=i[4]*n[1],At[1]=i[5]*n[1],At[2]=i[6]*n[1],Mt[0]=i[4]*r[1],Mt[1]=i[5]*r[1],Mt[2]=i[6]*r[1],Et[0]=i[8]*n[2],Et[1]=i[9]*n[2],Et[2]=i[10]*n[2],It[0]=i[8]*r[2],It[1]=i[9]*r[2],It[2]=i[10]*r[2],n=this.min.array,r=this.max.array,n[0]=Math.min(Ot[0],Tt[0])+Math.min(At[0],Mt[0])+Math.min(Et[0],It[0])+i[12],n[1]=Math.min(Ot[1],Tt[1])+Math.min(At[1],Mt[1])+Math.min(Et[1],It[1])+i[13],n[2]=Math.min(Ot[2],Tt[2])+Math.min(At[2],Mt[2])+Math.min(Et[2],It[2])+i[14],r[0]=Math.max(Ot[0],Tt[0])+Math.max(At[0],Mt[0])+Math.max(Et[0],It[0])+i[12],r[1]=Math.max(Ot[1],Tt[1])+Math.max(At[1],Mt[1])+Math.max(Et[1],It[1])+i[13],r[2]=Math.max(Ot[2],Tt[2])+Math.max(At[2],Mt[2])+Math.max(Et[2],It[2])+i[14],this.min._dirty=!0,this.max._dirty=!0,this}),applyProjection:function(e){var t=this.min.array,n=this.max.array,r=e.array,i=t[0],a=t[1],o=t[2],s=n[0],l=n[1],u=t[2],c=n[0],h=n[1],d=n[2];if(1===r[15])t[0]=r[0]*i+r[12],t[1]=r[5]*a+r[13],n[2]=r[10]*o+r[14],n[0]=r[0]*c+r[12],n[1]=r[5]*h+r[13],t[2]=r[10]*d+r[14];else{var f=-1/o;t[0]=r[0]*i*f,t[1]=r[5]*a*f,n[2]=(r[10]*o+r[14])*f,f=-1/u,n[0]=r[0]*s*f,n[1]=r[5]*l*f,f=-1/d,t[2]=(r[10]*d+r[14])*f}return this.min._dirty=!0,this.max._dirty=!0,this},updateVertices:function(){var e=this.vertices;if(!e){e=[];for(var t=0;t<8;t++)e[t]=ke.fromValues(0,0,0);this.vertices=e}var n=this.min.array,r=this.max.array;return Dt(e[0],n[0],n[1],n[2]),Dt(e[1],n[0],r[1],n[2]),Dt(e[2],r[0],n[1],n[2]),Dt(e[3],r[0],r[1],n[2]),Dt(e[4],n[0],n[1],r[2]),Dt(e[5],n[0],r[1],r[2]),Dt(e[6],r[0],n[1],r[2]),Dt(e[7],r[0],r[1],r[2]),this},copy:function(e){var t=this.min,n=this.max;return Pt(t.array,e.min.array),Pt(n.array,e.max.array),t._dirty=!0,n._dirty=!0,this},clone:function(){var e=new Rt;return e.copy(this),e}};var Lt,Nt,Bt,jt=Rt,Ft=0,zt=v.extend({name:"",position:null,rotation:null,scale:null,worldTransform:null,localTransform:null,autoUpdateLocalTransform:!0,_parent:null,_scene:null,_needsUpdateWorldTransform:!0,_inIterating:!1,__depth:0},function(){this.name||(this.name=(this.type||"NODE")+"_"+Ft++),this.position||(this.position=new tt),this.rotation||(this.rotation=new kt),this.scale||(this.scale=new tt(1,1,1)),this.worldTransform=new xt,this.localTransform=new xt,this._children=[]},{target:null,invisible:!1,isSkinnedMesh:function(){return!1},isRenderable:function(){return!1},setName:function(e){var t=this._scene;if(t){var n=t._nodeRepository;delete n[this.name],n[e]=this}this.name=e},add:function(e){var t=e._parent;if(t!==this){t&&t.remove(e),e._parent=this,this._children.push(e);var n=this._scene;n&&n!==e.scene&&e.traverse(this._addSelfToScene,this),e._needsUpdateWorldTransform=!0}},remove:function(e){var t=this._children,n=t.indexOf(e);n<0||(t.splice(n,1),e._parent=null,this._scene&&e.traverse(this._removeSelfFromScene,this))},removeAll:function(){for(var e=this._children,t=0;t0},beforeRender:function(e){},afterRender:function(e,t){},getBoundingBox:function(e,t){return t=zt.prototype.getBoundingBox.call(this,e,t),this.geometry&&this.geometry.boundingBox&&t.union(this.geometry.boundingBox),t},clone:(Bt=["castShadow","receiveShadow","mode","culling","cullFace","frontFace","frustumCulling","renderOrder","lineWidth","ignorePicking","ignorePreZ","ignoreGBuffer"],function(){var e=zt.prototype.clone.call(this);e.geometry=this.geometry,e.material=this.material;for(var t=0;t=0&&m[p]>1e-4&&(ke.transformMat4(b,g,d[v[p]]),ke.scaleAndAdd(y,y,b,m[p]));_.set(f,y)}}for(f=0;f>t;return e+1},dispose:function(e){var t=this._cache;t.use(e.__uid__);var n=t.get("webgl_texture");n&&e.gl.deleteTexture(n),t.deleteContext(e.__uid__)},isRenderable:function(){},isPowerOfTwo:function(){}});Object.defineProperty(Jt.prototype,"width",{get:function(){return this._width},set:function(e){this._width=e}}),Object.defineProperty(Jt.prototype,"height",{get:function(){return this._height},set:function(e){this._height=e}}),Jt.BYTE=x.BYTE,Jt.UNSIGNED_BYTE=x.UNSIGNED_BYTE,Jt.SHORT=x.SHORT,Jt.UNSIGNED_SHORT=x.UNSIGNED_SHORT,Jt.INT=x.INT,Jt.UNSIGNED_INT=x.UNSIGNED_INT,Jt.FLOAT=x.FLOAT,Jt.HALF_FLOAT=36193,Jt.UNSIGNED_INT_24_8_WEBGL=34042,Jt.DEPTH_COMPONENT=x.DEPTH_COMPONENT,Jt.DEPTH_STENCIL=x.DEPTH_STENCIL,Jt.ALPHA=x.ALPHA,Jt.RGB=x.RGB,Jt.RGBA=x.RGBA,Jt.LUMINANCE=x.LUMINANCE,Jt.LUMINANCE_ALPHA=x.LUMINANCE_ALPHA,Jt.SRGB=35904,Jt.SRGB_ALPHA=35906,Jt.COMPRESSED_RGB_S3TC_DXT1_EXT=33776,Jt.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777,Jt.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778,Jt.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779,Jt.NEAREST=x.NEAREST,Jt.LINEAR=x.LINEAR,Jt.NEAREST_MIPMAP_NEAREST=x.NEAREST_MIPMAP_NEAREST,Jt.LINEAR_MIPMAP_NEAREST=x.LINEAR_MIPMAP_NEAREST,Jt.NEAREST_MIPMAP_LINEAR=x.NEAREST_MIPMAP_LINEAR,Jt.LINEAR_MIPMAP_LINEAR=x.LINEAR_MIPMAP_LINEAR,Jt.REPEAT=x.REPEAT,Jt.CLAMP_TO_EDGE=x.CLAMP_TO_EDGE,Jt.MIRRORED_REPEAT=x.MIRRORED_REPEAT;var Qt=Jt,en=Xt.extend({skeleton:null,joints:null},function(){this.joints||(this.joints=[])},{offsetMatrix:null,isInstancedMesh:function(){return!1},isSkinnedMesh:function(){return!!(this.skeleton&&this.joints&&this.joints.length>0)},clone:function(){var e=Xt.prototype.clone.call(this);return e.skeleton=this.skeleton,this.joints&&(e.joints=this.joints.slice()),e}});en.POINTS=x.POINTS,en.LINES=x.LINES,en.LINE_LOOP=x.LINE_LOOP,en.LINE_STRIP=x.LINE_STRIP,en.TRIANGLES=x.TRIANGLES,en.TRIANGLE_STRIP=x.TRIANGLE_STRIP,en.TRIANGLE_FAN=x.TRIANGLE_FAN,en.BACK=x.BACK,en.FRONT=x.FRONT,en.FRONT_AND_BACK=x.FRONT_AND_BACK,en.CW=x.CW,en.CCW=x.CCW;var tn=en,nn={isPowerOfTwo:function(e){return 0==(e&e-1)},nextPowerOfTwo:function(e){return e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e},nearestPowerOfTwo:function(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}},rn=nn,an=rn.isPowerOfTwo;function on(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}var sn=Qt.extend(function(){return{image:null,pixels:null,mipmaps:[],convertToPOT:!1}},{textureType:"texture2D",update:function(e){var t=e.gl;t.bindTexture(t.TEXTURE_2D,this._cache.get("webgl_texture")),this.updateCommon(e);var n=this.format,r=this.type,i=!(!this.convertToPOT||this.mipmaps.length||!this.image||this.wrapS!==Qt.REPEAT&&this.wrapT!==Qt.REPEAT||!this.NPOT);t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,i?this.wrapS:this.getAvailableWrapS()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,i?this.wrapT:this.getAvailableWrapT()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,i?this.magFilter:this.getAvailableMagFilter()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,i?this.minFilter:this.getAvailableMinFilter());var a=e.getGLExtension("EXT_texture_filter_anisotropic");(a&&this.anisotropic>1&&t.texParameterf(t.TEXTURE_2D,a.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===r)&&(e.getGLExtension("OES_texture_half_float")||(r=x.FLOAT));if(this.mipmaps.length)for(var o=this.width,s=this.height,l=0;l=Qt.COMPRESSED_RGB_S3TC_DXT1_EXT?e.compressedTexImage2D(e.TEXTURE_2D,n,a,r,i,0,t.pixels):e.texImage2D(e.TEXTURE_2D,n,a,r,i,0,a,o,t.pixels)},generateMipmap:function(e){var t=e.gl;this.useMipmap&&!this.NPOT&&(t.bindTexture(t.TEXTURE_2D,this._cache.get("webgl_texture")),t.generateMipmap(t.TEXTURE_2D))},isPowerOfTwo:function(){return an(this.width)&&an(this.height)},isRenderable:function(){return this.image?this.image.width>0&&this.image.height>0:!(!this.width||!this.height)},bind:function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,this.getWebGLTexture(e))},unbind:function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,null)},load:function(e,t){var n=w.a.createImage();t&&(n.crossOrigin=t);var r=this;return n.onload=function(){r.dirty(),r.trigger("success",r)},n.onerror=function(){r.trigger("error",r)},n.src=e,this.image=n,this}});Object.defineProperty(sn.prototype,"width",{get:function(){return this.image?this.image.width:this._width},set:function(e){this.image?console.warn("Texture from image can't set width"):(this._width!==e&&this.dirty(),this._width=e)}}),Object.defineProperty(sn.prototype,"height",{get:function(){return this.image?this.image.height:this._height},set:function(e){this.image?console.warn("Texture from image can't set height"):(this._height!==e&&this.dirty(),this._height=e)}});var ln=sn;function un(e){return{byte:w.a.Int8Array,ubyte:w.a.Uint8Array,short:w.a.Int16Array,ushort:w.a.Uint16Array}[e]||w.a.Float32Array}function cn(e){return"attr_"+e}function hn(e,t,n,r){switch(this.name=e,this.type=t,this.size=n,this.semantic=r||"",this.value=null,n){case 1:this.get=function(e){return this.value[e]},this.set=function(e,t){this.value[e]=t},this.copy=function(e,t){this.value[e]=this.value[e]};break;case 2:this.get=function(e,t){var n=this.value;return t[0]=n[2*e],t[1]=n[2*e+1],t},this.set=function(e,t){var n=this.value;n[2*e]=t[0],n[2*e+1]=t[1]},this.copy=function(e,t){var n=this.value;t*=2,n[e*=2]=n[t],n[e+1]=n[t+1]};break;case 3:this.get=function(e,t){var n=3*e,r=this.value;return t[0]=r[n],t[1]=r[n+1],t[2]=r[n+2],t},this.set=function(e,t){var n=3*e,r=this.value;r[n]=t[0],r[n+1]=t[1],r[n+2]=t[2]},this.copy=function(e,t){var n=this.value;t*=3,n[e*=3]=n[t],n[e+1]=n[t+1],n[e+2]=n[t+2]};break;case 4:this.get=function(e,t){var n=this.value,r=4*e;return t[0]=n[r],t[1]=n[r+1],t[2]=n[r+2],t[3]=n[r+3],t},this.set=function(e,t){var n=this.value,r=4*e;n[r]=t[0],n[r+1]=t[1],n[r+2]=t[2],n[r+3]=t[3]},this.copy=function(e,t){var n=this.value;t*=4,n[e*=4]=n[t],n[e+1]=n[t+1],n[e+2]=n[t+2],n[e+3]=n[t+3]}}}function dn(e,t,n,r,i){this.name=e,this.type=t,this.buffer=n,this.size=r,this.semantic=i,this.symbol="",this.needsRemove=!1}function fn(e){this.buffer=e,this.count=0}hn.prototype.init=function(e){if(!this.value||this.value.length!==e*this.size){var t=un(this.type);this.value=new t(e*this.size)}},hn.prototype.fromArray=function(e){var t,n=un(this.type);if(e[0]&&e[0].length){var r=0,i=this.size;t=new n(e.length*i);for(var a=0;a=0){t||(t=[]);var n=this.indices;return t[0]=n[3*e],t[1]=n[3*e+1],t[2]=n[3*e+2],t}},setTriangleIndices:function(e,t){var n=this.indices;n[3*e]=t[0],n[3*e+1]=t[1],n[3*e+2]=t[2]},isUseIndices:function(){return!!this.indices},initIndicesFromArray:function(e){var t,n=this.vertexCount>65535?w.a.Uint32Array:w.a.Uint16Array;if(e[0]&&e[0].length){var r=0;t=new n(3*e.length);for(var i=0;i=0&&(t.splice(n,1),delete this.attributes[e],!0)},getAttribute:function(e){return this.attributes[e]},getEnabledAttributes:function(){var e=this._enabledAttributes,t=this._attributeList;if(e)return e;for(var n=[],r=this.vertexCount,i=0;ia[0]&&(a[0]=s),l>a[1]&&(a[1]=l),u>a[2]&&(a[2]=u)}n._dirty=!0,r._dirty=!0}},generateVertexNormals:function(){if(this.vertexCount){var e=this.indices,t=this.attributes,n=t.position.value,r=t.normal.value;if(r&&r.length===n.length)for(var i=0;i65535&&(this.indices=new w.a.Uint32Array(this.indices));for(var e=this.attributes,t=this.indices,n=this.getEnabledAttributes(),r={},i=0;ithis.distance,i=1;i<8;i++)if(ke.dot(t[i].array,n)>this.distance!=r)return!0},intersectLine:(Mn=ke.create(),function(e,t,n){var r=this.distanceToPoint(e),i=this.distanceToPoint(t);if(r>0&&i>0||r<0&&i<0)return null;var a=this.normal.array,o=this.distance,s=e.array;ke.sub(Mn,t.array,e.array),ke.normalize(Mn,Mn);var l=ke.dot(a,Mn);if(0===l)return null;n||(n=new tt);var u=(ke.dot(a,s)-o)/l;return ke.scaleAndAdd(n.array,s,Mn,-u),n._dirty=!0,n}),applyTransform:(On=Ee.create(),Tn=at.create(),An=at.create(),An[3]=1,function(e){e=e.array,ke.scale(An,this.normal.array,this.distance),at.transformMat4(An,An,e),this.distance=ke.dot(An,this.normal.array),Ee.invert(On,e),Ee.transpose(On,On),Tn[3]=0,ke.copy(Tn,this.normal.array),at.transformMat4(Tn,Tn,On),ke.copy(this.normal.array,Tn)}),copy:function(e){ke.copy(this.normal.array,e.normal.array),this.normal._dirty=!0,this.distance=e.distance},clone:function(){var e=new In;return e.copy(this),e}};var kn,Dn=In,Pn=ke.set,Rn=ke.copy,Ln=ke.transformMat4,Nn=Math.min,Bn=Math.max,jn=function(){this.planes=[];for(var e=0;e<6;e++)this.planes.push(new Dn);this.boundingBox=new jt,this.vertices=[];for(e=0;e<8;e++)this.vertices[e]=ke.fromValues(0,0,0)};jn.prototype={setFromProjection:function(e){var t=this.planes,n=e.array,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],l=n[5],u=n[6],c=n[7],h=n[8],d=n[9],f=n[10],p=n[11],g=n[12],m=n[13],v=n[14],y=n[15];Pn(t[0].normal.array,o-r,c-s,p-h),t[0].distance=-(y-g),t[0].normalize(),Pn(t[1].normal.array,o+r,c+s,p+h),t[1].distance=-(y+g),t[1].normalize(),Pn(t[2].normal.array,o+i,c+l,p+d),t[2].distance=-(y+m),t[2].normalize(),Pn(t[3].normal.array,o-i,c-l,p-d),t[3].distance=-(y-m),t[3].normalize(),Pn(t[4].normal.array,o-a,c-u,p-f),t[4].distance=-(y-v),t[4].normalize(),Pn(t[5].normal.array,o+a,c+u,p+f),t[5].distance=-(y+v),t[5].normalize();var b=this.boundingBox,_=this.vertices;if(0===y){var x=l/r,w=-v/(f-1),S=-v/(f+1),C=-S/l,O=-w/l;b.min.set(-C*x,-C,S),b.max.set(C*x,C,w),Pn(_[0],-C*x,-C,S),Pn(_[1],-C*x,C,S),Pn(_[2],C*x,-C,S),Pn(_[3],C*x,C,S),Pn(_[4],-O*x,-O,w),Pn(_[5],-O*x,O,w),Pn(_[6],O*x,-O,w),Pn(_[7],O*x,O,w)}else{var T=(-1-g)/r,A=(1-g)/r,M=(1-m)/l,E=(-1-m)/l,I=(-1-v)/f,k=(1-v)/f;b.min.set(Math.min(T,A),Math.min(E,M),Math.min(k,I)),b.max.set(Math.max(A,T),Math.max(M,E),Math.max(I,k));var D=b.min.array,P=b.max.array;Pn(_[0],D[0],D[1],D[2]),Pn(_[1],D[0],P[1],D[2]),Pn(_[2],P[0],D[1],D[2]),Pn(_[3],P[0],P[1],D[2]),Pn(_[4],D[0],D[1],P[2]),Pn(_[5],D[0],P[1],P[2]),Pn(_[6],P[0],D[1],P[2]),Pn(_[7],P[0],P[1],P[2])}},getTransformedBoundingBox:(kn=ke.create(),function(e,t){var n=this.vertices,r=t.array,i=e.min,a=e.max,o=i.array,s=a.array,l=n[0];Ln(kn,l,r),Rn(o,kn),Rn(s,kn);for(var u=1;u<8;u++)l=n[u],Ln(kn,l,r),o[0]=Nn(kn[0],o[0]),o[1]=Nn(kn[1],o[1]),o[2]=Nn(kn[2],o[2]),s[0]=Bn(kn[0],s[0]),s[1]=Bn(kn[1],s[1]),s[2]=Bn(kn[2],s[2]);return i._dirty=!0,a._dirty=!0,e})};var Fn,zn,Vn,Hn=jn,Un=zt.extend(function(){return{projectionMatrix:new xt,invProjectionMatrix:new xt,viewMatrix:new xt,frustum:new Hn}},function(){this.update(!0)},{update:function(e){zt.prototype.update.call(this,e),xt.invert(this.viewMatrix,this.worldTransform),this.updateProjectionMatrix(),xt.invert(this.invProjectionMatrix,this.projectionMatrix),this.frustum.setFromProjection(this.projectionMatrix)},setViewMatrix:function(e){xt.copy(this.viewMatrix,e),xt.invert(this.worldTransform,e),this.decomposeWorldTransform()},decomposeProjectionMatrix:function(){},setProjectionMatrix:function(e){xt.copy(this.projectionMatrix,e),xt.invert(this.invProjectionMatrix,e),this.decomposeProjectionMatrix()},updateProjectionMatrix:function(){},castRay:(Fn=at.create(),function(e,t){var n=void 0!==t?t:new rt,r=e.array[0],i=e.array[1];return at.set(Fn,r,i,-1,1),at.transformMat4(Fn,Fn,this.invProjectionMatrix.array),at.transformMat4(Fn,Fn,this.worldTransform.array),ke.scale(n.origin.array,Fn,1/Fn[3]),at.set(Fn,r,i,1,1),at.transformMat4(Fn,Fn,this.invProjectionMatrix.array),at.transformMat4(Fn,Fn,this.worldTransform.array),ke.scale(Fn,Fn,1/Fn[3]),ke.sub(n.direction.array,Fn,n.origin.array),ke.normalize(n.direction.array,n.direction.array),n.direction._dirty=!0,n.origin._dirty=!0,n})}),Gn=Ee.create(),Wn=Ee.create(),$n={};function Xn(e){var t=[],n=Object.keys(e);n.sort();for(var r=0;r0&&console.warn("Found multiple camera in one scene. Use the fist one."),this._cameraList.push(e)):e instanceof En&&this.lights.push(e),e.name&&(this._nodeRepository[e.name]=e)},removeFromScene:function(e){var t;e instanceof Un?(t=this._cameraList.indexOf(e))>=0&&this._cameraList.splice(t,1):e instanceof En&&(t=this.lights.indexOf(e))>=0&&this.lights.splice(t,1),e.name&&delete this._nodeRepository[e.name]},getNode:function(e){return this._nodeRepository[e]},setMainCamera:function(e){var t=this._cameraList.indexOf(e);t>=0&&this._cameraList.splice(t,1),this._cameraList.unshift(e)},getMainCamera:function(){return this._cameraList[0]},getLights:function(){return this.lights},updateLights:function(){var e=this.lights;this._previousLightNumber=this._lightNumber;for(var t={},n=0;n0&&this._doUpdateRenderList(o,t,n,r,i)}},isFrustumCulled:(zn=new jt,Vn=new xt,function(e,t,n){var r=e.boundingBox;if(r||(r=e.skeleton&&e.skeleton.boundingBox?e.skeleton.boundingBox:e.geometry.boundingBox),!r)return!1;if(Vn.array=n,zn.transformFrom(r,Vn),e.castShadow&&this.viewBoundingBoxLastFrame.union(zn),e.frustumCulling){if(!zn.intersectBoundingBox(t.frustum.boundingBox))return!0;Vn.array=t.projectionMatrix.array,zn.max.array[2]>0&&zn.min.array[2]<0&&(zn.max.array[2]=-1e-20),zn.applyProjection(Vn);var i=zn.min.array,a=zn.max.array;if(a[0]<-1||i[0]>1||a[1]<-1||i[1]>1||a[2]<-1||i[2]>1)return!0}return!1}),_updateLightUniforms:function(){var e=this.lights;e.sort(Yn);var t=this._lightUniforms;for(var n in t)for(var r in t[n])t[n][r].value.length=0;for(var i=0;i1&&t.texParameterf(t.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===r)&&(e.getGLExtension("OES_texture_half_float")||(r=x.FLOAT));if(this.mipmaps.length)for(var a=this.width,o=this.height,s=0;s0&&e.height>0}Object.defineProperty(er.prototype,"width",{get:function(){return this.image&&this.image.px?this.image.px.width:this._width},set:function(e){this.image&&this.image.px?console.warn("Texture from image can't set width"):(this._width!==e&&this.dirty(),this._width=e)}}),Object.defineProperty(er.prototype,"height",{get:function(){return this.image&&this.image.px?this.image.px.height:this._height},set:function(e){this.image&&this.image.px?console.warn("Texture from image can't set height"):(this._height!==e&&this.dirty(),this._height=e)}});var nr=er,rr=Un.extend({fov:50,aspect:1,near:.1,far:2e3},{updateProjectionMatrix:function(){var e=this.fov/180*Math.PI;this.projectionMatrix.perspective(e,this.aspect,this.near,this.far)},decomposeProjectionMatrix:function(){var e=this.projectionMatrix.array,t=2*Math.atan(1/e[5]);this.fov=t/Math.PI*180,this.aspect=e[5]/e[0],this.near=e[14]/(e[10]-1),this.far=e[14]/(e[10]+1)},clone:function(){var e=Un.prototype.clone.call(this);return e.fov=this.fov,e.aspect=this.aspect,e.near=this.near,e.far=this.far,e}}),ir=x.FRAMEBUFFER,ar=x.RENDERBUFFER,or=x.DEPTH_ATTACHMENT,sr=x.COLOR_ATTACHMENT0,lr=v.extend({depthBuffer:!0,viewport:null,_width:0,_height:0,_textures:null,_boundRenderer:null},function(){this._cache=new Zt,this._textures={}},{getTextureWidth:function(){return this._width},getTextureHeight:function(){return this._height},bind:function(e){if(e.__currentFrameBuffer){if(e.__currentFrameBuffer===this)return;console.warn("Renderer already bound with another framebuffer. Unbind it first")}e.__currentFrameBuffer=this;var t=e.gl;t.bindFramebuffer(ir,this._getFrameBufferGL(e)),this._boundRenderer=e;var n=this._cache;n.put("viewport",e.viewport);var r,i,a=!1;for(var o in this._textures){a=!0;var s=this._textures[o];s&&(r=s.texture.width,i=s.texture.height,this._doAttach(e,s.texture,o,s.target))}this._width=r,this._height=i,!a&&this.depthBuffer&&console.error("Must attach texture before bind, or renderbuffer may have incorrect width and height."),this.viewport?e.setViewport(this.viewport):e.setViewport(0,0,r,i,1);var l=n.get("attached_textures");if(l)for(var o in l)if(!this._textures[o]){var u=l[o];this._doDetach(t,o,u)}if(!n.get("depthtexture_attached")&&this.depthBuffer){n.miss("renderbuffer")&&n.put("renderbuffer",t.createRenderbuffer());var c=n.get("renderbuffer");r===n.get("renderbuffer_width")&&i===n.get("renderbuffer_height")||(t.bindRenderbuffer(ar,c),t.renderbufferStorage(ar,t.DEPTH_COMPONENT16,r,i),n.put("renderbuffer_width",r),n.put("renderbuffer_height",i),t.bindRenderbuffer(ar,null)),n.get("renderbuffer_attached")||(t.framebufferRenderbuffer(ir,or,ar,c),n.put("renderbuffer_attached",!0))}},unbind:function(e){e.__currentFrameBuffer=null,e.gl.bindFramebuffer(ir,null),this._boundRenderer=null,this._cache.use(e.__uid__);var t=this._cache.get("viewport");t&&e.setViewport(t),this.updateMipmap(e)},updateMipmap:function(e){var t=e.gl;for(var n in this._textures){var r=this._textures[n];if(r){var i=r.texture;if(!i.NPOT&&i.useMipmap&&i.minFilter===Qt.LINEAR_MIPMAP_LINEAR){var a="textureCube"===i.textureType?x.TEXTURE_CUBE_MAP:x.TEXTURE_2D;t.bindTexture(a,i.getWebGLTexture(e)),t.generateMipmap(a),t.bindTexture(a,null)}}}},checkStatus:function(e){return e.checkFramebufferStatus(ir)},_getFrameBufferGL:function(e){var t=this._cache;return t.use(e.__uid__),t.miss("framebuffer")&&t.put("framebuffer",e.gl.createFramebuffer()),t.get("framebuffer")},attach:function(e,t,n){if(!e.width)throw new Error("The texture attached to color buffer is not a valid.");t=t||sr,n=n||x.TEXTURE_2D;var r,i=this._boundRenderer;if(i&&i.gl){var a=this._cache;a.use(i.__uid__),r=a.get("attached_textures")}var o=this._textures[t];if(!o||o.target!==n||o.texture!==e||!r||null==r[t]){var s=!0;i&&(s=this._doAttach(i,e,t,n),this.viewport||i.setViewport(0,0,e.width,e.height,1)),s&&(this._textures[t]=this._textures[t]||{},this._textures[t].texture=e,this._textures[t].target=n)}},_doAttach:function(e,t,n,r){var i=e.gl,a=t.getWebGLTexture(e),o=this._cache.get("attached_textures");if(o&&o[n]){var s=o[n];if(s.texture===t&&s.target===r)return}var l=!0;if(((n=+n)===or||n===x.DEPTH_STENCIL_ATTACHMENT)&&(e.getGLExtension("WEBGL_depth_texture")||(console.error("Depth texture is not supported by the browser"),l=!1),t.format!==x.DEPTH_COMPONENT&&t.format!==x.DEPTH_STENCIL&&(console.error("The texture attached to depth buffer is not a valid."),l=!1),l)){var u=this._cache.get("renderbuffer");u&&(i.framebufferRenderbuffer(ir,or,ar,null),i.deleteRenderbuffer(u),this._cache.put("renderbuffer",!1)),this._cache.put("renderbuffer_attached",!1),this._cache.put("depthtexture_attached",!0)}return i.framebufferTexture2D(ir,n,r,a,0),o||(o={},this._cache.put("attached_textures",o)),o[n]=o[n]||{},o[n].texture=t,o[n].target=r,l},_doDetach:function(e,t,n){e.framebufferTexture2D(ir,t,n,null,0);var r=this._cache.get("attached_textures");r&&r[t]&&(r[t]=null),t!==or&&t!==x.DEPTH_STENCIL_ATTACHMENT||this._cache.put("depthtexture_attached",!1)},detach:function(e,t){(this._textures[e]=null,this._boundRenderer)&&(this._cache.use(this._boundRenderer.__uid__),this._doDetach(this._boundRenderer.gl,e,t))},dispose:function(e){var t=e.gl,n=this._cache;n.use(e.__uid__);var r=n.get("renderbuffer");r&&t.deleteRenderbuffer(r);var i=n.get("framebuffer");i&&t.deleteFramebuffer(i),n.deleteContext(e.__uid__),this._textures={}}});lr.DEPTH_ATTACHMENT=or,lr.COLOR_ATTACHMENT0=sr,lr.STENCIL_ATTACHMENT=x.STENCIL_ATTACHMENT,lr.DEPTH_STENCIL_ATTACHMENT=x.DEPTH_STENCIL_ATTACHMENT;var ur=lr,cr=["px","nx","py","ny","pz","nz"],hr=v.extend(function(){var e={position:new tt,far:1e3,near:.1,texture:null,shadowMapPass:null},t=e._cameras={px:new rr({fov:90}),nx:new rr({fov:90}),py:new rr({fov:90}),ny:new rr({fov:90}),pz:new rr({fov:90}),nz:new rr({fov:90})};return t.px.lookAt(tt.POSITIVE_X,tt.NEGATIVE_Y),t.nx.lookAt(tt.NEGATIVE_X,tt.NEGATIVE_Y),t.py.lookAt(tt.POSITIVE_Y,tt.POSITIVE_Z),t.ny.lookAt(tt.NEGATIVE_Y,tt.NEGATIVE_Z),t.pz.lookAt(tt.POSITIVE_Z,tt.NEGATIVE_Y),t.nz.lookAt(tt.NEGATIVE_Z,tt.NEGATIVE_Y),e._frameBuffer=new ur,e},{getCamera:function(e){return this._cameras[e]},render:function(e,t,n){var r=e.gl;n||t.update();for(var i=this.texture.width,a=2*Math.atan(i/(i-.5))/Math.PI*180,o=0;o<6;o++){var s=cr[o],l=this._cameras[s];if(tt.copy(l.position,this.position),l.far=this.far,l.near=this.near,l.fov=a,this.shadowMapPass){l.update();var u=t.getBoundingBox();u.applyTransform(l.viewMatrix),t.viewBoundingBoxLastFrame.copy(u),this.shadowMapPass.render(e,t,l,!0)}this._frameBuffer.attach(this.texture,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+o),this._frameBuffer.bind(e),e.render(t,l,!0),this._frameBuffer.unbind(e)}},dispose:function(e){this._frameBuffer.dispose(e)}}),dr=xn.extend({dynamic:!1,widthSegments:1,heightSegments:1},function(){this.build()},{build:function(){for(var e=this.heightSegments,t=this.widthSegments,n=this.attributes,r=[],i=[],a=[],o=[],s=0;s<=e;s++)for(var l=s/e,u=0;u<=t;u++){var c=u/t;if(r.push([2*c-1,2*l-1,0]),i&&i.push([c,l]),a&&a.push([0,0,1]),u0?this.material.define("fragment","LOD"):this.material.undefine("fragment","LOD"),e.renderPass([this],n)}}),vr=mr;function yr(e){return e.charCodeAt(0)+(e.charCodeAt(1)<<8)+(e.charCodeAt(2)<<16)+(e.charCodeAt(3)<<24)}var br=yr("DXT1"),_r=yr("DXT3"),xr=yr("DXT5"),wr={parse:function(e,t){var n=new Int32Array(e,0,31);if(542327876!==n[0])return null;if(4&!n(20))return null;var r,i,a=n(21),o=n[4],s=n[3],l=512&n[28],u=131072&n[2];switch(a){case br:r=8,i=Qt.COMPRESSED_RGB_S3TC_DXT1_EXT;break;case _r:r=16,i=Qt.COMPRESSED_RGBA_S3TC_DXT3_EXT;break;case xr:r=16,i=Qt.COMPRESSED_RGBA_S3TC_DXT5_EXT;break;default:return null}var c=n[1]+4,h=l?6:1,d=1;u&&(d=Math.max(1,n[7]));for(var f=[],p=0;p0){var i=Math.pow(2,e[3]-128-8+r);t[n+0]=e[0]*i,t[n+1]=e[1]*i,t[n+2]=e[2]*i}else t[n+0]=0,t[n+1]=0,t[n+2]=0;return t[n+3]=1,t}function Ar(e,t,n,r){for(var i,a,o=0,s=0,l=r;l>0;)if(e[s][0]=t[n++],e[s][1]=t[n++],e[s][2]=t[n++],e[s][3]=t[n++],1===e[s][0]&&1===e[s][1]&&1===e[s][2]){for(var u=e[s][3]<>>0;u>0;u--)i=e[s-1],(a=e[s])[0]=i[0],a[1]=i[1],a[2]=i[2],a[3]=i[3],s++,l--;o+=8}else s++,l--,o=0;return n}function Mr(e,t,n,r){if(rOr)return Ar(e,t,n,r);if(2!=(i=t[n++]))return Ar(e,t,n-1,r);if(e[0][1]=t[n++],e[0][2]=t[n++],i=t[n++],(e[0][2]<<8>>>0|i)>>>0!==r)return null;for(var i=0;i<4;i++)for(var a=0;a128){o=(127&o)>>>0;for(var s=t[n++];o--;)e[a++][i]=s}else for(;o--;)e[a++][i]=t[n++]}return n}var Er={parseRGBE:function(e,t,n){null==n&&(n=0);var r=new Uint8Array(e),i=r.length;if("#?"===function(e,t,n){for(var r="",i=t;i=i)){a+=2;for(var o="";a20)return console.warn("Given image is not a height map"),e}var d,f,p,g;l%(4*r)==0?(d=o.data[l],p=o.data[l+4]):l%(4*r)==4*(r-1)?(d=o.data[l-4],p=o.data[l]):(d=o.data[l-4],p=o.data[l+4]),l<4*r?(f=o.data[l],g=o.data[l+4*r]):l>r*(i-1)*4?(f=o.data[l-4*r],g=o.data[l]):(f=o.data[l-4*r],g=o.data[l+4*r]),s.data[l]=d-p+127,s.data[l+1]=f-g+127,s.data[l+2]=255,s.data[l+3]=255}return a.putImageData(s,0,0),n},isHeightImage:function(e,t,n){if(!e||!e.width||!e.height)return!1;var r=document.createElement("canvas"),i=r.getContext("2d"),a=t||32;n=n||20,r.width=r.height=a,i.drawImage(e,0,0,a,a);for(var o=i.getImageData(0,0,a,a),s=0;sn)return!1}return!0},_fetchTexture:function(e,t,n){w.a.request.get({url:e,responseType:"arraybuffer",onload:t,onerror:n})},createChessboard:function(e,t,n,r){e=e||512,t=t||64,n=n||"black",r=r||"white";var i=Math.ceil(e/t),a=document.createElement("canvas");a.width=e,a.height=e;var o=a.getContext("2d");o.fillStyle=r,o.fillRect(0,0,e,e),o.fillStyle=n;for(var s=0;s=0||(Dr.forEach(function(t){e.on(t,this[Pr(t)],this)},this),this._meshes.push(e))},detachFromMesh:function(e){var t=this._meshes.indexOf(e);t>=0&&this._meshes.splice(t,1),Dr.forEach(function(t){e.off(t,this[Pr(t)])},this)},dispose:function(){this._meshes.forEach(function(e){this.detachFromMesh(e)},this)}};var Lr=Rr,Nr=Un.extend({left:-1,right:1,near:-1,far:1,top:1,bottom:-1},{updateProjectionMatrix:function(){this.projectionMatrix.ortho(this.left,this.right,this.bottom,this.top,this.near,this.far)},decomposeProjectionMatrix:function(){var e=this.projectionMatrix.array;this.left=(-1-e[12])/e[0],this.right=(1-e[12])/e[0],this.top=(1-e[13])/e[5],this.bottom=(-1-e[13])/e[5],this.near=-(-1-e[14])/e[10],this.far=-(1-e[14])/e[10]},clone:function(){var e=Un.prototype.clone.call(this);return e.left=this.left,e.right=this.right,e.near=this.near,e.far=this.far,e.top=this.top,e.bottom=this.bottom,e}});Te.import("\n@export clay.compositor.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n v_Texcoord = texcoord;\n gl_Position = worldViewProjection * vec4(position, 1.0);\n}\n@end");var Br=new dr,jr=new tn({geometry:Br,frustumCulling:!1}),Fr=new Nr,zr=v.extend(function(){return{fragment:"",outputs:null,material:null,blendWithPrevious:!1,clearColor:!1,clearDepth:!0}},function(){var e=new Te(Te.source("clay.compositor.vertex"),this.fragment),t=new W({shader:e});t.enableTexturesAll(),this.material=t},{setUniform:function(e,t){this.material.setUniform(e,t)},getUniform:function(e){var t=this.material.uniforms[e];if(t)return t.value},attachOutput:function(e,t){this.outputs||(this.outputs={}),t=t||x.COLOR_ATTACHMENT0,this.outputs[t]=e},detachOutput:function(e){for(var t in this.outputs)this.outputs[t]===e&&(this.outputs[t]=null)},bind:function(e,t){if(this.outputs)for(var n in this.outputs){var r=this.outputs[n];r&&t.attach(r,n)}t&&t.bind(e)},unbind:function(e,t){t.unbind(e)},render:function(e,t){var n=e.gl;if(t){this.bind(e,t);var r=e.getGLExtension("EXT_draw_buffers");if(r&&this.outputs){var i=[];for(var a in this.outputs)(a=+a)>=n.COLOR_ATTACHMENT0&&a<=n.COLOR_ATTACHMENT0+8&&i.push(a);r.drawBuffersEXT(i)}}this.trigger("beforerender",this,e);var o=this.clearDepth?n.DEPTH_BUFFER_BIT:0;if(n.depthMask(!0),this.clearColor){o|=n.COLOR_BUFFER_BIT,n.colorMask(!0,!0,!0,!0);var s=this.clearColor;Array.isArray(s)&&n.clearColor(s[0],s[1],s[2],s[3])}n.clear(o),this.blendWithPrevious?(n.enable(n.BLEND),this.material.transparent=!0):(n.disable(n.BLEND),this.material.transparent=!1),this.renderQuad(e),this.trigger("afterrender",this,e),t&&this.unbind(e,t)},renderQuad:function(e){jr.material=this.material,e.renderPass([jr],Fr)},dispose:function(e){}}),Vr={},Hr=["px","nx","py","ny","pz","nz"];Vr.prefilterEnvironmentMap=function(e,t,n,r,i){i&&r||(r=Vr.generateNormalDistribution(),i=Vr.integrateBRDF(e,r));var a=(n=n||{}).width||64,o=n.height||64,s=n.type||t.type,l=new nr({width:a,height:o,type:s,flipY:!1,mipmaps:[]});l.isPowerOfTwo()||console.warn("Width and height must be power of two to enable mipmap.");var u=Math.min(a,o),c=Math.log(u)/Math.log(2)+1,h=new W({shader:new Te({vertex:Te.source("clay.skybox.vertex"),fragment:"#define SHADER_NAME prefilter\n#define SAMPLE_NUMBER 1024\n#define PI 3.14159265358979\nuniform mat4 viewInverse : VIEWINVERSE;\nuniform samplerCube environmentMap;\nuniform sampler2D normalDistribution;\nuniform float roughness : 0.5;\nvarying vec2 v_Texcoord;\nvarying vec3 v_WorldPosition;\n@import clay.util.rgbm\nvec3 importanceSampleNormal(float i, float roughness, vec3 N) {\n vec3 H = texture2D(normalDistribution, vec2(roughness, i)).rgb;\n vec3 upVector = abs(N.y) > 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nvoid main() {\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(v_WorldPosition - eyePos);\n vec3 N = V;\n vec3 prefilteredColor = vec3(0.0);\n float totalWeight = 0.0;\n float fMaxSampleNumber = float(SAMPLE_NUMBER);\n for (int i = 0; i < SAMPLE_NUMBER; i++) {\n vec3 H = importanceSampleNormal(float(i) / fMaxSampleNumber, roughness, N);\n vec3 L = reflect(-V, H);\n float NoL = clamp(dot(N, L), 0.0, 1.0);\n if (NoL > 0.0) {\n prefilteredColor += decodeHDR(textureCube(environmentMap, L)).rgb * NoL;\n totalWeight += NoL;\n }\n }\n gl_FragColor = encodeHDR(vec4(prefilteredColor / totalWeight, 1.0));\n}\n"})});h.set("normalDistribution",r),n.encodeRGBM&&h.define("fragment","RGBM_ENCODE"),n.decodeRGBM&&h.define("fragment","RGBM_DECODE");var d,f=new Kn;if("texture2D"===t.textureType){var p=new nr({width:a,height:o,type:s===Qt.FLOAT?Qt.HALF_FLOAT:s});kr.panoramaToCubeMap(e,t,p,{encodeRGBM:n.decodeRGBM}),t=p}(d=new mr({scene:f,material:h})).material.set("environmentMap",t);var g=new hr({texture:l});n.encodeRGBM&&(s=l.type=Qt.UNSIGNED_BYTE);for(var m=new ln({width:a,height:o,type:s}),v=new ur({depthBuffer:!1}),y=w.a[s===Qt.UNSIGNED_BYTE?"Uint8Array":"Float32Array"],b=0;b 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nfloat G_Smith(float roughness, float NoV, float NoL) {\n float k = roughness * roughness / 2.0;\n float G1V = NoV / (NoV * (1.0 - k) + k);\n float G1L = NoL / (NoL * (1.0 - k) + k);\n return G1L * G1V;\n}\nvoid main() {\n vec2 uv = gl_FragCoord.xy / viewportSize;\n float NoV = uv.x;\n float roughness = uv.y;\n vec3 V;\n V.x = sqrt(1.0 - NoV * NoV);\n V.y = 0.0;\n V.z = NoV;\n float A = 0.0;\n float B = 0.0;\n for (int i = 0; i < SAMPLE_NUMBER; i++) {\n vec3 H = importanceSampleNormal(float(i) / fSampleNumber, roughness, N);\n vec3 L = reflect(-V, H);\n float NoL = clamp(L.z, 0.0, 1.0);\n float NoH = clamp(H.z, 0.0, 1.0);\n float VoH = clamp(dot(V, H), 0.0, 1.0);\n if (NoL > 0.0) {\n float G = G_Smith(roughness, NoV, NoL);\n float G_Vis = G * VoH / (NoH * NoV);\n float Fc = pow(1.0 - VoH, 5.0);\n A += (1.0 - Fc) * G_Vis;\n B += Fc * G_Vis;\n }\n }\n gl_FragColor = vec4(vec2(A, B) / fSampleNumber, 0.0, 1.0);\n}\n"}),i=new ln({width:512,height:256,type:Qt.HALF_FLOAT,wrapS:Qt.CLAMP_TO_EDGE,wrapT:Qt.CLAMP_TO_EDGE,minFilter:Qt.NEAREST,magFilter:Qt.NEAREST,useMipmap:!1});return r.setUniform("normalDistribution",t),r.setUniform("viewportSize",[512,256]),r.attachOutput(i),r.render(e,n),n.dispose(e),i},Vr.generateNormalDistribution=function(e,t){for(var n=new ln({width:e=e||256,height:t=t||1024,type:Qt.FLOAT,minFilter:Qt.NEAREST,magFilter:Qt.NEAREST,wrapS:Qt.CLAMP_TO_EDGE,wrapT:Qt.CLAMP_TO_EDGE,useMipmap:!1}),r=new Float32Array(t*e*4),i=[],a=0;a>>16)>>>0;u=(((16711935&(u=((252645135&(u=((858993459&(u=((1431655765&u)<<1|(2863311530&u)>>>1)>>>0))<<2|(3435973836&u)>>>2)>>>0))<<4|(4042322160&u)>>>4)>>>0))<<8|(4278255360&u)>>>8)>>>0)/4294967296;var c=Math.sqrt((1-u)/(1+(s*s-1)*u));i[l]=c}for(l=0;l65535?Uint32Array:Uint16Array,y=this.indices=new v(t*e*6),b=this.radius,_=this.phiStart,x=this.phiLength,w=this.thetaStart,S=this.thetaLength,C=[],O=[],T=0,A=1/(b=this.radius);for(d=0;d<=e;d++)for(h=0;h<=t;h++)u=h/t,c=d/e,o=-b*Math.cos(_+u*x)*Math.sin(w+c*S),s=b*Math.cos(w+c*S),l=b*Math.sin(_+u*x)*Math.sin(w+c*S),C[0]=o,C[1]=s,C[2]=l,O[0]=u,O[1]=c,n.set(T,C),r.set(T,O),C[0]*=A,C[1]*=A,C[2]*=A,i.set(T,C),T++;var M=t+1,E=0;for(d=0;d=0&&s.splice(e,1)}),s.push(l),this.__zr&&this.__zr.animation.addAnimator(l),l},stopAnimation:function(e){this._animators=this._animators||[];for(var t=this._animators,n=t.length,r=0;r 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.y) * weight.y;\n}\nif (weight.z > 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.z) * weight.z;\n}\nfloat weightW = 1.0-weight.x-weight.y-weight.z;\nif (weightW > 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.w) * weightW;\n}\n@end\n@export clay.chunk.instancing_header\n#ifdef INSTANCING\nattribute vec4 instanceMat1;\nattribute vec4 instanceMat2;\nattribute vec4 instanceMat3;\n#endif\n@end\n@export clay.chunk.instancing_matrix\nmat4 instanceMat = mat4(\n vec4(instanceMat1.xyz, 0.0),\n vec4(instanceMat2.xyz, 0.0),\n vec4(instanceMat3.xyz, 0.0),\n vec4(instanceMat1.w, instanceMat2.w, instanceMat3.w, 1.0)\n);\n@end\n@export clay.util.parallax_correct\nvec3 parallaxCorrect(in vec3 dir, in vec3 pos, in vec3 boxMin, in vec3 boxMax) {\n vec3 first = (boxMax - pos) / dir;\n vec3 second = (boxMin - pos) / dir;\n vec3 further = max(first, second);\n float dist = min(further.x, min(further.y, further.z));\n vec3 fixedPos = pos + dir * dist;\n vec3 boxCenter = (boxMax + boxMin) * 0.5;\n return normalize(fixedPos - boxCenter);\n}\n@end\n@export clay.util.clamp_sample\nvec4 clampSample(const in sampler2D texture, const in vec2 coord)\n{\n#ifdef STEREO\n float eye = step(0.5, coord.x) * 0.5;\n vec2 coordClamped = clamp(coord, vec2(eye, 0.0), vec2(0.5 + eye, 1.0));\n#else\n vec2 coordClamped = clamp(coord, vec2(0.0), vec2(1.0));\n#endif\n return texture2D(texture, coordClamped);\n}\n@end\n@export clay.util.ACES\nvec3 ACESToneMapping(vec3 color)\n{\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\n@end";function _i(e){return e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof Image}Object.assign(zt.prototype,yi),Te.import(bi),Te.import(Ae),Te.import("\n@export ecgl.common.transformUniforms\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\n@end\n\n@export ecgl.common.attributes\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nattribute vec3 normal : NORMAL;\n@end\n\n@export ecgl.common.uv.header\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nuniform vec2 detailUvRepeat : [1.0, 1.0];\nuniform vec2 detailUvOffset : [0.0, 0.0];\n\nvarying vec2 v_Texcoord;\nvarying vec2 v_DetailTexcoord;\n@end\n\n@export ecgl.common.uv.main\nv_Texcoord = texcoord * uvRepeat + uvOffset;\nv_DetailTexcoord = texcoord * detailUvRepeat + detailUvOffset;\n@end\n\n@export ecgl.common.uv.fragmentHeader\nvarying vec2 v_Texcoord;\nvarying vec2 v_DetailTexcoord;\n@end\n\n\n@export ecgl.common.albedo.main\n\n vec4 albedoTexel = vec4(1.0);\n#ifdef DIFFUSEMAP_ENABLED\n albedoTexel = texture2D(diffuseMap, v_Texcoord);\n #ifdef SRGB_DECODE\n albedoTexel = sRGBToLinear(albedoTexel);\n #endif\n#endif\n\n#ifdef DETAILMAP_ENABLED\n vec4 detailTexel = texture2D(detailMap, v_DetailTexcoord);\n #ifdef SRGB_DECODE\n detailTexel = sRGBToLinear(detailTexel);\n #endif\n albedoTexel.rgb = mix(albedoTexel.rgb, detailTexel.rgb, detailTexel.a);\n albedoTexel.a = detailTexel.a + (1.0 - detailTexel.a) * albedoTexel.a;\n#endif\n\n@end\n\n@export ecgl.common.wireframe.vertexHeader\n\n#ifdef WIREFRAME_QUAD\nattribute vec4 barycentric;\nvarying vec4 v_Barycentric;\n#elif defined(WIREFRAME_TRIANGLE)\nattribute vec3 barycentric;\nvarying vec3 v_Barycentric;\n#endif\n\n@end\n\n@export ecgl.common.wireframe.vertexMain\n\n#if defined(WIREFRAME_QUAD) || defined(WIREFRAME_TRIANGLE)\n v_Barycentric = barycentric;\n#endif\n\n@end\n\n\n@export ecgl.common.wireframe.fragmentHeader\n\nuniform float wireframeLineWidth : 1;\nuniform vec4 wireframeLineColor: [0, 0, 0, 0.5];\n\n#ifdef WIREFRAME_QUAD\nvarying vec4 v_Barycentric;\nfloat edgeFactor () {\n vec4 d = fwidth(v_Barycentric);\n vec4 a4 = smoothstep(vec4(0.0), d * wireframeLineWidth, v_Barycentric);\n return min(min(min(a4.x, a4.y), a4.z), a4.w);\n}\n#elif defined(WIREFRAME_TRIANGLE)\nvarying vec3 v_Barycentric;\nfloat edgeFactor () {\n vec3 d = fwidth(v_Barycentric);\n vec3 a3 = smoothstep(vec3(0.0), d * wireframeLineWidth, v_Barycentric);\n return min(min(a3.x, a3.y), a3.z);\n}\n#endif\n\n@end\n\n\n@export ecgl.common.wireframe.fragmentMain\n\n#if defined(WIREFRAME_QUAD) || defined(WIREFRAME_TRIANGLE)\n if (wireframeLineWidth > 0.) {\n vec4 lineColor = wireframeLineColor;\n#ifdef SRGB_DECODE\n lineColor = sRGBToLinear(lineColor);\n#endif\n\n gl_FragColor.rgb = mix(gl_FragColor.rgb, lineColor.rgb, (1.0 - edgeFactor()) * lineColor.a);\n }\n#endif\n@end\n\n\n\n\n@export ecgl.common.bumpMap.header\n\n#ifdef BUMPMAP_ENABLED\nuniform sampler2D bumpMap;\nuniform float bumpScale : 1.0;\n\n\nvec3 bumpNormal(vec3 surfPos, vec3 surfNormal, vec3 baseNormal)\n{\n vec2 dSTdx = dFdx(v_Texcoord);\n vec2 dSTdy = dFdy(v_Texcoord);\n\n float Hll = bumpScale * texture2D(bumpMap, v_Texcoord).x;\n float dHx = bumpScale * texture2D(bumpMap, v_Texcoord + dSTdx).x - Hll;\n float dHy = bumpScale * texture2D(bumpMap, v_Texcoord + dSTdy).x - Hll;\n\n vec3 vSigmaX = dFdx(surfPos);\n vec3 vSigmaY = dFdy(surfPos);\n vec3 vN = surfNormal;\n\n vec3 R1 = cross(vSigmaY, vN);\n vec3 R2 = cross(vN, vSigmaX);\n\n float fDet = dot(vSigmaX, R1);\n\n vec3 vGrad = sign(fDet) * (dHx * R1 + dHy * R2);\n return normalize(abs(fDet) * baseNormal - vGrad);\n\n}\n#endif\n\n@end\n\n@export ecgl.common.normalMap.vertexHeader\n\n#ifdef NORMALMAP_ENABLED\nattribute vec4 tangent : TANGENT;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@end\n\n@export ecgl.common.normalMap.vertexMain\n\n#ifdef NORMALMAP_ENABLED\n if (dot(tangent, tangent) > 0.0) {\n v_Tangent = normalize((worldInverseTranspose * vec4(tangent.xyz, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n }\n#endif\n\n@end\n\n\n@export ecgl.common.normalMap.fragmentHeader\n\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@end\n\n@export ecgl.common.normalMap.fragmentMain\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, v_DetailTexcoord).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n N = normalize(tbn * N);\n }\n }\n#endif\n@end\n\n\n\n@export ecgl.common.vertexAnimation.header\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute vec3 prevNormal;\nuniform float percent;\n#endif\n\n@end\n\n@export ecgl.common.vertexAnimation.main\n\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n vec3 norm = mix(prevNormal, normal, percent);\n#else\n vec3 pos = position;\n vec3 norm = normal;\n#endif\n\n@end\n\n\n@export ecgl.common.ssaoMap.header\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n@end\n\n@export ecgl.common.ssaoMap.main\n float ao = 1.0;\n#ifdef SSAOMAP_ENABLED\n ao = texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r;\n#endif\n@end\n\n\n\n\n@export ecgl.common.diffuseLayer.header\n\n#if (LAYER_DIFFUSEMAP_COUNT > 0)\nuniform float layerDiffuseIntensity[LAYER_DIFFUSEMAP_COUNT];\nuniform sampler2D layerDiffuseMap[LAYER_DIFFUSEMAP_COUNT];\n#endif\n\n@end\n\n@export ecgl.common.emissiveLayer.header\n\n#if (LAYER_EMISSIVEMAP_COUNT > 0)\nuniform float layerEmissionIntensity[LAYER_EMISSIVEMAP_COUNT];\nuniform sampler2D layerEmissiveMap[LAYER_EMISSIVEMAP_COUNT];\n#endif\n\n@end\n\n@export ecgl.common.layers.header\n@import ecgl.common.diffuseLayer.header\n@import ecgl.common.emissiveLayer.header\n@end\n\n@export ecgl.common.diffuseLayer.main\n\n#if (LAYER_DIFFUSEMAP_COUNT > 0)\n for (int _idx_ = 0; _idx_ < LAYER_DIFFUSEMAP_COUNT; _idx_++) {{\n float intensity = layerDiffuseIntensity[_idx_];\n vec4 texel2 = texture2D(layerDiffuseMap[_idx_], v_Texcoord);\n #ifdef SRGB_DECODE\n texel2 = sRGBToLinear(texel2);\n #endif\n albedoTexel.rgb = mix(albedoTexel.rgb, texel2.rgb * intensity, texel2.a);\n albedoTexel.a = texel2.a + (1.0 - texel2.a) * albedoTexel.a;\n }}\n#endif\n\n@end\n\n@export ecgl.common.emissiveLayer.main\n\n#if (LAYER_EMISSIVEMAP_COUNT > 0)\n for (int _idx_ = 0; _idx_ < LAYER_EMISSIVEMAP_COUNT; _idx_++)\n {{\n vec4 texel2 = texture2D(layerEmissiveMap[_idx_], v_Texcoord) * layerEmissionIntensity[_idx_];\n #ifdef SRGB_DECODE\n texel2 = sRGBToLinear(texel2);\n #endif\n float intensity = layerEmissionIntensity[_idx_];\n gl_FragColor.rgb += texel2.rgb * texel2.a * intensity;\n }}\n#endif\n\n@end\n"),Te.import("@export ecgl.color.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\n@import ecgl.common.uv.header\n\nattribute vec2 texcoord : TEXCOORD_0;\nattribute vec3 position: POSITION;\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nuniform float percent : 1.0;\n#endif\n\n#ifdef ATMOSPHERE_ENABLED\nattribute vec3 normal: NORMAL;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nvarying vec3 v_Normal;\n#endif\n\nvoid main()\n{\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n#else\n vec3 pos = position;\n#endif\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n @import ecgl.common.uv.main\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n#ifdef ATMOSPHERE_ENABLED\n v_Normal = normalize((worldInverseTranspose * vec4(normal, 0.0)).xyz);\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n\n}\n\n@end\n\n@export ecgl.color.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n\nuniform sampler2D diffuseMap;\nuniform sampler2D detailMap;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\n#ifdef ATMOSPHERE_ENABLED\nuniform mat4 viewTranspose: VIEWTRANSPOSE;\nuniform vec3 glowColor;\nuniform float glowPower;\nvarying vec3 v_Normal;\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n@import ecgl.common.layers.header\n\n@import ecgl.common.uv.fragmentHeader\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.util.srgb\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color);\n#else\n gl_FragColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n gl_FragColor *= v_Color;\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n gl_FragColor *= albedoTexel;\n\n#ifdef ATMOSPHERE_ENABLED\n float atmoIntensity = pow(1.0 - dot(v_Normal, (viewTranspose * vec4(0.0, 0.0, 1.0, 0.0)).xyz), glowPower);\n gl_FragColor.rgb += glowColor * atmoIntensity;\n#endif\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n\n}\n@end"),Te.import("/**\n * http: */\n\n@export ecgl.lambert.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n\n@import ecgl.common.attributes\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.vertexAnimation.header\n\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nvoid main()\n{\n @import ecgl.common.uv.main\n\n @import ecgl.common.vertexAnimation.main\n\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n v_Normal = normalize((worldInverseTranspose * vec4(norm, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n}\n\n@end\n\n\n@export ecgl.lambert.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform sampler2D diffuseMap;\nuniform sampler2D detailMap;\n\n@import ecgl.common.layers.header\n\nuniform float emissionIntensity: 1.0;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef ATMOSPHERE_ENABLED\nuniform mat4 viewTranspose: VIEWTRANSPOSE;\nuniform vec3 glowColor;\nuniform float glowPower;\n#endif\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color);\n#else\n gl_FragColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n gl_FragColor *= sRGBToLinear(v_Color);\n #else\n gl_FragColor *= v_Color;\n #endif\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n gl_FragColor *= albedoTexel;\n\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n vec3 diffuseColor = vec3(0.0, 0.0, 0.0);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int i = 0; i < AMBIENT_LIGHT_COUNT; i++)\n {\n diffuseColor += ambientLightColor[i] * ambientFactor * ao;\n }\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseColor += calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_] * ao;\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int i = 0; i < DIRECTIONAL_LIGHT_COUNT; i++)\n {\n vec3 lightDirection = -directionalLightDirection[i];\n vec3 lightColor = directionalLightColor[i];\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[i];\n }\n#endif\n\n float ndl = dot(N, normalize(lightDirection)) * shadowContrib;\n\n diffuseColor += lightColor * clamp(ndl, 0.0, 1.0);\n }\n#endif\n\n gl_FragColor.rgb *= diffuseColor;\n\n#ifdef ATMOSPHERE_ENABLED\n float atmoIntensity = pow(1.0 - dot(v_Normal, (viewTranspose * vec4(0.0, 0.0, 1.0, 0.0)).xyz), glowPower);\n gl_FragColor.rgb += glowColor * atmoIntensity;\n#endif\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end"),Te.import("@export ecgl.realistic.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n@import ecgl.common.attributes\n\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef NORMALMAP_ENABLED\nattribute vec4 tangent : TANGENT;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@import ecgl.common.vertexAnimation.header\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nvoid main()\n{\n\n @import ecgl.common.uv.main\n\n @import ecgl.common.vertexAnimation.main\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n v_Normal = normalize((worldInverseTranspose * vec4(norm, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n#ifdef NORMALMAP_ENABLED\n v_Tangent = normalize((worldInverseTranspose * vec4(tangent.xyz, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n\n}\n\n@end\n\n\n\n@export ecgl.realistic.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n#define PI 3.14159265358979\n#define ROUGHNESS_CHANEL 0\n#define METALNESS_CHANEL 1\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform sampler2D diffuseMap;\n\nuniform sampler2D detailMap;\nuniform sampler2D metalnessMap;\nuniform sampler2D roughnessMap;\n\n@import ecgl.common.layers.header\n\nuniform float emissionIntensity: 1.0;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nuniform float metalness : 0.0;\nuniform float roughness : 0.5;\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef ATMOSPHERE_ENABLED\nuniform mat4 viewTranspose: VIEWTRANSPOSE;\nuniform vec3 glowColor;\nuniform float glowPower;\n#endif\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n@import ecgl.common.normalMap.fragmentHeader\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import clay.util.rgbm\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\n\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\n\nvoid main()\n{\n vec4 albedoColor = color;\n\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n albedoColor *= sRGBToLinear(v_Color);\n #else\n albedoColor *= v_Color;\n #endif\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n albedoColor *= albedoTexel;\n\n float m = metalness;\n\n#ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, v_DetailTexcoord)[METALNESS_CHANEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n#endif\n\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 specFactor = mix(vec3(0.04), baseColor, m);\n\n float g = 1.0 - roughness;\n\n#ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, v_DetailTexcoord)[ROUGHNESS_CHANEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n#endif\n\n vec3 N = v_Normal;\n\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n@import ecgl.common.normalMap.fragmentMain\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n vec3 diffuseTerm = vec3(0.0);\n vec3 specularTerm = vec3(0.0);\n\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, specFactor);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_] * ambientFactor * ao;\n }}\n#endif\n\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_] * ao;\n }}\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -directionalLightDirection[_idx_];\n vec3 lc = directionalLightColor[_idx_];\n\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, normalize(L)), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n\n vec3 li = lc * ndl * shadowContrib;\n\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n\n\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n L = vec3(L.x, L[NORMAL_UP_AXIS], L[NORMAL_FRONT_AXIS]);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = specFactor * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n specularTerm += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2 * ao;\n }}\n#endif\n\n gl_FragColor.rgb = albedoColor.rgb * diffuseTerm + specularTerm;\n gl_FragColor.a = albedoColor.a;\n\n#ifdef ATMOSPHERE_ENABLED\n float atmoIntensity = pow(1.0 - dot(v_Normal, (viewTranspose * vec4(0.0, 0.0, 1.0, 0.0)).xyz), glowPower);\n gl_FragColor.rgb += glowColor * atmoIntensity;\n#endif\n\n#ifdef SRGB_ENCODE\n gl_FragColor = linearTosRGB(gl_FragColor);\n#endif\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end"),Te.import("@export ecgl.hatching.vertex\n\n@import ecgl.realistic.vertex\n\n@end\n\n\n@export ecgl.hatching.fragment\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform vec4 color : [0.0, 0.0, 0.0, 1.0];\nuniform vec4 paperColor : [1.0, 1.0, 1.0, 1.0];\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nuniform sampler2D hatch1;\nuniform sampler2D hatch2;\nuniform sampler2D hatch3;\nuniform sampler2D hatch4;\nuniform sampler2D hatch5;\nuniform sampler2D hatch6;\n\nfloat shade(in float tone) {\n vec4 c = vec4(1. ,1., 1., 1.);\n float step = 1. / 6.;\n vec2 uv = v_DetailTexcoord;\n if (tone <= step / 2.0) {\n c = mix(vec4(0.), texture2D(hatch6, uv), 12. * tone);\n }\n else if (tone <= step) {\n c = mix(texture2D(hatch6, uv), texture2D(hatch5, uv), 6. * tone);\n }\n if(tone > step && tone <= 2. * step){\n c = mix(texture2D(hatch5, uv), texture2D(hatch4, uv) , 6. * (tone - step));\n }\n if(tone > 2. * step && tone <= 3. * step){\n c = mix(texture2D(hatch4, uv), texture2D(hatch3, uv), 6. * (tone - 2. * step));\n }\n if(tone > 3. * step && tone <= 4. * step){\n c = mix(texture2D(hatch3, uv), texture2D(hatch2, uv), 6. * (tone - 3. * step));\n }\n if(tone > 4. * step && tone <= 5. * step){\n c = mix(texture2D(hatch2, uv), texture2D(hatch1, uv), 6. * (tone - 4. * step));\n }\n if(tone > 5. * step){\n c = mix(texture2D(hatch1, uv), vec4(1.), 6. * (tone - 5. * step));\n }\n\n return c.r;\n}\n\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n vec4 inkColor = sRGBToLinear(color);\n#else\n vec4 inkColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n inkColor *= sRGBToLinear(v_Color);\n #else\n inkColor *= v_Color;\n #endif\n#endif\n\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float tone = 0.0;\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int i = 0; i < AMBIENT_LIGHT_COUNT; i++)\n {\n tone += dot(ambientLightColor[i], w) * ambientFactor * ao;\n }\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n tone += dot(calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_], w) * ao;\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int i = 0; i < DIRECTIONAL_LIGHT_COUNT; i++)\n {\n vec3 lightDirection = -directionalLightDirection[i];\n float lightTone = dot(directionalLightColor[i], w);\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[i];\n }\n#endif\n\n float ndl = dot(N, normalize(lightDirection)) * shadowContrib;\n\n tone += lightTone * clamp(ndl, 0.0, 1.0);\n }\n#endif\n\n gl_FragColor = mix(inkColor, paperColor, shade(clamp(tone, 0.0, 1.0)));\n }\n@end\n"),Te.import("@export ecgl.sm.depth.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nuniform float percent : 1.0;\n#endif\n\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\n\nvoid main(){\n\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n#else\n vec3 pos = position;\n#endif\n\n v_ViewPosition = worldViewProjection * vec4(pos, 1.0);\n gl_Position = v_ViewPosition;\n\n v_Texcoord = texcoord;\n\n}\n@end\n\n\n\n@export ecgl.sm.depth.fragment\n\n@import clay.sm.depth.fragment\n\n@end");var xi=Kn.prototype.addToScene,wi=Kn.prototype.removeFromScene;Kn.prototype.addToScene=function(e){if(xi.call(this,e),this.__zr){var t=this.__zr;e.traverse(function(e){e.__zr=t,e.addAnimatorsToZr&&e.addAnimatorsToZr(t)})}},Kn.prototype.removeFromScene=function(e){wi.call(this,e),e.traverse(function(e){var t=e.__zr;e.__zr=null,t&&e.removeAnimatorsFromZr&&e.removeAnimatorsFromZr(t)})},W.prototype.setTextureImage=function(e,t,n,r){if(this.shader){var i,a,o=n.getZr(),s=this;return s.autoUpdateTextureStatus=!1,s.disableTexture(e),(a=t)&&"none"!==a&&(i=Si.loadTexture(t,n,r,function(t){s.enableTexture(e),o&&o.refresh()}),s.set(e,i)),i}};var Si={};Si.Renderer=He,Si.Node=zt,Si.Mesh=tn,Si.Shader=Te,Si.Material=W,Si.Texture=Qt,Si.Texture2D=ln,Si.Geometry=xn,Si.SphereGeometry=Jr,Si.PlaneGeometry=dr,Si.CubeGeometry=gr,Si.AmbientLight=Qr,Si.DirectionalLight=ei,Si.PointLight=ti,Si.SpotLight=ni,Si.PerspectiveCamera=rr,Si.OrthographicCamera=Nr,Si.Vector2=J,Si.Vector3=tt,Si.Vector4=oi,Si.Quaternion=kt,Si.Matrix2=ci,Si.Matrix2d=pi,Si.Matrix3=mi,Si.Matrix4=xt,Si.Plane=Dn,Si.Ray=rt,Si.BoundingBox=jt,Si.Frustum=Hn;var Ci=null;function Oi(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}function Ti(e){if((e.wrapS===Qt.REPEAT||e.wrapT===Qt.REPEAT)&&e.image){var t=Oi(e.width),n=Oi(e.height);if(t!==e.width||n!==e.height){var r=document.createElement("canvas");r.width=t,r.height=n,r.getContext("2d").drawImage(e.image,0,0,t,n),e.image=r}}}Si.loadTexture=function(e,t,n,r){"function"==typeof n&&(r=n,n={}),n=n||{};for(var i=Object.keys(n).sort(),a="",o=0;o3?t[3]=e[3]:t[3]=1,t):((t=r.h.parse(e||"#000",t)||[0,0,0,0])[0]/=255,t[1]/=255,t[2]/=255,t)},Si.directionFromAlphaBeta=function(e,t){var n=e/180*Math.PI+Math.PI/2,r=-t/180*Math.PI+Math.PI/2,i=[],a=Math.sin(n);return i[0]=a*Math.cos(r),i[1]=-Math.cos(n),i[2]=a*Math.sin(r),i},Si.getShadowResolution=function(e){var t=1024;switch(e){case"low":t=512;break;case"medium":break;case"high":t=2048;break;case"ultra":t=4096}return t},Si.COMMON_SHADERS=["lambert","color","realistic","hatching","shadow"],Si.createShader=function(e){"ecgl.shadow"===e&&(e="ecgl.displayShadow");var t=Te.source(e+".vertex"),n=Te.source(e+".fragment");t||console.error("Vertex shader of '%s' not exits",e),n||console.error("Fragment shader of '%s' not exits",e);var r=new Te(t,n);return r.name=e,r},Si.createMaterial=function(e,t){t instanceof Array||(t=[t]);var n=Si.createShader(e),r=new W({shader:n});return t.forEach(function(e){"string"==typeof e&&r.define(e)}),r},Si.setMaterialFromModel=function(e,t,n,r){t.autoUpdateTextureStatus=!1;var i=n.getModel(e+"Material"),a=i.get("detailTexture"),o=Zr.firstNotNull(i.get("textureTiling"),1),s=Zr.firstNotNull(i.get("textureOffset"),0);"number"==typeof o&&(o=[o,o]),"number"==typeof s&&(s=[s,s]);var l=o[0]>1||o[1]>1?Si.Texture.REPEAT:Si.Texture.CLAMP_TO_EDGE,u={anisotropic:8,wrapS:l,wrapT:l};if("realistic"===e){var c=i.get("roughness"),h=i.get("metalness");null!=h?isNaN(h)&&(t.setTextureImage("metalnessMap",h,r,u),h=Zr.firstNotNull(i.get("metalnessAdjust"),.5)):h=0,null!=c?isNaN(c)&&(t.setTextureImage("roughnessMap",c,r,u),c=Zr.firstNotNull(i.get("roughnessAdjust"),.5)):c=.5;var d=i.get("normalTexture");t.setTextureImage("detailMap",a,r,u),t.setTextureImage("normalMap",d,r,u),t.set({roughness:c,metalness:h,detailUvRepeat:o,detailUvOffset:s})}else if("lambert"===e)t.setTextureImage("detailMap",a,r,u),t.set({detailUvRepeat:o,detailUvOffset:s});else if("color"===e)t.setTextureImage("detailMap",a,r,u),t.set({detailUvRepeat:o,detailUvOffset:s});else if("hatching"===e){var f=i.get("hatchingTextures")||[];f.length;for(var p=0;p<6;p++)t.setTextureImage("hatch"+(p+1),f[p],r,{anisotropic:8,wrapS:Si.Texture.REPEAT,wrapT:Si.Texture.REPEAT});t.set({detailUvRepeat:o,detailUvOffset:s})}},Si.updateVertexAnimation=function(e,t,n,r){var i=r.get("animation"),a=r.get("animationDurationUpdate"),o=r.get("animationEasingUpdate"),s=n.shadowDepthMaterial;if(i&&t&&a>0&&t.geometry.vertexCount===n.geometry.vertexCount){n.material.define("vertex","VERTEX_ANIMATION"),n.ignorePreZ=!0,s&&s.define("vertex","VERTEX_ANIMATION");for(var l=0;l=0&&this._viewsToDispose.splice(t,1),this.views.push(e),e.layer=this;var n=this.zr;e.scene.traverse(function(e){e.__zr=n,e.addAnimatorsToZr&&e.addAnimatorsToZr(n)})}},Ei.prototype.removeView=function(e){if(e.layer===this){var t=this.views.indexOf(e);t>=0&&(this.views.splice(t,1),e.scene.traverse(Ii,this),e.layer=null,this._viewsToDispose.push(e))}},Ei.prototype.removeViewsAll=function(){this.views.forEach(function(e){e.scene.traverse(Ii,this),e.layer=null,this._viewsToDispose.push(e)},this),this.views.length=0},Ei.prototype.resize=function(e,t){this.renderer.resize(e,t)},Ei.prototype.clear=function(){var e=this.renderer.gl,t=this._backgroundColor||[0,0,0,0];e.clearColor(t[0],t[1],t[2],t[3]),e.depthMask(!0),e.colorMask(!0,!0,!0,!0),e.clear(e.DEPTH_BUFFER_BIT|e.COLOR_BUFFER_BIT)},Ei.prototype.clearDepth=function(){var e=this.renderer.gl;e.clear(e.DEPTH_BUFFER_BIT)},Ei.prototype.clearColor=function(){var e=this.renderer.gl;e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)},Ei.prototype.needsRefresh=function(){this.zr.refresh()},Ei.prototype.refresh=function(e){this._backgroundColor=e?Ai.parseColor(e):[0,0,0,0],this.renderer.clearColor=this._backgroundColor;for(var t=0;t20)){e=e.event;var r=this.pickObject(e.offsetX,e.offsetY);r&&(this._dispatchEvent(e.type,e,r),this._dispatchDataEvent(e.type,e,r));var i=this._clickToSetFocusPoint(e);if(i)i.view.setDOFFocusOnPoint(i.distance)&&this.zr.refresh()}}},Ei.prototype._clickToSetFocusPoint=function(e){for(var t=this.renderer,n=t.viewport,r=this.views.length-1;r>=0;r--){var i=this.views[r];if(i.hasDOF()&&i.containPoint(e.offsetX,e.offsetY)){this._picking.scene=i.scene,this._picking.camera=i.camera,t.viewport=i.viewport;var a=this._picking.pick(e.offsetX,e.offsetY,!0);if(a)return a.view=i,a}}t.viewport=n},Ei.prototype.onglobalout=function(e){var t=this._hovered;t&&this._dispatchEvent("mouseout",e,{target:t.target})},Ei.prototype.pickObject=function(e,t){for(var n=[],r=this.renderer,i=r.viewport,a=0;a=0&&(h.dataIndex=this._lastDataIndex,h.seriesIndex=this._lastSeriesIndex,this.zr.handler.dispatchToElement(c,"mouseout",t)),l=!0):null!=s&&s!==this._lastEventData&&(null!=this._lastEventData&&(h.eventData=this._lastEventData,this.zr.handler.dispatchToElement(c,"mouseout",t)),l=!0),this._lastEventData=s,this._lastDataIndex=a,this._lastSeriesIndex=o),h.eventData=s,h.dataIndex=a,h.seriesIndex=o,(null!=s||parseInt(a,10)>=0&&parseInt(o,10)>=0)&&(this.zr.handler.dispatchToElement(c,e,t),l&&this.zr.handler.dispatchToElement(c,"mouseover",t))},Ei.prototype._dispatchToView=function(e,t){for(var n=0;ne&&o=0&&(function(e){ji(e,"itemStyle"),ji(e,"lineStyle"),ji(e,"areaStyle"),ji(e,"label")}(t),"mapbox"===t.coordinateSystem&&(t.coordinateSystem="mapbox3D",e.mapbox3D=e.mapbox))}),Fi(e.xAxis3D),Fi(e.yAxis3D),Fi(e.zAxis3D),Fi(e.grid3D),ji(e.geo3D)});var Vi={defaultOption:{viewControl:{projection:"perspective",autoRotate:!1,autoRotateDirection:"cw",autoRotateSpeed:10,autoRotateAfterStill:3,damping:.8,rotateSensitivity:1,zoomSensitivity:1,panSensitivity:1,panMouseButton:"middle",rotateMouseButton:"left",distance:150,minDistance:40,maxDistance:400,orthographicSize:150,maxOrthographicSize:400,minOrthographicSize:20,center:[0,0,0],alpha:0,beta:0,minAlpha:-90,maxAlpha:90}},setView:function(e){e=e||{},this.option.viewControl=this.option.viewControl||{},null!=e.alpha&&(this.option.viewControl.alpha=e.alpha),null!=e.beta&&(this.option.viewControl.beta=e.beta),null!=e.distance&&(this.option.viewControl.distance=e.distance),null!=e.center&&(this.option.viewControl.center=e.center)}},Hi={defaultOption:{postEffect:{enable:!1,bloom:{enable:!0,intensity:.1},depthOfField:{enable:!1,focalRange:20,focalDistance:50,blurRadius:10,fstop:2.8,quality:"medium"},screenSpaceAmbientOcclusion:{enable:!1,radius:2,quality:"medium",intensity:1},screenSpaceReflection:{enable:!1,quality:"medium",maxRoughness:.8},colorCorrection:{enable:!0,exposure:0,brightness:0,contrast:1,saturation:1,lookupTexture:""},edge:{enable:!1},FXAA:{enable:!1}},temporalSuperSampling:{enable:"auto"}}},Ui={defaultOption:{light:{main:{shadow:!1,shadowQuality:"high",color:"#fff",intensity:1,alpha:0,beta:0},ambient:{color:"#fff",intensity:.2},ambientCubemap:{texture:null,exposure:1,diffuseIntensity:.5,specularIntensity:.5}}}},Gi=r.c.extend({type:"grid3D",dependencies:["xAxis3D","yAxis3D","zAxis3D"],defaultOption:{show:!0,zlevel:-10,left:0,top:0,width:"100%",height:"100%",environment:"auto",boxWidth:100,boxHeight:100,boxDepth:100,axisPointer:{show:!0,lineStyle:{color:"rgba(0, 0, 0, 0.8)",width:1},label:{show:!0,formatter:null,margin:8,textStyle:{fontSize:14,color:"#fff",backgroundColor:"rgba(0,0,0,0.5)",padding:3,borderRadius:3}}},axisLine:{show:!0,lineStyle:{color:"#333",width:2,type:"solid"}},axisTick:{show:!0,inside:!1,length:3,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,margin:8,textStyle:{fontSize:12}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},light:{main:{alpha:30,beta:40},ambient:{intensity:.4}},viewControl:{alpha:20,beta:40,autoRotate:!1,distance:200,minDistance:40,maxDistance:400}}});r.v.merge(Gi.prototype,Vi),r.v.merge(Gi.prototype,Hi),r.v.merge(Gi.prototype,Ui);var Wi=Gi,$i=n("PelO"),Xi=Zr.firstNotNull,qi={left:0,middle:1,right:2};function Yi(e){return e instanceof Array||(e=[e,e]),e}var Ki=v.extend(function(){return{zr:null,viewGL:null,_center:new tt,minDistance:.5,maxDistance:1.5,maxOrthographicSize:300,minOrthographicSize:30,minAlpha:-90,maxAlpha:90,minBeta:-1/0,maxBeta:1/0,autoRotateAfterStill:0,autoRotateDirection:"cw",autoRotateSpeed:60,damping:.8,rotateSensitivity:1,zoomSensitivity:1,panSensitivity:1,panMouseButton:"middle",rotateMouseButton:"left",_mode:"rotate",_camera:null,_needsUpdate:!1,_rotating:!1,_phi:0,_theta:0,_mouseX:0,_mouseY:0,_rotateVelocity:new J,_panVelocity:new J,_distance:500,_zoomSpeed:0,_stillTimeout:0,_animators:[]}},function(){["_mouseDownHandler","_mouseWheelHandler","_mouseMoveHandler","_mouseUpHandler","_pinchHandler","_contextMenuHandler","_update"].forEach(function(e){this[e]=this[e].bind(this)},this)},{init:function(){var e=this.zr;e&&(e.on("mousedown",this._mouseDownHandler),e.on("globalout",this._mouseUpHandler),e.on("mousewheel",this._mouseWheelHandler),e.on("pinch",this._pinchHandler),e.animation.on("frame",this._update),e.dom.addEventListener("contextmenu",this._contextMenuHandler))},dispose:function(){var e=this.zr;e&&(e.off("mousedown",this._mouseDownHandler),e.off("mousemove",this._mouseMoveHandler),e.off("mouseup",this._mouseUpHandler),e.off("mousewheel",this._mouseWheelHandler),e.off("pinch",this._pinchHandler),e.off("globalout",this._mouseUpHandler),e.dom.removeEventListener("contextmenu",this._contextMenuHandler),e.animation.off("frame",this._update)),this.stopAllAnimation()},getDistance:function(){return this._distance},setDistance:function(e){this._distance=e,this._needsUpdate=!0},getOrthographicSize:function(){return this._orthoSize},setOrthographicSize:function(e){this._orthoSize=e,this._needsUpdate=!0},getAlpha:function(){return this._theta/Math.PI*180},getBeta:function(){return-this._phi/Math.PI*180},getCenter:function(){return this._center.toArray()},setAlpha:function(e){e=Math.max(Math.min(this.maxAlpha,e),this.minAlpha),this._theta=e/180*Math.PI,this._needsUpdate=!0},setBeta:function(e){e=Math.max(Math.min(this.maxBeta,e),this.minBeta),this._phi=-e/180*Math.PI,this._needsUpdate=!0},setCenter:function(e){this._center.setArray(e)},setViewGL:function(e){this.viewGL=e},getCamera:function(){return this.viewGL.camera},setFromViewControlModel:function(e,t){var n=(t=t||{}).baseDistance||0,r=t.baseOrthoSize||1,i=e.get("projection");"perspective"!==i&&"orthographic"!==i&&"isometric"!==i&&(i="perspective"),this._projection=i,this.viewGL.setProjection(i);var a=e.get("distance")+n,o=e.get("orthographicSize")+r;[["damping",.8],["autoRotate",!1],["autoRotateAfterStill",3],["autoRotateDirection","cw"],["autoRotateSpeed",10],["minDistance",30],["maxDistance",400],["minOrthographicSize",30],["maxOrthographicSize",300],["minAlpha",-90],["maxAlpha",90],["minBeta",-1/0],["maxBeta",1/0],["rotateSensitivity",1],["zoomSensitivity",1],["panSensitivity",1],["panMouseButton","left"],["rotateMouseButton","middle"]].forEach(function(t){this[t[0]]=Xi(e.get(t[0]),t[1])},this),this.minDistance+=n,this.maxDistance+=n,this.minOrthographicSize+=r,this.maxOrthographicSize+=r;var s=e.ecModel,l={};["animation","animationDurationUpdate","animationEasingUpdate"].forEach(function(t){l[t]=Xi(e.get(t),s&&s.get(t))});var u=Xi(t.alpha,e.get("alpha"))||0,c=Xi(t.beta,e.get("beta"))||0,h=Xi(t.center,e.get("center"))||[0,0,0];l.animation&&l.animationDurationUpdate>0&&this._notFirst?this.animateTo({alpha:u,beta:c,center:h,distance:a,orthographicSize:o,easing:l.animationEasingUpdate,duration:l.animationDurationUpdate}):(this.setDistance(a),this.setAlpha(u),this.setBeta(c),this.setCenter(h),this.setOrthographicSize(o)),this._notFirst=!0,this._validateProperties()},_validateProperties:function(){0},animateTo:function(e){var t=this.zr,n=this,r={},i={};return null!=e.distance&&(r.distance=this.getDistance(),i.distance=e.distance),null!=e.orthographicSize&&(r.orthographicSize=this.getOrthographicSize(),i.orthographicSize=e.orthographicSize),null!=e.alpha&&(r.alpha=this.getAlpha(),i.alpha=e.alpha),null!=e.beta&&(r.beta=this.getBeta(),i.beta=e.beta),null!=e.center&&(r.center=this.getCenter(),i.center=e.center),this._addAnimator(t.animation.animate(r).when(e.duration||1e3,i).during(function(){null!=r.alpha&&n.setAlpha(r.alpha),null!=r.beta&&n.setBeta(r.beta),null!=r.distance&&n.setDistance(r.distance),null!=r.center&&n.setCenter(r.center),null!=r.orthographicSize&&n.setOrthographicSize(r.orthographicSize),n._needsUpdate=!0})).start(e.easing||"linear")},stopAllAnimation:function(){for(var e=0;e0},_update:function(e){if(this._rotating){var t=("cw"===this.autoRotateDirection?1:-1)*this.autoRotateSpeed/180*Math.PI;this._phi-=t*e/1e3,this._needsUpdate=!0}else this._rotateVelocity.len()>0&&(this._needsUpdate=!0);(Math.abs(this._zoomSpeed)>.1||this._panVelocity.len()>0)&&(this._needsUpdate=!0),this._needsUpdate&&(e=Math.min(e,50),this._updateDistanceOrSize(e),this._updatePan(e),this._updateRotate(e),this._updateTransform(),this.getCamera().update(),this.zr&&this.zr.refresh(),this.trigger("update"),this._needsUpdate=!1)},_updateRotate:function(e){var t=this._rotateVelocity;this._phi=t.y*e/20+this._phi,this._theta=t.x*e/20+this._theta,this.setAlpha(this.getAlpha()),this.setBeta(this.getBeta()),this._vectorDamping(t,Math.pow(this.damping,e/16))},_updateDistanceOrSize:function(e){"perspective"===this._projection?this._setDistance(this._distance+this._zoomSpeed*e/20):this._setOrthoSize(this._orthoSize+this._zoomSpeed*e/20),this._zoomSpeed*=Math.pow(this.damping,e/16)},_setDistance:function(e){this._distance=Math.max(Math.min(e,this.maxDistance),this.minDistance)},_setOrthoSize:function(e){this._orthoSize=Math.max(Math.min(e,this.maxOrthographicSize),this.minOrthographicSize);var t=this.getCamera(),n=this._orthoSize,r=n/this.viewGL.viewport.height*this.viewGL.viewport.width;t.left=-r/2,t.right=r/2,t.top=n/2,t.bottom=-n/2},_updatePan:function(e){var t=this._panVelocity,n=this._distance,r=this.getCamera(),i=r.worldTransform.y,a=r.worldTransform.x;this._center.scaleAndAdd(a,-t.x*n/200).scaleAndAdd(i,-t.y*n/200),this._vectorDamping(t,0)},_updateTransform:function(){var e=this.getCamera(),t=new tt,n=this._theta+Math.PI/2,r=this._phi+Math.PI/2,i=Math.sin(n);t.x=i*Math.cos(r),t.y=-Math.cos(n),t.z=i*Math.sin(r),e.position.copy(this._center).scaleAndAdd(t,this._distance),e.rotation.identity().rotateY(-this._phi).rotateX(-this._theta)},_startCountingStill:function(){clearTimeout(this._stillTimeout);var e=this.autoRotateAfterStill,t=this;!isNaN(e)&&e>0&&(this._stillTimeout=setTimeout(function(){t._rotating=!0},1e3*e))},_vectorDamping:function(e,t){var n=e.len();(n*=t)<1e-4&&(n=0),e.normalize().scale(n)},_decomposeTransform:function(){if(this.getCamera()){this.getCamera().updateWorldTransform();var e=this.getCamera().worldTransform.z,t=Math.asin(e.y),n=Math.atan2(e.x,e.z);this._theta=t,this._phi=-n,this.setBeta(this.getBeta()),this.setAlpha(this.getAlpha()),this.getCamera().aspect?this._setDistance(this.getCamera().position.dist(this._center)):this._setOrthoSize(this.getCamera().top-this.getCamera().bottom)}},_mouseDownHandler:function(e){if(!e.target&&!this._isAnimating()){var t=e.offsetX,n=e.offsetY;this.viewGL&&!this.viewGL.containPoint(t,n)||(this.zr.on("mousemove",this._mouseMoveHandler),this.zr.on("mouseup",this._mouseUpHandler),e.event.targetTouches?1===e.event.targetTouches.length&&(this._mode="rotate"):e.event.button===qi[this.rotateMouseButton]?this._mode="rotate":e.event.button===qi[this.panMouseButton]?this._mode="pan":this._mode="",this._rotateVelocity.set(0,0),this._rotating=!1,this.autoRotate&&this._startCountingStill(),this._mouseX=e.offsetX,this._mouseY=e.offsetY)}},_mouseMoveHandler:function(e){if(!(e.target&&e.target.__isGLToZRProxy||this._isAnimating())){var t=Yi(this.panSensitivity),n=Yi(this.rotateSensitivity);"rotate"===this._mode?(this._rotateVelocity.y=(e.offsetX-this._mouseX)/this.zr.getHeight()*2*n[0],this._rotateVelocity.x=(e.offsetY-this._mouseY)/this.zr.getWidth()*2*n[1]):"pan"===this._mode&&(this._panVelocity.x=(e.offsetX-this._mouseX)/this.zr.getWidth()*t[0]*400,this._panVelocity.y=(-e.offsetY+this._mouseY)/this.zr.getHeight()*t[1]*400),this._mouseX=e.offsetX,this._mouseY=e.offsetY,e.event.preventDefault()}},_mouseWheelHandler:function(e){if(!this._isAnimating()){var t=e.event.wheelDelta||-e.event.detail;this._zoomHandler(e,t)}},_pinchHandler:function(e){this._isAnimating()||(this._zoomHandler(e,e.pinchScale>1?1:-1),this._mode="")},_zoomHandler:function(e,t){if(0!==t){var n,r=e.offsetX,i=e.offsetY;if(!this.viewGL||this.viewGL.containPoint(r,i))n="perspective"===this._projection?Math.max(Math.max(Math.min(this._distance-this.minDistance,this.maxDistance-this._distance))/20,.5):Math.max(Math.max(Math.min(this._orthoSize-this.minOrthographicSize,this.maxOrthographicSize-this._orthoSize))/20,.5),this._zoomSpeed=(t>0?-1:1)*n*this.zoomSensitivity,this._rotating=!1,this.autoRotate&&"rotate"===this._mode&&this._startCountingStill(),e.event.preventDefault()}},_mouseUpHandler:function(){this.zr.off("mousemove",this._mouseMoveHandler),this.zr.off("mouseup",this._mouseUpHandler)},_isRightMouseButtonUsed:function(){return"right"===this.rotateMouseButton||"right"===this.panMouseButton},_contextMenuHandler:function(e){this._isRightMouseButtonUsed()&&e.preventDefault()},_addAnimator:function(e){var t=this._animators;return t.push(e),e.done(function(){var n=t.indexOf(e);n>=0&&t.splice(n,1)}),e}});Object.defineProperty(Ki.prototype,"autoRotate",{get:function(e){return this._autoRotate},set:function(e){this._autoRotate=e,this._rotating=e}});var Zi=Ki,Ji={convertToDynamicArray:function(e){e&&this.resetOffset();var t=this.attributes;for(var n in t)e||!t[n].value?t[n].value=[]:t[n].value=Array.prototype.slice.call(t[n].value);e||!this.indices?this.indices=[]:this.indices=Array.prototype.slice.call(this.indices)},convertToTypedArray:function(){var e=this.attributes;for(var t in e)e[t].value&&e[t].value.length>0?e[t].value=new Float32Array(e[t].value):e[t].value=null;this.indices&&this.indices.length>0&&(this.indices=this.vertexCount>65535?new Uint32Array(this.indices):new Uint16Array(this.indices)),this.dirty()}},Qi={vec2:Y,vec3:ke,vec4:at,mat2:li,mat2d:di,mat3:ht,mat4:Ee,quat:vt},ea=Qi.vec3,ta=[[0,0],[1,1]],na=xn.extend(function(){return{segmentScale:1,dynamic:!0,useNativeLine:!0,attributes:{position:new xn.Attribute("position","float",3,"POSITION"),positionPrev:new xn.Attribute("positionPrev","float",3),positionNext:new xn.Attribute("positionNext","float",3),prevPositionPrev:new xn.Attribute("prevPositionPrev","float",3),prevPosition:new xn.Attribute("prevPosition","float",3),prevPositionNext:new xn.Attribute("prevPositionNext","float",3),offset:new xn.Attribute("offset","float",1),color:new xn.Attribute("color","float",4,"COLOR")}}},{resetOffset:function(){this._vertexOffset=0,this._triangleOffset=0,this._itemVertexOffsets=[]},setVertexCount:function(e){var t=this.attributes;this.vertexCount!==e&&(t.position.init(e),t.color.init(e),this.useNativeLine||(t.positionPrev.init(e),t.positionNext.init(e),t.offset.init(e)),e>65535?this.indices instanceof Uint16Array&&(this.indices=new Uint32Array(this.indices)):this.indices instanceof Uint32Array&&(this.indices=new Uint16Array(this.indices)))},setTriangleCount:function(e){this.triangleCount!==e&&(this.indices=0===e?null:this.vertexCount>65535?new Uint32Array(3*e):new Uint16Array(3*e))},_getCubicCurveApproxStep:function(e,t,n,r){return 1/(ea.dist(e,t)+ea.dist(n,t)+ea.dist(r,n)+1)*this.segmentScale},getCubicCurveVertexCount:function(e,t,n,r){var i=this._getCubicCurveApproxStep(e,t,n,r),a=Math.ceil(1/i);return this.useNativeLine?2*a:2*a+2},getCubicCurveTriangleCount:function(e,t,n,r){var i=this._getCubicCurveApproxStep(e,t,n,r),a=Math.ceil(1/i);return this.useNativeLine?0:2*a},getLineVertexCount:function(){return this.getPolylineVertexCount(ta)},getLineTriangleCount:function(){return this.getPolylineTriangleCount(ta)},getPolylineVertexCount:function(e){var t;"number"==typeof e?t=e:t="number"!=typeof e[0]?e.length:e.length/3;return this.useNativeLine?2*(t-1):2*(t-1)+2},getPolylineTriangleCount:function(e){var t;"number"==typeof e?t=e:t="number"!=typeof e[0]?e.length:e.length/3;return this.useNativeLine?0:2*Math.max(t-1,0)},addCubicCurve:function(e,t,n,r,i,a){null==a&&(a=1);var o=e[0],s=e[1],l=e[2],u=t[0],c=t[1],h=t[2],d=n[0],f=n[1],p=n[2],g=r[0],m=r[1],v=r[2],y=this._getCubicCurveApproxStep(e,t,n,r),b=y*y,_=b*y,x=3*y,w=3*b,S=6*b,C=6*_,O=o-2*u+d,T=s-2*c+f,A=l-2*h+p,M=3*(u-d)-o+g,E=3*(c-f)-s+m,I=3*(h-p)-l+v,k=o,D=s,P=l,R=(u-o)*x+O*w+M*_,L=(c-s)*x+T*w+E*_,N=(h-l)*x+A*w+I*_,B=O*S+M*C,j=T*S+E*C,F=A*S+I*C,z=M*C,V=E*C,H=I*C,U=0,G=0,W=Math.ceil(1/y),$=new Float32Array(3*(W+1)),X=($=[],0);for(G=0;G1&&(k=R>0?Math.min(k,g):Math.max(k,g),D=L>0?Math.min(D,m):Math.max(D,m),P=N>0?Math.min(P,v):Math.max(P,v));return this.addPolyline($,i,a)},addLine:function(e,t,n,r){return this.addPolyline([e,t],n,r)},addPolyline:function(e,t,n,r,i){if(e.length){var a="number"!=typeof e[0];if(null==i&&(i=a?e.length:e.length/3),!(i<2)){null==r&&(r=0),null==n&&(n=1),this._itemVertexOffsets.push(this._vertexOffset);var o,s,l=(a="number"!=typeof e[0])?"number"!=typeof t[0]:t.length/4===i,u=this.attributes.position,c=this.attributes.positionPrev,h=this.attributes.positionNext,d=this.attributes.color,f=this.attributes.offset,p=this.indices,g=this._vertexOffset;n=Math.max(n,.01);for(var m=r;m1&&(u.copy(g,g-1),d.copy(g,g-1),g++):(m0&&(h.set(g-2,o),h.set(g-1,o)),u.set(g,o),u.set(g+1,o),d.set(g,s),d.set(g+1,s),f.set(g,n/2),f.set(g+1,-n/2),g+=2),this.useNativeLine)d.set(g,s),u.set(g,o),g++;else if(m>0){var b=3*this._triangleOffset;(p=this.indices)[b]=g-4,p[b+1]=g-3,p[b+2]=g-2,p[b+3]=g-3,p[b+4]=g-1,p[b+5]=g-2,this._triangleOffset+=2}}if(!this.useNativeLine){var _=this._vertexOffset,x=this._vertexOffset+2*i;c.copy(_,_+2),c.copy(_+1,_+3),h.copy(x-1,x-3),h.copy(x-2,x-4)}return this._vertexOffset=g,this._vertexOffset}}},setItemColor:function(e,t){for(var n=this._itemVertexOffsets[e],r=eo&&(i=this._x=0,a+=this._rowHeight+l,this._y=a,this._rowHeight=0),this._x+=t+l,this._rowHeight=Math.max(this._rowHeight,n),a+n+l>s)return null;e.x+=this.offsetX*this.dpr+i,e.y+=this.offsetY*this.dpr+a,this._zr.add(e);var u=[this.offsetX/this.width,this.offsetY/this.height];return[[i/o+u[0],a/s+u[1]],[(i+t)/o+u[0],(a+n)/s+u[1]]]},_fitElement:function(e,t,n){var r=e.getBoundingRect(),i=t/r.width,a=n/r.height;e.x=-r.x*i,e.y=-r.y*a,e.scaleX=i,e.scaleY=a,e.update()}},aa.prototype={clear:function(){for(var e=0;e=e)){var i=(n+this._nodeWidth)*this._dpr,a=(r+this._nodeHeight)*this._dpr;try{this._zr.resize({width:i,height:a})}catch(e){this._canvas.width=i,this._canvas.height=a}var o=new ia(this._zr,n,r,this._nodeWidth,this._nodeHeight,this._gap,this._dpr);return this._textureAtlasNodes.push(o),o}},add:function(e,t,n){if(this._coords[e.id])return this._coords[e.id];var r=this._getCurrentNode().add(e,t,n);if(!r){var i=this._expand();if(!i)return;r=i.add(e,t,n)}return this._coords[e.id]=r,r},getCoordsScale:function(){var e=this._dpr;return[this._nodeWidth/this._canvas.width*e,this._nodeHeight/this._canvas.height*e]},getCoords:function(e){return this._coords[e]},dispose:function(){this._zr.dispose()}};var oa=aa;function sa(){}sa.prototype={constructor:sa,setScene:function(e){this._scene=e,this._skybox&&this._skybox.attachScene(this._scene)},initLight:function(e){this._lightRoot=e,this.mainLight=new Ai.DirectionalLight({shadowBias:.005}),this.ambientLight=new Ai.AmbientLight,e.add(this.mainLight),e.add(this.ambientLight)},dispose:function(){this._lightRoot&&(this._lightRoot.remove(this.mainLight),this._lightRoot.remove(this.ambientLight))},updateLight:function(e){var t=this.mainLight,n=this.ambientLight,r=e.getModel("light"),i=r.getModel("main"),a=r.getModel("ambient");t.intensity=i.get("intensity"),n.intensity=a.get("intensity"),t.color=Ai.parseColor(i.get("color")).slice(0,3),n.color=Ai.parseColor(a.get("color")).slice(0,3);var o=i.get("alpha")||0,s=i.get("beta")||0;t.position.setArray(Ai.directionFromAlphaBeta(o,s)),t.lookAt(Ai.Vector3.ZERO),t.castShadow=i.get("shadow"),t.shadowResolution=Ai.getShadowResolution(i.get("shadowQuality"))},updateAmbientCubemap:function(e,t,n){var r=t.getModel("light.ambientCubemap"),i=r.get("texture");if(i){this._cubemapLightsCache=this._cubemapLightsCache||{};var a=this._cubemapLightsCache[i];if(!a){var o=this;a=this._cubemapLightsCache[i]=Ai.createAmbientCubemap(r.option,e,n,function(){o._isSkyboxFromAmbientCubemap&&o._skybox.setEnvironmentMap(a.specular.cubemap),n.getZr().refresh()})}this._lightRoot.add(a.diffuse),this._lightRoot.add(a.specular),this._currentCubemapLights=a}else this._currentCubemapLights&&(this._lightRoot.remove(this._currentCubemapLights.diffuse),this._lightRoot.remove(this._currentCubemapLights.specular),this._currentCubemapLights=null)},updateSkybox:function(e,t,n){var i=t.get("environment"),a=this;var o=(a._skybox=a._skybox||new mr,a._skybox);if(i&&"none"!==i)if("auto"===i)if(this._isSkyboxFromAmbientCubemap=!0,this._currentCubemapLights){var s=this._currentCubemapLights.specular.cubemap;o.setEnvironmentMap(s),this._scene&&o.attachScene(this._scene),o.material.set("lod",3)}else this._skybox&&this._skybox.detachScene();else if("object"==typeof i&&i.colorStops||"string"==typeof i&&r.h.parse(i)){this._isSkyboxFromAmbientCubemap=!1;var l=new Ai.Texture2D({anisotropic:8,flipY:!1});o.setEnvironmentMap(l);var u=l.image=document.createElement("canvas");u.width=u.height=16;var c=u.getContext("2d"),h=new r.l.Rect({shape:{x:0,y:0,width:16,height:16},style:{fill:i}});r.n(c,h),o.attachScene(this._scene)}else{this._isSkyboxFromAmbientCubemap=!1;l=Ai.loadTexture(i,n,{anisotropic:8,flipY:!1});o.setEnvironmentMap(l),o.attachScene(this._scene)}else this._skybox&&this._skybox.detachScene(this._scene),this._skybox=null;var d=t.coordinateSystem;if(this._skybox)if(!d||!d.viewGL||"auto"===i||i.match&&i.match(/.hdr$/))this._skybox.material.undefine("fragment","SRGB_DECODE");else{var f=d.viewGL.isLinearSpace()?"define":"undefine";this._skybox.material[f]("fragment","SRGB_DECODE")}}};var la,ua,ca,ha,da=sa,fa=Qi.vec3,pa=xn.extend(function(){return{segmentScale:1,useNativeLine:!0,attributes:{position:new xn.Attribute("position","float",3,"POSITION"),normal:new xn.Attribute("normal","float",3,"NORMAL"),color:new xn.Attribute("color","float",4,"COLOR")}}},{resetOffset:function(){this._vertexOffset=0,this._faceOffset=0},setQuadCount:function(e){var t=this.attributes,n=this.getQuadVertexCount()*e,r=this.getQuadTriangleCount()*e;this.vertexCount!==n&&(t.position.init(n),t.normal.init(n),t.color.init(n)),this.triangleCount!==r&&(this.indices=n>65535?new Uint32Array(3*r):new Uint16Array(3*r))},getQuadVertexCount:function(){return 4},getQuadTriangleCount:function(){return 2},addQuad:(la=fa.create(),ua=fa.create(),ca=fa.create(),ha=[0,3,1,3,2,1],function(e,t){var n=this.attributes.position,r=this.attributes.normal,i=this.attributes.color;fa.sub(la,e[1],e[0]),fa.sub(ua,e[2],e[1]),fa.cross(ca,la,ua),fa.normalize(ca,ca);for(var a=0;a<4;a++)n.set(this._vertexOffset+a,e[a]),i.set(this._vertexOffset+a,t),r.set(this._vertexOffset+a,ca);var o=3*this._faceOffset;for(a=0;a<6;a++)this.indices[o+a]=ha[a]+this._vertexOffset;this._vertexOffset+=4,this._faceOffset+=2})});r.v.defaults(pa.prototype,Ji);var ga=pa,ma=Zr.firstNotNull,va={x:0,y:2,z:1};function ya(e,t,n){this.rootNode=new Ai.Node;var r=new Ai.Mesh({geometry:new ra({useNativeLine:!1}),material:t,castShadow:!1,ignorePicking:!0,$ignorePicking:!0,renderOrder:1}),i=new Ai.Mesh({geometry:new ga,material:n,castShadow:!1,culling:!1,ignorePicking:!0,$ignorePicking:!0,renderOrder:0});this.rootNode.add(i),this.rootNode.add(r),this.faceInfo=e,this.plane=new Ai.Plane,this.linesMesh=r,this.quadsMesh=i}ya.prototype.update=function(e,t,n){var r=e.coordinateSystem,i=[r.getAxis(this.faceInfo[0]),r.getAxis(this.faceInfo[1])],a=this.linesMesh.geometry,o=this.quadsMesh.geometry;a.convertToDynamicArray(!0),o.convertToDynamicArray(!0),this._updateSplitLines(a,i,e,n),this._udpateSplitAreas(o,i,e,n),a.convertToTypedArray(),o.convertToTypedArray();var s=r.getAxis(this.faceInfo[2]);!function(e,t,n,r){var i=[0,0,0],a=r<0?n.getExtentMin():n.getExtentMax();i[va[n.dim]]=a,e.position.setArray(i),e.rotation.identity(),t.distance=-Math.abs(a),t.normal.set(0,0,0),"x"===n.dim?(e.rotation.rotateY(r*Math.PI/2),t.normal.x=-r):"z"===n.dim?(e.rotation.rotateX(-r*Math.PI/2),t.normal.y=-r):(r>0&&e.rotation.rotateY(Math.PI),t.normal.z=-r)}(this.rootNode,this.plane,s,this.faceInfo[3])},ya.prototype._updateSplitLines=function(e,t,n,i){var a=i.getDevicePixelRatio();t.forEach(function(i,o){var s=i.model,l=t[1-o].getExtent();if(!i.scale.isBlank()){var u=s.getModel("splitLine",n.getModel("splitLine"));if(u.get("show")){var c=u.getModel("lineStyle"),h=c.get("color"),d=ma(c.get("opacity"),1),f=ma(c.get("width"),1);h=r.v.isArray(h)?h:[h];for(var p=i.getTicksCoords({tickModel:u}),g=0,m=0;m65535?new Uint32Array(3*n):new Uint16Array(3*n))},setSpriteAlign:function(e,t,n,r,i){var a,o,s,l;switch(null==n&&(n="left"),null==r&&(r="top"),i=i||0,n){case"left":a=i,s=t[0]+i;break;case"center":case"middle":a=-t[0]/2,s=t[0]/2;break;case"right":a=-t[0]-i,s=-i}switch(r){case"bottom":o=i,l=t[1]+i;break;case"middle":o=-t[1]/2,l=t[1]/2;break;case"top":o=-t[1]-i,l=-i}var u=4*e,c=this.attributes.offset;c.set(u,[a,l]),c.set(u+1,[s,l]),c.set(u+2,[s,o]),c.set(u+3,[a,o])},addSprite:function(e,t,n,r,i,a){var o=this._vertexOffset;this.setSprite(this._vertexOffset/4,e,t,n,r,i,a);for(var s=0;s<_a.length;s++)this.indices[3*this._faceOffset+s]=_a[s]+o;return this._faceOffset+=2,this._vertexOffset+=4,o/4},setSprite:function(e,t,n,r,i,a,o){for(var s=4*e,l=this.attributes,u=0;u<4;u++)l.position.set(s+u,t);var c=l.texcoord;c.set(s,[r[0][0],r[0][1]]),c.set(s+1,[r[1][0],r[0][1]]),c.set(s+2,[r[1][0],r[1][1]]),c.set(s+3,[r[0][0],r[1][1]]),this.setSpriteAlign(e,n,i,a,o)}});r.v.defaults(xa.prototype,Ji);var wa=xa;Ai.Shader.import("@export ecgl.labels.vertex\n\nattribute vec3 position: POSITION;\nattribute vec2 texcoord: TEXCOORD_0;\nattribute vec2 offset;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform vec4 viewport : VIEWPORT;\n\nvarying vec2 v_Texcoord;\n\nvoid main()\n{\n vec4 proj = worldViewProjection * vec4(position, 1.0);\n\n vec2 screen = (proj.xy / abs(proj.w) + 1.0) * 0.5 * viewport.zw;\n\n screen += offset;\n\n proj.xy = (screen / viewport.zw - 0.5) * 2.0 * abs(proj.w);\n gl_Position = proj;\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n v_Texcoord = texcoord;\n}\n@end\n\n\n@export ecgl.labels.fragment\n\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\nuniform sampler2D textureAtlas;\nuniform vec2 uvScale: [1.0, 1.0];\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\nvarying float v_Miter;\n\nvarying vec2 v_Texcoord;\n\nvoid main()\n{\n gl_FragColor = vec4(color, alpha) * texture2D(textureAtlas, v_Texcoord * uvScale);\n#ifdef VERTEX_COLOR\n gl_FragColor *= v_Color;\n#endif\n}\n\n@end");var Sa=Ai.Mesh.extend(function(){return{geometry:new wa({dynamic:!0}),material:new Ai.Material({shader:Ai.createShader("ecgl.labels"),transparent:!0,depthMask:!1}),culling:!1,castShadow:!1,ignorePicking:!0}}),Ca=Zr.firstNotNull,Oa={x:0,y:2,z:1};function Ta(e,t){var n=new Ai.Mesh({geometry:new ra({useNativeLine:!1}),material:t,castShadow:!1,ignorePicking:!0,renderOrder:2}),r=new Sa;r.material.depthMask=!1;var i=new Ai.Node;i.add(n),i.add(r),this.rootNode=i,this.dim=e,this.linesMesh=n,this.labelsMesh=r,this.axisLineCoords=null,this.labelElements=[]}var Aa={x:"y",y:"x",z:"y"};Ta.prototype.update=function(e,t,n){var i=e.coordinateSystem.getAxis(this.dim),a=this.linesMesh.geometry,o=this.labelsMesh.geometry;a.convertToDynamicArray(!0),o.convertToDynamicArray(!0);var s=i.model,l=i.getExtent(),u=n.getDevicePixelRatio(),c=s.getModel("axisLine",e.getModel("axisLine")),h=s.getModel("axisTick",e.getModel("axisTick")),d=s.getModel("axisLabel",e.getModel("axisLabel")),f=c.get("lineStyle.color");if(c.get("show")){var p=c.getModel("lineStyle"),g=[0,0,0];(O=[0,0,0])[T=Oa[i.dim]]=l[0],g[T]=l[1],this.axisLineCoords=[O,g];var m=Ai.parseColor(f),v=Ca(p.get("width"),1),y=Ca(p.get("opacity"),1);m[3]*=y,a.addLine(O,g,m,v*u)}if(h.get("show")){var b=h.getModel("lineStyle"),_=Ai.parseColor(Ca(b.get("color"),f));v=Ca(b.get("width"),1);_[3]*=Ca(b.get("opacity"),1);for(var x=i.getTicksCoords(),w=h.get("length"),S=0;S 0.0) {\n currProj = clipNear(currProj, nextProj);\n }\n else if (prevProj.w > 0.0) {\n currProj = clipNear(currProj, prevProj);\n }\n }\n\n vec2 prevScreen = (prevProj.xy / abs(prevProj.w) + 1.0) * 0.5 * viewport.zw;\n vec2 currScreen = (currProj.xy / abs(currProj.w) + 1.0) * 0.5 * viewport.zw;\n vec2 nextScreen = (nextProj.xy / abs(nextProj.w) + 1.0) * 0.5 * viewport.zw;\n\n vec2 dir;\n float len = offset;\n if (position == positionPrev) {\n dir = normalize(nextScreen - currScreen);\n }\n else if (position == positionNext) {\n dir = normalize(currScreen - prevScreen);\n }\n else {\n vec2 dirA = normalize(currScreen - prevScreen);\n vec2 dirB = normalize(nextScreen - currScreen);\n\n vec2 tanget = normalize(dirA + dirB);\n\n float miter = 1.0 / max(dot(tanget, dirA), 0.5);\n len *= miter;\n dir = tanget;\n }\n\n dir = vec2(-dir.y, dir.x) * len;\n currScreen += dir;\n\n currProj.xy = (currScreen / viewport.zw - 0.5) * 2.0 * abs(currProj.w);\n@end\n\n\n@export ecgl.meshLines3D.vertex\n\nattribute vec3 position: POSITION;\nattribute vec3 positionPrev;\nattribute vec3 positionNext;\nattribute float offset;\nattribute vec4 a_Color : COLOR;\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute vec3 prevPositionPrev;\nattribute vec3 prevPositionNext;\nuniform float percent : 1.0;\n#endif\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform vec4 viewport : VIEWPORT;\nuniform float near : NEAR;\n\nvarying vec4 v_Color;\n\n@import ecgl.common.wireframe.vertexHeader\n\n@import ecgl.lines3D.clipNear\n\nvoid main()\n{\n @import ecgl.lines3D.expandLine\n\n gl_Position = currProj;\n\n v_Color = a_Color;\n\n @import ecgl.common.wireframe.vertexMain\n}\n@end\n\n\n@export ecgl.meshLines3D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.util.srgb\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color * v_Color);\n#else\n gl_FragColor = color * v_Color;\n#endif\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end",Ia=Zr.firstNotNull;Ai.Shader.import(Ea);var ka={x:0,y:2,z:1},Da=r.d.extend({type:"grid3D",__ecgl__:!0,init:function(e,t){var n=new Ai.Material({shader:Ai.createShader("ecgl.color"),depthMask:!1,transparent:!0}),r=new Ai.Material({shader:Ai.createShader("ecgl.meshLines3D"),depthMask:!1,transparent:!0});n.define("fragment","DOUBLE_SIDED"),n.define("both","VERTEX_COLOR"),this.groupGL=new Ai.Node,this._control=new Zi({zr:t.getZr()}),this._control.init(),this._faces=[["y","z","x",-1,"left"],["y","z","x",1,"right"],["x","y","z",-1,"bottom"],["x","y","z",1,"top"],["x","z","y",-1,"far"],["x","z","y",1,"near"]].map(function(e){var t=new ba(e,r,n);return this.groupGL.add(t.rootNode),t},this),this._axes=["x","y","z"].map(function(e){var t=new Ma(e,r);return this.groupGL.add(t.rootNode),t},this);var i=t.getDevicePixelRatio();this._axisLabelSurface=new oa({width:256,height:256,devicePixelRatio:i}),this._axisLabelSurface.onupdate=function(){t.getZr().refresh()},this._axisPointerLineMesh=new Ai.Mesh({geometry:new ra({useNativeLine:!1}),material:r,castShadow:!1,ignorePicking:!0,renderOrder:3}),this.groupGL.add(this._axisPointerLineMesh),this._axisPointerLabelsSurface=new oa({width:128,height:128,devicePixelRatio:i}),this._axisPointerLabelsMesh=new Sa({ignorePicking:!0,renderOrder:4,castShadow:!1}),this._axisPointerLabelsMesh.material.set("textureAtlas",this._axisPointerLabelsSurface.getTexture()),this.groupGL.add(this._axisPointerLabelsMesh),this._lightRoot=new Ai.Node,this._sceneHelper=new da,this._sceneHelper.initLight(this._lightRoot)},render:function(e,t,n){this._model=e,this._api=n;var r=e.coordinateSystem;r.viewGL.add(this._lightRoot),e.get("show")?r.viewGL.add(this.groupGL):r.viewGL.remove(this.groupGL);var i=this._control;i.setViewGL(r.viewGL);var a=e.getModel("viewControl");i.setFromViewControlModel(a,0),this._axisLabelSurface.clear(),i.off("update"),e.get("show")&&(this._faces.forEach(function(r){r.update(e,t,n)},this),this._axes.forEach(function(t){t.update(e,this._axisLabelSurface,n)},this)),i.on("update",this._onCameraChange.bind(this,e,n),this),this._sceneHelper.setScene(r.viewGL.scene),this._sceneHelper.updateLight(e),r.viewGL.setPostEffect(e.getModel("postEffect"),n),r.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling")),this._initMouseHandler(e)},afterRender:function(e,t,n,r){var i=r.renderer;this._sceneHelper.updateAmbientCubemap(i,e,n),this._sceneHelper.updateSkybox(i,e,n)},showAxisPointer:function(e,t,n,r){this._doShowAxisPointer(),this._updateAxisPointer(r.value)},hideAxisPointer:function(e,t,n,r){this._doHideAxisPointer()},_initMouseHandler:function(e){var t=e.coordinateSystem.viewGL;e.get("show")&&e.get("axisPointer.show")?t.on("mousemove",this._updateAxisPointerOnMousePosition,this):t.off("mousemove",this._updateAxisPointerOnMousePosition)},_updateAxisPointerOnMousePosition:function(e){if(!e.target){for(var t,n=this._model.coordinateSystem,r=n.viewGL,i=r.castRay(e.offsetX,e.offsetY,new Ai.Ray),a=0;a