-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
61 lines (42 loc) · 1.65 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import Vector from "./vector.js";
import WebGL from "./webgl.js";
import XDGL from "./xdgl.js";
const start = Date.now();
let resolution = [ 1000, 500 ];
window.onload = async () => {
const dimension = 10;
console.log(`${dimension}-cube`);
const gl = WebGL.getWebGL("canvas");
WebGL.init(gl);
WebGL.resize(gl, resolution);
let programInfo = WebGL.createProgramInfo();
await WebGL.addShader(programInfo, "./shaders/xdgl.glsl", "vertex", "vertex", [ [ "<<<size>>>", dimension ] ]);
await WebGL.addShader(programInfo, "./shaders/fragment.glsl", "fragment");
WebGL.locateAttributes(programInfo);
WebGL.locateUniforms(programInfo);
const program = WebGL.buildShaderProgram(gl, programInfo);
let vertices = XDGL.hypercubeVertices(dimension);
vertices = Vector.scalar(vertices, 0.10);
const uv = XDGL.hypercubeEdgeIndices(dimension);
const edges = XDGL.hypercubeEdges(dimension);
let geometryInfo = {
vertices,
uv,
edges,
};
const geometry = XDGL.createGeometry(gl, geometryInfo);
const transform = XDGL.createTransform(dimension);
gl.useProgram(program.program);
const loop = () => {
requestAnimationFrame(loop);
gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT);
gl.enable(gl.CULL_FACE);
gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.ALWAYS);
gl.useProgram(program.program);
XDGL.renderGeometry(gl, geometry, transform, program, resolution, Date.now() - start)
};
requestAnimationFrame(loop);
};