Skip to content

Instantly share code, notes, and snippets.

@seangeleno
Created September 1, 2019 18:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seangeleno/5b68ae30f93b664169aa7c6056a72fa3 to your computer and use it in GitHub Desktop.
Save seangeleno/5b68ae30f93b664169aa7c6056a72fa3 to your computer and use it in GitHub Desktop.
help me down
<canvas></canvas>
<img id="heightmap" src="data:image/jpeg;base64,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" alt="">
"use strict";
{
////////////////////////////////////////////////////////////////
const canvas = {
init() {
this.elem = document.querySelector("canvas");
const gl = this.elem.getContext("webgl", { alpha: false });
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(vertexShader, `
uniform mat4 camProj, camView;
attribute vec3 aPosition, aNormal, aColor;
varying vec3 vColor;
const vec3 lightDir = vec3(0, 0, 1);
void main(void) {
vec3 normal = mat3(camView) * aNormal;
vec4 pos = camView * vec4(aPosition, 1.0);
vColor = aColor * max(dot(normal, normalize(lightDir - pos.xyz)), 0.2);
gl_Position = camProj * pos;
}
`);
gl.shaderSource(fragmentShader, `
precision highp float;
varying vec3 vColor;
void main(void) {
gl_FragColor = vec4(vColor, 1.0);
}
`);
gl.compileShader(vertexShader);
gl.compileShader(fragmentShader);
this.program = gl.createProgram();
gl.attachShader(this.program, vertexShader);
gl.attachShader(this.program, fragmentShader);
gl.linkProgram(this.program);
gl.useProgram(this.program);
return gl;
},
resize() {
this.width = this.elem.width = this.elem.offsetWidth;
this.height = this.elem.height = this.elem.offsetHeight;
camera.proj.perspective(60, this.width / this.height).load();
gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
}
};
////////////////////////////////////////////////////////////////
const Mat4 = class {
constructor(program, uName) {
this.u = gl.getUniformLocation(program, uName);
this.data = new Float32Array([
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
]);
}
identity() {
const d = this.data;
d[0] = 1;
d[1] = 0;
d[2] = 0;
d[3] = 0;
d[4] = 0;
d[5] = 1;
d[6] = 0;
d[7] = 0;
d[8] = 0;
d[9] = 0;
d[10] = 1;
d[11] = 0;
d[12] = 0;
d[13] = 0;
d[14] = 0;
d[15] = 1;
return this;
}
translate(x, y, z) {
const d = this.data;
d[12] = d[0] * x + d[4] * y + d[8] * z + d[12];
d[13] = d[1] * x + d[5] * y + d[9] * z + d[13];
d[14] = d[2] * x + d[6] * y + d[10] * z + d[14];
d[15] = d[3] * x + d[7] * y + d[11] * z + d[15];
return this;
}
rotateX(angle) {
const d = this.data;
const s = Math.sin(angle);
const c = Math.cos(angle);
const a10 = d[4];
const a11 = d[5];
const a12 = d[6];
const a13 = d[7];
const a20 = d[8];
const a21 = d[9];
const a22 = d[10];
const a23 = d[11];
d[4] = a10 * c + a20 * s;
d[5] = a11 * c + a21 * s;
d[6] = a12 * c + a22 * s;
d[7] = a13 * c + a23 * s;
d[8] = a10 * -s + a20 * c;
d[9] = a11 * -s + a21 * c;
d[10] = a12 * -s + a22 * c;
d[11] = a13 * -s + a23 * c;
return this;
}
rotateY(angle) {
const d = this.data;
const s = Math.sin(angle);
const c = Math.cos(angle);
const a00 = d[0];
const a01 = d[1];
const a02 = d[2];
const a03 = d[3];
const a20 = d[8];
const a21 = d[9];
const a22 = d[10];
const a23 = d[11];
d[0] = a00 * c + a20 * -s;
d[1] = a01 * c + a21 * -s;
d[2] = a02 * c + a22 * -s;
d[3] = a03 * c + a23 * -s;
d[8] = a00 * s + a20 * c;
d[9] = a01 * s + a21 * c;
d[10] = a02 * s + a22 * c;
d[11] = a03 * s + a23 * c;
return this;
}
rotateZ(angle) {
const d = this.data;
const s = Math.sin(angle);
const c = Math.cos(angle);
const a00 = d[0];
const a01 = d[1];
const a02 = d[2];
const a03 = d[3];
const a10 = d[4];
const a11 = d[5];
const a12 = d[6];
const a13 = d[7];
d[0] = a00 * c + a10 * s;
d[1] = a01 * c + a11 * s;
d[2] = a02 * c + a12 * s;
d[3] = a03 * c + a13 * s;
d[4] = a00 * -s + a10 * c;
d[5] = a01 * -s + a11 * c;
d[6] = a02 * -s + a12 * c;
d[7] = a03 * -s + a13 * c;
return this;
}
perspective(fov, aspect) {
const d = this.data;
const near = 0.01;
const far = 100;
const top = near * Math.tan(fov * Math.PI / 360);
const right = top * aspect;
const left = -right;
const bottom = -top;
d[0] = 2 * near / (right - left);
d[1] = 0;
d[2] = 0;
d[3] = 0;
d[4] = 0;
d[5] = 2 * near / (top - bottom);
d[6] = 0;
d[7] = 0;
d[8] = (right + left) / (right - left);
d[9] = (top + bottom) / (top - bottom);
d[10] = -(far + near) / (far - near);
d[11] = -1;
d[12] = 0;
d[13] = 0;
d[14] = -(2 * far * near) / (far - near);
d[15] = 0;
return this;
}
load() {
gl.uniformMatrix4fv(this.u, gl.FALSE, this.data);
return this;
}
};
////////////////////////////////////////////////////////////////
const gl = canvas.init();
gl.enable(gl.DEPTH_TEST);
gl.enable(gl.CULL_FACE);
const camera = {
proj: new Mat4(canvas.program, "camProj").load(),
view: new Mat4(canvas.program, "camView").load()
};
canvas.resize();
window.addEventListener("resize", () => canvas.resize(), false);
////////////////////////////////////////////////////////////////
const decode = () => {
const img = document.getElementById("heightmap");
const width = img.width;
const height = img.height;
const cmap = document.createElement("canvas");
cmap.width = width;
cmap.height = height;
const cty = cmap.getContext("2d");
cty.drawImage(img, 0, 0);
const hmap = cty.getImageData(0, 0, width, height).data;
// brillance
for (let i = 0; i < width * height * 4; i += 4) {
hmap[i + 3] = 0.34 * hmap[i] + 0.5 * hmap[i + 1] + 0.16 * hmap[i + 2];
}
let vertices = new Float32Array(6000000);
let iV = 0;
const cube = (x, z, l, h, w, r, g, b) => [
x,h,z,0,1,0,r,g,b,x,h,z+w,0,1,0,r,g,b,x+l,h,z+w,0,1,0,r,g,b,x,h,z,0,1,0,r,g,b,x+l,h,z+w,0,1,0,r,g,b,x+l,h,z,0,1,0,r,g,b,
x,0,z,-1,0,0,r,g,b,x,0,z+w,-1,0,0,r,g,b,x,h,z+w,-1,0,0,r,g,b,x,0,z,-1,0,0,r,g,b,x,h,z+w,-1,0,0,r,g,b,x,h,z,-1,0,0,r,g,b,
x+l,0,z,1,0,0,r,g,b,x+l,h,z,1,0,0,r,g,b,x+l,h,z+w,1,0,0,r,g,b,x+l,0,z,1,0,0,r,g,b,x+l,h,z+w,1,0,0,r,g,b,x+l,0,z+w,1,0,0,r,g,b,
x,0,z,0,0,-1,r,g,b,x,h,z,0,0,-1,r,g,b,x+l,h,z,0,0,-1,r,g,b,x,0,z,0,0,-1,r,g,b,x+l,h,z,0,0,-1,r,g,b,x+l,0,z,0,0,-1,r,g,b,
x,0,z+w,0,0,1,r,g,b,x+l,0,z+w,0,0,1,r,g,b,x+l,h,z+w,0,0,1,r,g,b,x,0,z+w,0,0,1,r,g,b,x+l,h,z+w,0,0,1,r,g,b,x,h,z+w,0,0,1,r,g,b
];
const attribute = (program, name, data, size, stride, offset) => {
if (data !== null) {
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
}
const index = gl.getAttribLocation(program, name);
gl.enableVertexAttribArray(index);
gl.vertexAttribPointer(index, size, gl.FLOAT, false, stride, offset);
};
const increaseArray = (oldArray) => {
const newArray = new Float32Array(oldArray.length * 1.25);
newArray.set(oldArray);
return newArray;
};
const concat = (a1, a2, index) => {
if (index + a2.length > vertices.length) vertices = increaseArray(vertices);
for (let i = 0, l = a2.length; i < l; i++) {
a1[index++] = a2[i];
}
return index;
};
const Rect = class {
constructor(x0, y0, w0, h0) {
this.x = x0;
this.y = y0;
this.w = w0;
this.h = h0;
x0 = Math.floor(x0);
y0 = Math.floor(y0);
w0 = Math.ceil(w0);
h0 = Math.ceil(h0);
const n = w0 * h0;
let r = 0, g = 0, b = 0, l = 0;
for (let x = x0; x < x0 + w0; x++) {
for (let y = y0; y < y0 + h0; y++) {
const p = (y * width + x) * 4;
r += hmap[p + 0];
g += hmap[p + 1];
b += hmap[p + 2];
l += hmap[p + 3];
}
}
// average colors
this.r = (r / n)|0;
this.g = (g / n)|0;
this.b = (b / n)|0;
this.l = (l / n)|0;
// standard deviation
let sd = 0;
for (let x = x0; x < x0 + w0; x++) {
for (let y = y0; y < y0 + h0; y++) {
const l = hmap[(y * width + x) * 4 + 3] - this.l;
sd += (l * l);
}
}
this.sd = Math.sqrt(sd / n);
}
draw() {
if (this.l > 1) iV = concat(vertices, cube(
(this.x - width * 0.5) * 0.1,
(this.y - height * 0.5) * 0.1,
this.w * 0.1,
this.l * 0.02,
this.h * 0.1,
this.r / 256,
this.g / 256,
this.b / 256
), iV);
}
};
const rect = new Rect(0, 0, width, height);
const divide = (rect) => {
if (rect.w > 1 || rect.h > 1) {
if (rect.sd > 8) {
const hw = rect.w * 0.5;
const hh = rect.h * 0.5;
divide(new Rect(rect.x, rect.y, hw, hh));
divide(new Rect(rect.x + hw, rect.y, hw, hh));
divide(new Rect(rect.x, rect.y + hh, hw, hh));
divide(new Rect(rect.x + hw, rect.y + hh, hw, hh));
} else {
rect.draw();
}
} else {
rect.draw();
}
}
divide(rect);
attribute(canvas.program, "aPosition", vertices, 3, 36, 0);
attribute(canvas.program, "aNormal", null, 3, 36, 12);
attribute(canvas.program, "aColor", null, 3, 36, 24);
return iV / 9;
}
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) => {
canvas.elem.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;
}
};
pointer.init(canvas);
////////////////////////////////////////////////////////////////
const run = () => {
requestAnimationFrame(run);
pointer.ease(0.02);
const rx = (pointer.ex - canvas.width * 0.5) / (canvas.width * 0.35);
const ry = (-pointer.ey + canvas.height * 0.5) / (canvas.height * 0.35);
camera.view
.identity()
.translate(0, ry * 4, -50 + Math.sqrt(rx * rx + ry * ry) * 30)
.rotateX(Math.PI/2)
.rotateZ(rx)
.rotateX(ry)
.load();
gl.drawArrays(gl.TRIANGLES, 0, numElements);
};
let numElements = 0;
const start = () => {
numElements = decode();
run();
};
requestAnimationFrame(start);
}
body, html {
touch-action: none;
content-zooming: none;
position: absolute;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
canvas {
position: absolute;
display: block;
width: 100%;
height: 100%;
background:#000;
cursor: crosshair;
}
img {visibility: hidden;}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment