1 |
- var __decorate=this&&this.__decorate||function(t,e,i,n){if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)return Reflect.decorate(t,e,i,n);switch(arguments.length){case 2:return t.reduceRight(function(t,e){return e&&e(t)||t},e);case 3:return t.reduceRight(function(t,n){return void(n&&n(e,i))},void 0);case 4:return t.reduceRight(function(t,n){return n&&n(e,i,t)||t},n)}},BABYLON;!function(t){var e=function(e){function i(i,n,o,a){e.call(this,a),this.name=i,this._text==o,this._font==n,this.wrapU=t.Texture.CLAMP_ADDRESSMODE,this.wrapV=t.Texture.CLAMP_ADDRESSMODE;var r=this.getFontHeight(n),l=this.getFontWidth(n);this._charSize=Math.max(r.height,l);var c=this._charSize,f=Math.ceil(this._charSize*o.length);this._texture=a.getEngine().createDynamicTexture(c,f,!1,t.Texture.NEAREST_SAMPLINGMODE);var s=this.getSize(),g=document.createElement("canvas");g.width=s.width,g.height=s.height;var h=g.getContext("2d");h.textBaseline="top",h.font=n,h.fillStyle="white",h.imageSmoothingEnabled=!1;for(var u=0;u<o.length;u++)h.fillText(o[u],0,u*this._charSize-r.offset);this.getScene().getEngine().updateDynamicTexture(this._texture,g,!1,!0)}return __extends(i,e),Object.defineProperty(i.prototype,"charSize",{get:function(){return this._charSize},enumerable:!0,configurable:!0}),i.prototype.getFontWidth=function(t){var e=document.createElement("canvas"),i=e.getContext("2d");return i.fillStyle="white",i.font=t,i.measureText("W").width},i.prototype.getFontHeight=function(t){var e=document.createElement("canvas"),i=e.getContext("2d");i.fillRect(0,0,e.width,e.height),i.textBaseline="top",i.fillStyle="white",i.font=t,i.fillText("jH|",0,0);for(var n=i.getImageData(0,0,e.width,e.height).data,o=-1,a=-1,r=0;r<e.height;r++)for(var l=0;l<e.width;l++){var c=4*(r*e.width+l);{if(0!==n[c]){-1===o&&(o=r);break}if(l===e.width-1&&-1!==o){a=r,r=e.height;break}}}return{height:a-o+1,offset:o-1}},i.prototype.clone=function(){return new i(this.name,this._font,this._text,this.getScene())},i.Parse=function(e,n){var o=t.SerializationHelper.Parse(function(){return new i(e.name,e.font,e.text,n)},e,n,null);return o},__decorate([t.serialize("font")],i.prototype,"_font"),__decorate([t.serialize("text")],i.prototype,"_text"),i}(t.BaseTexture);t.DigitalRainFontTexture=e;var i=function(i){function n(n,o,a){var r=this;i.call(this,n,"digitalrain",["digitalRainFontInfos","digitalRainOptions","cosTimeZeroOne","matrixSpeed"],["digitalRainFont"],{width:o.getEngine().getRenderWidth(),height:o.getEngine().getRenderHeight()},o,t.Texture.TRILINEAR_SAMPLINGMODE,o.getEngine(),!0),this.mixToTile=0,this.mixToNormal=0;var l="15px Monospace",c="古池や蛙飛び込む水の音ふるいけやかわずとびこむみずのおと初しぐれ猿も小蓑をほしげ也はつしぐれさるもこみのをほしげなり江戸の雨何石呑んだ時鳥えどのあめなんごくのんだほととぎす";a&&("string"==typeof a?l=a:(l=a.font||l,this.mixToTile=a.mixToTile||this.mixToTile,this.mixToNormal=a.mixToNormal||this.mixToNormal)),this._digitalRainFontTexture=new e(n,l,c,o.getScene());for(var f=this._digitalRainFontTexture.getSize(),s=0,g=0,h=new t.Matrix,u=0;16>u;u++)h.m[u]=Math.random();this.onApply=function(t){t.setTexture("digitalRainFont",r._digitalRainFontTexture),t.setFloat4("digitalRainFontInfos",r._digitalRainFontTexture.charSize,c.length,f.width,f.height),t.setFloat4("digitalRainOptions",r.width,r.height,r.mixToNormal,r.mixToTile),t.setMatrix("matrixSpeed",h),s+=.003,g=s,t.setFloat("cosTimeZeroOne",g)}}return __extends(n,i),n}(t.PostProcess);t.DigitalRainPostProcess=i}(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.digitalrainPixelShader="// Samplers.\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform sampler2D digitalRainFont;\n\n// Infos.\nuniform vec4 digitalRainFontInfos;\nuniform vec4 digitalRainOptions;\nuniform mat4 matrixSpeed;\n\nuniform float cosTimeZeroOne;\n\n// Transform color to luminance.\nfloat getLuminance(vec3 color)\n{\n return clamp(dot(color, vec3(0.2126, 0.7152, 0.0722)), 0., 1.);\n}\n\n// Main functions.\nvoid main(void) \n{\n float caracterSize = digitalRainFontInfos.x;\n float numChar = digitalRainFontInfos.y - 1.0;\n float fontx = digitalRainFontInfos.z;\n float fonty = digitalRainFontInfos.w;\n\n float screenx = digitalRainOptions.x;\n float screeny = digitalRainOptions.y;\n float ratio = screeny / fonty;\n\n float columnx = float(floor((gl_FragCoord.x) / caracterSize));\n float tileX = float(floor((gl_FragCoord.x) / caracterSize)) * caracterSize / screenx;\n float tileY = float(floor((gl_FragCoord.y) / caracterSize)) * caracterSize / screeny;\n\n vec2 tileUV = vec2(tileX, tileY);\n vec4 tileColor = texture2D(textureSampler, tileUV);\n vec4 baseColor = texture2D(textureSampler, vUV);\n\n float tileLuminance = getLuminance(tileColor.rgb);\n \n int st = int(mod(columnx, 4.0));\n float speed = cosTimeZeroOne * (sin(tileX * 314.5) * 0.5 + 0.6); \n float x = float(mod(gl_FragCoord.x, caracterSize)) / fontx;\n float y = float(mod(speed + gl_FragCoord.y / screeny, 1.0));\n y *= ratio;\n\n vec4 finalColor = texture2D(digitalRainFont, vec2(x, 1.0 - y));\n vec3 high = finalColor.rgb * (vec3(1.2,1.2,1.2) * pow(1.0 - y, 30.0));\n\n finalColor.rgb *= vec3(pow(tileLuminance, 5.0), pow(tileLuminance, 1.5), pow(tileLuminance, 3.0));\n finalColor.rgb += high;\n finalColor.rgb = clamp(finalColor.rgb, 0., 1.);\n finalColor.a = 1.0;\n\n finalColor = mix(finalColor, tileColor, digitalRainOptions.w);\n finalColor = mix(finalColor, baseColor, digitalRainOptions.z);\n\n gl_FragColor = finalColor;\n}";
|