cssAudio - Activefile-genericCSS - ActiveGeneric - ActiveHTML - ActiveImage - ActiveJS - ActiveSVG - ActiveText - Activefile-genericVideo - ActiveLovehtmlicon-new-collectionicon-personicon-teamlog-outoctocatpop-outspinnerstartv

Pen Settings

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URL's added here will be added as <link>s in order, and before the CSS in the editor. If you link to another Pen, it will include the CSS from that Pen. If the preprocessor matches, it will attempt to combine them before processing.

Quick-add: + add another resource

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

Quick-add: + add another resource

Code Indentation

     

Save Automatically?

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

            
              <canvas id="canvas"></canvas>
<img id="source" src="data:image/jpeg;base64,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" alt="">
            
          
!
            
              html {
	overflow: hidden;
	touch-action: none;
	content-zooming: none;
}
body {
	position: absolute;
	margin: 0;
	padding: 0;
	background: #000;
	width: 100%;
	height: 100%;
}
#canvas {
	width: 100%; 
	height: 100%;
	background: #000;
	position: absolute;
}
#source {
	visibility: hidden;
}
            
          
!
            
              // Inspired by https://www.airtightinteractive.com/2011/06/rutt-etra-izer/
"use strict";
{
	// webGL canvas
	const canvas = {
		init(options) {
			// set webGL context
			this.elem = document.querySelector("canvas");
			const gl = (this.gl =
				this.elem.getContext("webgl", options) ||
				this.elem.getContext("experimental-webgl", options));
			if (!gl) return false;
			// compile shaders
			const vertexShader = gl.createShader(gl.VERTEX_SHADER);
			gl.shaderSource(
				vertexShader,
				`
					precision highp float;
					const float FOV = 250.0;
					attribute vec3 aPosition, aColor;
					uniform vec2 uResolution;
					uniform vec4 uRotation;
					varying vec3 color;
					void main() {
						// 3D Rotations
						float tx, ty, tz;
						tx = uRotation.z * aPosition.x - uRotation.w * aPosition.z;
						tz = uRotation.w * aPosition.x + uRotation.z * aPosition.z;
						ty = uRotation.x * aPosition.y - uRotation.y * tz;
						tz = uRotation.y * aPosition.y + uRotation.x * tz;
						// 3D to 2D projection
						float s = FOV / (FOV - tz);
						float x = s > 0.0 ? tx * s : 0.0;
						float y = s > 0.0 ? ty * s : 0.0;
						gl_Position = vec4(
							( (uResolution.x * 0.5 + x) / uResolution.x * 2.0) - 1.0, 
							( (-uResolution.y * 0.5 -y) / uResolution.y * 2.0) + 1.0, 
							s > 0.0 ? 0.0 : 10.0,
							1.0
						);
						color = aColor;
					}
      	`
			);
			gl.compileShader(vertexShader);
			const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
			gl.shaderSource(
				fragmentShader,
				`
					precision highp float;
					varying vec3 color;
					void main() {
						gl_FragColor = vec4(color.r, color.g, color.b, 1.0);
					}
				`
			);
			gl.compileShader(fragmentShader);
			const program = (this.program = gl.createProgram());
			gl.attachShader(this.program, vertexShader);
			gl.attachShader(this.program, fragmentShader);
			gl.linkProgram(this.program);
			gl.useProgram(this.program);
			// resolution
			this.uResolution = gl.getUniformLocation(this.program, "uResolution");
			gl.enableVertexAttribArray(this.uResolution);
			// canvas resize
			this.resize();
			window.addEventListener("resize", () => this.resize(), false);
			return gl;
		},
		buffer(attribute) {
			const buffer = {
				attribute: gl.getAttribLocation(canvas.program, attribute),
				buffer: gl.createBuffer(),
				load (data, usage, size) {
					gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
					gl.vertexAttribPointer(this.attribute, size, gl.FLOAT, false, 0, 0);
					gl.bufferData(gl.ARRAY_BUFFER, data, usage);
				}
			};
			gl.enableVertexAttribArray(buffer.attribute);
			return buffer;
		},
		resize() {
			this.width = this.elem.width = this.elem.offsetWidth;
			this.height = this.elem.height = this.elem.offsetHeight;
			this.gl.uniform2f(this.uResolution, this.width, this.height);
			this.gl.viewport(
				0,
				0,
				this.gl.drawingBufferWidth,
				this.gl.drawingBufferHeight
			);
		}
	};
	// init pointer
	const pointer = {
		init(canvas) {
			this.x = canvas.width * 0.5;
			this.y = canvas.height * 0.5;
			this.ex = this.x;
			this.ey = this.y * 2;
			["mousemove", "touchstart", "touchmove"].forEach((event, touch) => {
				document.addEventListener(
					event,
					e => {
						if (touch) {
							e.preventDefault();
							this.x = e.targetTouches[0].clientX;
							this.y = e.targetTouches[0].clientY;
						} else {
							this.x = e.clientX;
							this.y = e.clientY;
						}
					},
					false
				);
			});
		},
		ease(step) {
			this.ex += (this.x - this.ex) * step;
			this.ey += (this.y - this.ey) * step;
		}
	};
	// init webGL canvas
	const gl = canvas.init({
		alpha: false,
		stencil: false,
		antialias: true,
		depth: false
	});
	// additive blending "lighter"
	gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
	gl.enable(gl.BLEND);
	// init pointer
	pointer.init(canvas);
	// init image
	const img = new Image();
	img.addEventListener("load", e => load(img));
	img.src = document.getElementById("source").src;
	// rotation matrix
	const uRotation = gl.getUniformLocation(canvas.program, "uRotation");
	gl.enableVertexAttribArray(uRotation);
	// init colors and geometry
	let nVertices = 0;
	const load = img => {
		//////////////////////
		const step = 3;
		const depth = 75;
		//////////////////////
		const image = document.createElement("canvas");
		const width = (image.width = img.width);
		const height = (image.height = img.height);
		const ctx = image.getContext("2d");
		ctx.drawImage(img, 0, 0);
		const bitmap = ctx.getImageData(0, 0, width, height).data;
		const vertices = [];
		const colors = [];
		// buffers
		const position = canvas.buffer("aPosition");
		const color = canvas.buffer("aColor");
		// push vertex
		const push = (x, y) => {
			const p = (y * width + x) * 4;
			const r = bitmap[p + 0] / 256;
			const g = bitmap[p + 1] / 256;
			const b = bitmap[p + 2] / 256;
			colors.push(r);
			colors.push(g);
			colors.push(b);
			vertices.push(x - width * 0.5);
			vertices.push(y - height * 0.5);
			vertices.push(depth * (0.34 * r + 0.5 * g + 0.16 * b));
		};
		// init the line
		let d = 1;
		for (let y = 0; y < height; y += step) {
			if (d > 0) {
				for (let x = 0; x < width; x += step) push(x, y);
			} else {
				for (let x = width; x > 0; x -= step) push(x, y);
			}
			d = -d;
		}
		// load buffers to gpu
		nVertices = Math.floor(colors.length / 3);
		position.load(new Float32Array(vertices), gl.STATIC_DRAW, 3);
		color.load(new Float32Array(colors), gl.STATIC_DRAW, 3);
		// start animation loop
		requestAnimationFrame(run);
	};
	// main animation loop
	const run = () => {
		requestAnimationFrame(run);
		pointer.ease(0.05);
		// rotation
		const ry = (pointer.ex - canvas.width * 0.5) / (canvas.width * 0.33);
		const rx = (pointer.ey - canvas.height * 0.5) / (canvas.height * 0.33);
		gl.uniform4f(uRotation, Math.cos(rx), Math.sin(rx), Math.cos(ry), Math.sin(ry));
		// draw line strip
		gl.drawArrays(gl.LINE_STRIP, 0, nVertices);
	};
}

            
          
!
999px
Loading ..................

Console