Help
RSS
API
Feed
Maltego
Contact
Domain > www.404zero.com
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2018-09-15
83.222.14.128
(
ClassC
)
2024-11-04
13.52.115.166
(
ClassC
)
Port 443
HTTP/1.1 200 OKAccept-Ranges: bytesAge: 3444Cache-Control: public,max-age0,must-revalidateCache-Status: Netlify Edge; hitContent-Length: 32386Content-Type: text/html; charsetUTF-8Date: Mon, 04 Nov 2024 07:51:22 GMTEtag: 2567337a2481121ea42d1fbc65616d7b-sslServer: NetlifyStrict-Transport-Security: max-age31536000X-Nf-Request-Id: 01JBV2GCX4QZ4EBPCW9DKA7PZD !DOCTYPE html>html langen> head> meta http-equivContent-Type contenttext/html; charsetUTF-8> title>404.zero/title> !-- PRELOAD FONTS --> link relpreload hreffonts/IBMPlexMono-Medium.ttf asfont crossoriginanonymous /> link relpreload hreffonts/IBMPlexMono-SemiBold.ttf asfont crossoriginanonymous /> link relpreload hreffonts/IBMPlexMono-Regular.ttf asfont crossoriginanonymous /> link relpreload hreffonts/IBMPlexMono-Bold.ttf asfont crossoriginanonymous /> link relpreload hreffonts/IBMPlexMono-Light.ttf asfont crossoriginanonymous /> !-- FAVICON --> link relicon hrefico.svg> link relapple-touch-icon hrefico.png> link relicon typeimage/png hreficons/favicon16x16.png sizes16x16/> link relicon typeimage/png hreficons/favicon32x32.png sizes32x32/> link relicon typeimage/png hreficons/favicon96x96.png sizes96x96/> link relapple-touch-icon sizes72x72 hreficons/touch-ipad.png/> link relapple-touch-icon sizes114x114 hreficons/touch-iphone.png/> link relapple-touch-icon sizes152x152 hreficons/touch-ipad-ret.png/> !-- OPENGRAPH --> !-- meta http-equivX-UA-Compatible contentIEEdge,chrome1> meta nametwitter:card contentsummary /> meta nametwitter:site content@404dotzero /> meta nametwitter:creator content@404dotzero /> meta propertyog:url contenthttp://404zero.com /> meta propertyog:title content404.zero /> meta propertyog:description content404.zero /> meta propertyog:image contentog.jpg /> --> link relstylesheet hrefstyles.css> /head> body stylecursor: default;> canvas id canvas>/canvas> div idbio classinfoText> !-- p classp1>404.zero/p> --> !-- h1>404.zeroh1> --> h1>404.zero/h1> h2>This accomplished and ever-ambitious duo of A/V architects and toolmakers cook up mind-altering experiences in generative art that require expertise in math, coding and the science of sound. /h2> h2>By creating mesmerizing digital matter of frighteningly porous frontiers exclusively through coding and modular gear, they push back the limits of footage and sample-free language that is opulent and breathtakingly singular. Taking as starting points their most irrepressible fascinations with death, the unknown and the cosmos, they craft thrilling, precise, painterly code-art that broaches big philosophical questions and provides mesmerizing though highly speculative answers./h2> h2>Together, Kristina and Aleksandr create modern generative art and innovative tools that raise the bar on the synergistic possibilities of visuals and sound. Since esteblishing of 404.zero in 2016, they’ve collaborated on a slew of immersive affairs, always up for the challenge of conjuring new things—modular music, generative visuals, and media production tools. /h2> h2>They participated in many international festivals all around the world. Including Dark Mofo, MUTEK, GAMMA, Electric Castle Festival, LACMA, DIAGE, Circle of Light, e.t.c. 404’s works were selected by Japan Media Arts Festival and awarded by Genius Loci Weimar Festival, IMAP festival. Their debut music album 404.0 was released on Icelandic music label Bedroom Community in 2020./h2> h1>a href/subscribe>Subscribe -->/a>/h1> h1>Social & Contacts/h1> p>a hrefhttps://discord.gg/404zero >Discord/a>/p> p>a hrefhttps://twitter.com/404dotzero >Twitter/a>/p> p>a hrefhttps://www.instagram.com/404.zero >Instagram/a>/p> p>a hrefhttps://www.youtube.com/@404zero >Youtube/a>/p> p>a hrefhttps://vimeo.com/404zero >Vimeo/a>/p> p >a idmail stylecursor:pointer>Mail/a>/p> h1>Upcoming shows/h1> p>THREE RANDOM WORDS a hrefhttps://threerandomwords.com >November 5,6/a> a hrefhttps://discord.gg/hiddeninnoise>Discord/p> !-- p>BLACK SUNDAY (Screening) a hrefhttps://inotafestival.hu/ >INOTA Festival/a>, Hungary 30.08 - 01.09/p> p>ISOTRP (Live) a hrefhttps://www.acc.go.kr/en/event.do?PID0302&actionRead&bnkeyEM_0000007557 >ACT Festival/a>, Seoul 28.09 20:00 (KST)/p> --> h1>Latest Releases/h1> p>a href/zerror>ZERROR/a> TouchDesigner Plug-in/p> p>ISOTRP a hrefhttps://404zero.bandcamp.com/album/isotrp-2 >Bandcamp/a> a hrefhttps://music.apple.com/id/album/isotrp/1706158717>iTunes/a> a hrefhttps://open.spotify.com/album/3ktnWCodjB2RYN3moYjTwe>Spotify/a> a hrefhttps://songwhip.com/404zero/isotrp>Other/a>/p> p>a hrefhttps://youtu.be/u0KeK9RipBE >Gerasim/a> (Music Video)/p> p>a hrefhttps://youtu.be/lo4AyHpTS2E >Alices Train/a> (Music Video)/p> h1>Software and Plug-ins/h1> p>a href/zerror>ZERROR/a> plug-in for TouchDesigner/p> !-- p>a hrefpisang.html >PISANG/a> plug-in for TouchDesigner/p> --> h1>a href/installationgen>Light Installations/a>/h1> !-- iframe width560 height315 srchttps://www.youtube.com/embed/n1e6DWSnqpI titleYouTube video player frameborder0 allowaccelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share allowfullscreen>/iframe> --> p>a href/beams>3.24/a> at BEAMS, London, UK 2023/p> p>a hrefhttps://youtu.be/n1e6DWSnqpI >3.2/a> at Dark Mofo, Tasmania, 2021/p> p>a hrefhttps://youtu.be/rG9YW8tmE3Y >3.1/a> 2020/p> p>a hrefhttps://youtu.be/JW0hwo7tIWw >Arrival/a> at Avant Gardner, USA, 2019/p> p>a hrefhttps://youtu.be/ai2vYGcfzBE >8.0/a> 2019/p> p>a hrefhttps://youtu.be/xj75aTd6Gmk >8.0.1/a> 2020/p> p>a hrefhttps://vimeo.com/192918334 >No Time. No Future. Im here. RIP. /a>2016/p> h1>a href/audiovisual>Audiovisual/a>/h1> p>a hrefhttps://vimeo.com/215426395 >Phosphenes/a>/p> p>a hrefhttps://vimeo.com/406222107 >404.3/a>/p> p>a hrefhttps://vimeo.com/237152011 >Circle Of Light/a>/p> p>a hrefhttps://youtu.be/sjKIrW0mvns >Black Sunday/a>/p> p>a hrefhttps://youtu.be/sjKIrW0mvns >404.1/a>/p> p>a hrefhttps://vimeo.com/214301962 >Gig For Sleepers/a>/p> p>a hrefhttps://vimeo.com/508573357 >Deep Echo/a>/p> h1>Music/h1> p>a hrefhttps://404zero.bandcamp.com/ >Bandcamp/a>/p> p>a hrefhttps://open.spotify.com/artist/5lri0rQHZIrjykaH4jZrvq >Spotify/a>/p> p>a hrefhttps://www.deezer.com/en/artist/87130592 >Deezer/a>/p> p>a hrefhttps://music.apple.com/id/artist/404-zero/1500633430 >Apple Music/a>/p> h1>NFT/h1> p>a hrefhttps://hiddeninnoise.com/ >Hidden In Noise/a>/p> p>a hrefhttps://innoisewetrust.com/ >In Noise We Trust/a>/p> p>a hrefhttps://lightonchain.com/ >LightOnChain/a>/p> p>a hrefhttps://superrare.com/404zero >Superrare/a>/p> !-- h1>INFO/h1> p>a href >Bio/a>/p> p>a href >Press/a>/p> --> h1>Press/h1> p>a hrefhttps://block.fm/news/404-zero-interview >Block.fm jp/a>/p> p>a hrefhttps://hypebeast.com/2021/12/studio-visits-404-zero >Hypebeast/a>/p> p>a hrefhttps://louderthanwar.com/404-zero-404-0-album-review/ >Louder Than War/a>/p> p>a hrefhttps://clotmag.com/interviews/404-zero-the-architecture-of-nothingness-and-metaphysics-of-time-and-space-in-mind-bending-audiovisual-code-art >CLOT Magazine/a>/p> p>a hrefhttps://www.loudandquiet.com/reviews/404-0-404-zero/ >Loud And Quiet/a>/p> p>a hrefhttps://bedroomcommunity.net/404zero-4040 >Bedroom Community/a>/p> p>a hrefhttps://www.decodedmagazine.com/404zero-breaking-through-with-generative-art-and-modular-synthesizers/ >Decoded Magazine/a>/p> p>a hrefhttps://www.nastymagazine.com/art-culture/404-zero-the-dark-sound-of-space/ >Nasty Magazine/a>/p> p>a hrefhttps://visualatelier8.com/404zero-generating-visual-art-from-sound/ >Visualatelier 8/a>/p> p>a hrefhttp://digicult.it/design/advanced-technology-prophetic-work-and-mysterious-meanings-of-life-interview-with-404-zero/ >Digicult/a>/p> p>a hrefhttps://openlab.fm/news/digital-storms-a-v-artists-selected-404-zero >openlab.fm/a>/p> p>a hrefhttps://beatsperminute.com/album-review-404-zero-404-0/ >beatsperminute.com/a>/p> p>a hrefhttps://derivative.ca/community-post/prolific-artist-duo-404zero-release-zerror-control-ui-touchdesigner/60966 >derivative.ca/a>/p> p>a hrefhttps://theculturetrip.com/europe/russia/articles/russian-artists-404-zero-on-creative-influences-processes-and-challenges/ >theculturetrip.com/a>/p> p> /p> p> /p> p classp0>a href/privacy-policy>Privacy Policy/a>/p> p classp0>a href/terms>Terms of Use/a>/p> p classp0>©404.ZERO 2023/p> /div> div idrightMenu> div idredDotParent classmenuItem> !-- a href# classright> --> div idredDot classdot>/div> !-- /a> --> /div> !-- div classmenuItem>a href https://twitter.com/404dotzero class link>twitter/a>/div> div classmenuItem>a href https://vimeo.com/404zero class link>vimeo/a>/div> div classmenuItem>a href https://www.instagram.com/404.zero class link>instagram/a>/div> div classmenuItem>a href https://open.spotify.com/artist/5lri0rQHZIrjykaH4jZrvq class link>spotify/a>/div> div classmenuItem>a href https://www.youtube.com/@404zero class link>youtube/a>/div> --> /div > audio idnoiseAudio1 looptrue srcnoiseA.mp3 crossoriginanonymous>/audio> audio idnoiseAudio2 looptrue srcnoiseB.mp3 crossoriginanonymous>/audio> script idexample typex-shader/x-fragment> //-------------------------GLSL CODE#ifdef GL_ESprecision mediump float;#endif #extension GL_OES_standard_derivatives : enable const int MAX_MARCHING_STEPS 30;const float MIN_DIST 0.0;const float MAX_DIST 100.0;uniform float EPSILON;uniform float time;uniform float lfoJs;uniform vec2 mouse;uniform vec2 resolution;varying vec2 surfacePosition;uniform float sound;uniform sampler2D backbuffer; float noiseH -0.2;float noiseFr 20.0;//out vec4 fragColor; vec3 camP vec3(0.0,0.0,10.0);//camP vec3(0.0,0.0,10.0);vec4 mod289(vec4 x){ float a 289.0; return x - floor(x / a) * a; }float mod13(float x){ float a 130.0; return x - floor(x / a) * a; } vec4 perm(vec4 x){return mod289(((x * 1.0) + 1.0) * x);}float rand(float n){return fract(sin(n) * 43758.5453123);}float noise(vec3 p){/** vec3 a floor(p); vec3 d p - a; d d * d * (3.0 - 2.0 * d); vec4 b a.xxyy + vec4(0.0, 1.0, 0.0, 1.0); vec4 k1 perm(b.xyxy); vec4 k2 perm(k1.xyxy + b.zzww); vec4 c k2 + a.zzzz; vec4 k3 perm(c); vec4 k4 perm(c + 1.0); vec4 o1 fract(k3 * (1.0 / 41.0)); vec4 o2 fract(k4 * (1.0 / 41.0)); vec4 o3 o2 * d.z + o1 * (1.0 - d.z); vec2 o4 o3.yw * d.x + o3.xz * (1.0 - d.x); return o4.y * d.y + o4.x * (1.0 - d.y);*/ return abs((sin(p.x)+0.3*sin(p.x*0.13+21.0)+sin(p.y*0.3+13.0)+sin(p.z*1.0)+sin(p.z*7.0+11.0))/3.0)+0.01*rand(mod13(p.z));}float sdSphere( vec3 p, float s ){ return -length(p)+s;}float noiseSDF(vec3 samplePoint){ noiseH 0.2*sin(time/300.0)+(2.0*mouse.y-1.0)*2.0+0.9; noiseFr 10.0*abs((2.0*mouse.x-1.0))+7.0; return (samplePoint.y)+noise(vec3(samplePoint.x*noiseFr, 0.5,samplePoint.z*noiseFr))*noiseH+2.1;// + noise(vec3(samplePoint.x*noiseFr*2.0, 0.5,samplePoint.z*noiseFr*0.1))*noiseH*5.0+2.1;}float sceneSDF(vec3 p) { vec3 cubePoint p + vec3(sin(time/190.0)*10.0, 0.0, sin(time/100.0)*20.0); float a min( noiseSDF( cubePoint), noiseSDF(vec3( -cubePoint.x, -cubePoint.y, cubePoint.z))); return sdSphere(p,10.0)*(0.5-abs(max(mouse.y,mouse.x)-0.5))+a; }float shortestDistanceToSurface(vec3 eye, vec3 marchingDirection, float start, float end, float newStart) { float depth start; for (int i 0; i MAX_MARCHING_STEPS; i++) { float dist sceneSDF(eye + depth * marchingDirection); if (dist EPSILON) { if (depth end){ return depth; } else{return depth;} } depth + dist; //marchingDirection vec3(1.0, 1.0, 1.0); if (depth > end) { return end; } } return end;}float colorStep(vec3 eye, vec3 marchingDirection, float start, float end) { float depth start; vec3 newMarchDir marchingDirection; for (int i 0; i MAX_MARCHING_STEPS; i++) { float dist sceneSDF(eye + depth * newMarchDir); if (dist EPSILON) { return float(i); } depth + dist; //newMarchDir + noise(eye + depth * newMarchDir)*0.0251; //normalize(newMarchDir); if (depth > end) { return float(MAX_MARCHING_STEPS); } } return float(MAX_MARCHING_STEPS);} vec3 rayDirection(float fieldOfView, vec2 size, vec2 fragCoord) { vec2 xy fragCoord - size / 2.0; float z size.y / tan(radians(fieldOfView) / 2.0); return normalize(vec3(xy, -z));}mat4 viewMatrix(vec3 eye, vec3 center, vec3 up) { // Based on gluLookAt man page vec3 f normalize(center - eye); vec3 s cross(f, up); vec3 u cross(s, f); return mat4( vec4(s, 0.0), vec4(u, 0.0), vec4(-f, 0.0), vec4(0.0, 0.0, 0.0, 1.0) );}void main(){ vec2 uv gl_FragCoord.xy; vec2 fragCoord surfacePosition*0.5+0.5; //FOR WEBGL //vec2 fragCoord vUV.st; fragCoord.x fragCoord.x*resolution.x/resolution.y+((1.0-resolution.x/resolution.y)/2.0); // float d 0.2; // if (fragCoord.x>0.5-d && fragCoord.x0.5+d && fragCoord.y>0.5-d*resolution.y/resolution.x && fragCoord.y0.5+d*resolution.y/resolution.x) gl_FragColor vec4(0.0); // else{ vec3 viewDir rayDirection(150.0, vec2(1.0,1.0), fragCoord); vec3 eye camP; eye.x 10.0*(2.0*mouse.x-1.0); eye.y 2.0*(2.0*mouse.y-1.0)+0.7; mat4 viewToWorld viewMatrix(eye, vec3(0.0,0.0,0.0), vec3(0.0, 1.0, 0.0)); vec3 worldDir (viewToWorld * vec4(viewDir, 0.0)).xyz; float color colorStep(eye, worldDir, MIN_DIST, MAX_DIST); float dist MAX_DIST; float freq 0.7; if (abs(mouse.y-0.5) 0.15) freq (abs(mouse.y)-0.15) * 1000.0+0.7; else freq 0.7; color 35.0-color*4.0; if (dist > MAX_DIST - EPSILON) { // Didnt hit anything gl_FragColor vec4(0.0, 0.0, 0.0, 1.0); return; } color color*0.045; //V1----------- //gl_FragColor vec4(color, color, color, 1.0) * (rand(fragCoord.x*123.0*fragCoord.y*dist)*0.5+0.5)*sin(time*mouse.x*mouse.y*120.0);//(0.3+0.6*noise((eye + worldDir*dist)*12312.0)); //V2--------- vec4 cPrev texture2D(backbuffer, gl_FragCoord.xy / resolution).xyzw; //gl_FragColor vec4(color, color, color, 1.0) * (rand(fragCoord.x*123.0*fragCoord.y*dist)*0.5+0.5)*sin(time*freq+mouse.x*mouse.y*1200.0)+mouse.x*cPrev*0.95; gl_FragColor vec4(color, color, color, 1.0) * (rand(fragCoord.x*123.0*fragCoord.y*dist)*0.5+0.5)*lfoJs; gl_FragColor.a 1.0; //gl_FragColor.x mouse.x; //gl_FragColor.y surfacePosition.y; }//-------------------------------/GLSL CODE/script> script idfragmentShader typex-shader/x-fragment> #ifdef GL_ES precision mediump float; #endif uniform vec2 resolution; uniform sampler2D texture; void main() { vec2 uv gl_FragCoord.xy / resolution.xy; gl_FragColor texture2D( texture, uv ); } /script> script idvertexShader typex-shader/x-vertex> attribute vec3 position; void main() { gl_Position vec4( position, 1.0 ); } /script> script idsurfaceVertexShader typex-shader/x-vertex> attribute vec3 position; attribute vec2 surfacePosAttrib; varying vec2 surfacePosition; void main() { surfacePosition surfacePosAttrib; gl_Position vec4( position, 1.0 ); } /script> script> if ( !window.requestAnimationFrame ) { window.requestAnimationFrame ( function() { return window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function ( callback, element ) { window.setTimeout( callback, 1000 / 60 ); }; } )(); } if (!Date.now) { Date.now function() { return +new Date(); }; } var compileTimer, errorLines ; var code, canvas, gl, buffer, currentProgram, vertexPosition, screenVertexPosition, panButton, parameters { startTime: Date.now(), time: 0, mouseX: 0.3, mouseY: 0.9, screenWidth: 0, screenHeight: 0, sound: 0 }, surface { centerX: 0, centerY: 0, width: 1, height: 1, isPanning: false, isZooming: false, lastX: 0, lastY: 0 }, frontTarget, backTarget, screenProgram, getWebGL, compileOnChangeCode true; var lastX,lastY; var lfoPhase 0; var lfo1 0; var lastTime performance.now(); var doAnimate true; //audio var audioCtx1,audioCtx2; var noiseAudio1 document.getElementById(noiseAudio1); var noiseAudio2 document.getElementById(noiseAudio2); var noiseAudio1Source, noiseAudio2Source, noiseAudio1Gain, noiseAudio2Gain; var sOn false; var drag false; init(); if (gl) { animate(); } function showHideMenu(show){ let cols document.getElementsByClassName(menuItem); for(let i 0; i cols.length; i++) { if (colsi.id! redDotParent) colsi.style.display show; } } function initAudio(){ audioCtx1 new AudioContext(); noiseAudio1Source audioCtx1.createMediaElementSource(noiseAudio1); noiseAudio1Gain audioCtx1.createGain(); noiseAudio1Gain.gain.value 0; noiseAudio1Source.connect(noiseAudio1Gain); noiseAudio1Gain.connect(audioCtx1.destination); audioCtx2 new AudioContext(); noiseAudio2Source audioCtx2.createMediaElementSource(noiseAudio2); noiseAudio2Gain audioCtx2.createGain(); noiseAudio2Gain.gain.value 0; noiseAudio2Source.connect(noiseAudio2Gain); noiseAudio2Gain.connect(audioCtx2.destination); } function playAudio(play){ if (!play){ noiseAudio1.pause(); noiseAudio2.pause(); } else{ if(!audioCtx1) initAudio(); noiseAudio1.play(); noiseAudio2.play(); } } function noDragClick(){ doAnimate true; if (sOn){ playAudio(false); sOn false; } else{ playAudio(true); sOn true; } } function init() { document.getElementById(mail).addEventListener(click,function ( event ) { event.preventDefault(); let x ; //welcome to lol // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 let arrM o,e,h,l,.,a,g,i,m,@,4,0,c,e,z,r let arrI 2,1,3,3,0,9,10,11,10,14,13,15,0,4,12,0,8 for (let i 0; iarrI.length; i ++){ x + arrMarrIi; } document.getElementById(mail).innerHTML copied to clipboard; navigator.clipboard.writeText(x); }, false ); if (!document.addEventListener) { document.location http://get.webgl.org/; return; } document.getElementById(redDot).addEventListener(click,function ( event ) { doAnimate !doAnimate; if (!doAnimate){ playAudio(false) document.getElementById(bio).style.display block; document.getElementById(redDot).style.backgroundColor #111; showHideMenu(none); } else{ // if (sOn){ // playAudio(true); // } sOn true; playAudio(true); document.getElementById(bio).style.display none; document.getElementById(redDot).style.backgroundColor #F00; showHideMenu(block); } }, false ); document.addEventListener(DOMContentLoaded, function() { doAnimate !doAnimate; sOn true; document.getElementById(bio).style.display block; document.getElementById(redDot).style.backgroundColor #111; showHideMenu(none); }); canvas document.getElementById( canvas ); canvas.addEventListener( mousedown, function ( event ) { lastX event.clientX; lastY event.clientY; }, false ); canvas.addEventListener( mouseup, function ( event ) { if (lastX event.clientX && lastY event.clientY) noDragClick(); }, false ); canvas.addEventListener(touchstart, function(e) { e.preventDefault(); event e.touches0; lastX event.clientX; lastY event.clientY; drag false; }, false); canvas.addEventListener( touchend, function ( e ) { event e.touches0; if (!drag) noDragClick(); }, false ); // Initialise WebGL try { gl canvas.getContext( experimental-webgl, { preserveDrawingBuffer: true } ); } catch( error ) { } if ( !gl ) { alert(WebGL not supported, but code will be shown.); } else { // enable dFdx, dFdy, fwidth gl.getExtension(OES_standard_derivatives); buffer gl.createBuffer(); gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); gl.bufferData( gl.ARRAY_BUFFER, new Float32Array( - 1.0, - 1.0, 1.0, - 1.0, - 1.0, 1.0, 1.0, - 1.0, 1.0, 1.0, - 1.0, 1.0 ), gl.STATIC_DRAW ); surface.buffer gl.createBuffer(); } clearTimeout(compileTimer); compileTimer setTimeout(compile, 500); var clientXLast, clientYLast; document.addEventListener( mousemove, function ( event ) { var clientX event.clientX; var clientY event.clientY; if (clientXLast clientX && clientYLast clientY) return; clientXLast clientX; clientYLast clientY; parameters.mouseX clientX / window.innerWidth; parameters.mouseY 1 - clientY / window.innerHeight; }, false ); canvas.addEventListener( touchmove, function ( e ) { drag true; let event e.touches0; e.preventDefault(); let clientX event.clientX; let clientY event.clientY; if (clientXLast clientX && clientYLast clientY) return; clientXLast clientX; clientYLast clientY; parameters.mouseX clientX / window.innerWidth; parameters.mouseY 1 - clientY / window.innerHeight; }, false ); onWindowResize(); window.addEventListener( resize, onWindowResize, false ); compileScreenProgram(); } function computeSurfaceCorners() { if (gl) { surface.width surface.height * parameters.screenWidth / parameters.screenHeight; var halfWidth surface.width * 0.5, halfHeight surface.height * 0.5; gl.bindBuffer( gl.ARRAY_BUFFER, surface.buffer ); gl.bufferData( gl.ARRAY_BUFFER, new Float32Array( surface.centerX - halfWidth, surface.centerY - halfHeight, surface.centerX + halfWidth, surface.centerY - halfHeight, surface.centerX - halfWidth, surface.centerY + halfHeight, surface.centerX + halfWidth, surface.centerY - halfHeight, surface.centerX + halfWidth, surface.centerY + halfHeight, surface.centerX - halfWidth, surface.centerY + halfHeight ), gl.STATIC_DRAW ); } } function resetSurface() { surface.centerX surface.centerY 0; surface.height 1; computeSurfaceCorners(); } function compile() { var amplitude 0; var program gl.createProgram(); var fragment document.getElementById( example ).textContent; var vertex document.getElementById( surfaceVertexShader ).textContent; var vs createShader( vertex, gl.VERTEX_SHADER ); var fs createShader( fragment, gl.FRAGMENT_SHADER ); if ( vs null || fs null ) return null; gl.attachShader( program, vs ); gl.attachShader( program, fs ); gl.deleteShader( vs ); gl.deleteShader( fs ); gl.linkProgram( program ); if ( !gl.getProgramParameter( program, gl.LINK_STATUS ) ) { var error gl.getProgramInfoLog( program ); console.error( error ); console.error( VALIDATE_STATUS: + gl.getProgramParameter( program, gl.VALIDATE_STATUS ), ERROR: + gl.getError() ); return; } if ( currentProgram ) { gl.deleteProgram( currentProgram ); // setURL( fragment ); } currentProgram program; cacheUniformLocation( program, time ); cacheUniformLocation( program, lfoJs ); cacheUniformLocation( program, mouse ); cacheUniformLocation( program, resolution ); cacheUniformLocation( program, backbuffer ); cacheUniformLocation( program, surfaceSize ); cacheUniformLocation( program, sound ); cacheUniformLocation( program, texture ); gl.useProgram( currentProgram ); surface.positionAttribute gl.getAttribLocation(currentProgram, surfacePosAttrib); gl.enableVertexAttribArray(surface.positionAttribute); vertexPosition gl.getAttribLocation(currentProgram, position); gl.enableVertexAttribArray( vertexPosition ); } function compileScreenProgram() { if (!gl) { return; } var program gl.createProgram(); var fragment document.getElementById( fragmentShader ).textContent; var vertex document.getElementById( vertexShader ).textContent; var vs createShader( vertex, gl.VERTEX_SHADER ); var fs createShader( fragment, gl.FRAGMENT_SHADER ); gl.attachShader( program, vs ); gl.attachShader( program, fs ); gl.deleteShader( vs ); gl.deleteShader( fs ); gl.linkProgram( program ); if ( !gl.getProgramParameter( program, gl.LINK_STATUS ) ) { console.error( VALIDATE_STATUS: + gl.getProgramParameter( program, gl.VALIDATE_STATUS ), ERROR: + gl.getError() ); return; } screenProgram program; gl.useProgram( screenProgram ); cacheUniformLocation( program, resolution ); cacheUniformLocation( program, texture ); screenVertexPosition gl.getAttribLocation(screenProgram, position); gl.enableVertexAttribArray( screenVertexPosition ); } function cacheUniformLocation( program, label ) { if ( program.uniformsCache undefined ) { program.uniformsCache {}; } program.uniformsCache label gl.getUniformLocation( program, label ); } function createTarget( width, height ) { var target {}; target.framebuffer gl.createFramebuffer(); target.renderbuffer gl.createRenderbuffer(); target.texture gl.createTexture(); // set up framebuffer gl.bindTexture( gl.TEXTURE_2D, target.texture ); gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); gl.bindFramebuffer( gl.FRAMEBUFFER, target.framebuffer ); gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, target.texture, 0 ); // set up renderbuffer gl.bindRenderbuffer( gl.RENDERBUFFER, target.renderbuffer ); gl.renderbufferStorage( gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, width, height ); gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, target.renderbuffer ); // clean up gl.bindTexture( gl.TEXTURE_2D, null ); gl.bindRenderbuffer( gl.RENDERBUFFER, null ); gl.bindFramebuffer( gl.FRAMEBUFFER, null); return target; } function createRenderTargets() { frontTarget createTarget( parameters.screenWidth, parameters.screenHeight ); backTarget createTarget( parameters.screenWidth, parameters.screenHeight ); } var dummyFunction function() {}; function createShader( src, type ) { var shader gl.createShader( type ); gl.shaderSource( shader, src ); gl.compileShader( shader ); return shader; } function onWindowResize( event ) { canvas.width window.innerWidth; canvas.height window.innerHeight; canvas.style.width window.innerWidth + px; canvas.style.height window.innerHeight + px; parameters.screenWidth canvas.width; parameters.screenHeight canvas.height; computeSurfaceCorners(); if (gl) { gl.viewport( 0, 0, canvas.width, canvas.height ); createRenderTargets(); } } // function limitPar(v){ if (v 0) return 0; if (v > 1) return 1; return v; } function animate() { if (doAnimate){ let shift 0.05; let freq shift; let thresh 0.15 if (Math.abs(parameters.mouseY-0.5) thresh){ let v (thresh-Math.abs(parameters.mouseY-0.5))/thresh; v v*v*v; // console.log(V:, v); freq v*30 +shift; } lfoPhase lfoPhase+(performance.now() - lastTime)*freq/1000; lfoPhase (lfoPhase%1); lastTime performance.now(); // console.log(freq,parameters.mouseY); // var lfo1 Math.sin((Date.now() - parameters.startTime)*freq/1000+parameters.mouseX*parameters.mouseY*1200); lfo1 Math.sin(lfoPhase*Math.PI*2); // console.log(parameters.mouseY); var lfo2 - lfo1; var minLfo 0.3; amplitude 0.0; if(audioCtx1){ noiseAudio1Gain.gain.value limitPar(lfo2+minLfo)*1; noiseAudio2Gain.gain.value limitPar(lfo1+minLfo)*1; // noiseAudio2.volume limitPar(lfo1+minLfo)*0; } render(); } requestAnimationFrame( animate ); } function render() { if ( !currentProgram ) return; parameters.time Date.now() - parameters.startTime; // Set uniforms for custom shader gl.useProgram( currentProgram ); gl.uniform1f( currentProgram.uniformsCache time , parameters.time / 1000.0 ); gl.uniform1f( currentProgram.uniformsCache lfoJs ,lfo1 ); gl.uniform1f( currentProgram.uniformsCache sound , amplitude ); gl.uniform2f( currentProgram.uniformsCache mouse , parameters.mouseX, 1-parameters.mouseY ); gl.uniform2f( currentProgram.uniformsCache resolution , parameters.screenWidth, parameters.screenHeight ); gl.uniform1i( currentProgram.uniformsCache backbuffer , 0 ); gl.uniform2f( currentProgram.uniformsCache surfaceSize , surface.width, surface.height ); gl.bindBuffer( gl.ARRAY_BUFFER, surface.buffer ); gl.vertexAttribPointer( surface.positionAttribute, 2, gl.FLOAT, false, 0, 0 ); gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); gl.vertexAttribPointer( vertexPosition, 2, gl.FLOAT, false, 0, 0 ); gl.activeTexture( gl.TEXTURE0 ); gl.bindTexture( gl.TEXTURE_2D, backTarget.texture ); // Render custom shader to front buffer gl.bindFramebuffer( gl.FRAMEBUFFER, frontTarget.framebuffer ); gl.clear( gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT ); gl.drawArrays( gl.TRIANGLES, 0, 6 ); // Set uniforms for screen shader gl.useProgram( screenProgram ); gl.uniform2f( screenProgram.uniformsCache resolution , parameters.screenWidth, parameters.screenHeight ); gl.uniform1i( screenProgram.uniformsCache texture , 1 ); gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); gl.vertexAttribPointer( screenVertexPosition, 2, gl.FLOAT, false, 0, 0 ); gl.activeTexture( gl.TEXTURE1 ); gl.bindTexture( gl.TEXTURE_2D, frontTarget.texture ); // Render front buffer to screen gl.bindFramebuffer( gl.FRAMEBUFFER, null ); gl.clear( gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT ); gl.drawArrays( gl.TRIANGLES, 0, 6 ); // Swap buffers var tmp frontTarget; frontTarget backTarget; backTarget tmp; } /script> /html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]