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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
| <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Triangles from DB. WebGL 1.0, JavaScript</title>
<script src="https://cdn.jsdelivr.net/npm/gl-matrix@3.3.0/gl-matrix-min.js"></script>
</head>
<body>
<canvas id="renderCanvas" width="300" height="300"></canvas>
<script type="x-shader/x-vertex" id="vertexShader">
attribute vec3 aPosition;
uniform mat4 uMvpMatrix;
void main()
{
gl_Position = uMvpMatrix * vec4(aPosition, 1.0);
}
</script>
<script type="x-shader/x-fragment" id="fragmentShader">
void main()
{
gl_FragColor = vec4(0.5, 0.5, 1.0, 1.0);
}
</script>
<script>
const gl = document.getElementById("renderCanvas").getContext("webgl");
const program = createProgram();
const n = initVertexBuffers(program);
const mpMatrix = glMatrix.mat4.create();
const projMatrix = glMatrix.mat4.create();
const viewMatrix = glMatrix.mat4.create();
const modelMatrix = glMatrix.mat4.create();
let coords;
function main()
{
const socket = new WebSocket("ws://localhost:3000");
// const socket = new WebSocket("wss://squares-from-mysql-webgl10-js.herokuapp.com");
socket.onopen = () =>
{
console.log("Client connected");
socket.onmessage = (event) =>
{
coords = JSON.parse(event.data);
draw();
};
};
}
window.onload = () => main();
function draw()
{
glMatrix.mat4.ortho(projMatrix, 0, 10, 10, 0, -50, 50);
glMatrix.mat4.lookAt(viewMatrix, [0, 0, 40], [0, 0, 0], [0, 1, 0]);
gl.clearColor(0.2, 0.2, 0.2, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
coords.forEach(c =>
{
glMatrix.mat4.fromScaling(modelMatrix, glMatrix.vec3.fromValues(1, 1, 1));
glMatrix.mat4.translate(modelMatrix, modelMatrix, glMatrix.vec3.fromValues(c.x, c.y, 0));
glMatrix.mat4.rotate(modelMatrix, modelMatrix, 0 * Math.PI / 180, glMatrix.vec3.fromValues(0, 0, 1));
glMatrix.mat4.mul(mpMatrix, projMatrix, modelMatrix);
const uMvpMatrixLocation = gl.getUniformLocation(program, "uMvpMatrix");
gl.uniformMatrix4fv(uMvpMatrixLocation, false, mpMatrix);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
});
}
function initVertexBuffers(program)
{
const vertPositions = new Float32Array([
0, 1, 0,
1, 1, 0,
0, 0, 0,
1, 0, 0
]);
const vertPosBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertPosBuffer);
gl.bufferData(gl.ARRAY_BUFFER, vertPositions, gl.STATIC_DRAW);
gl.bindAttribLocation(program, 0, "aPosition");
gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(0);
}
function createProgram()
{
const vShaderSource = document.getElementById("vertexShader").firstChild.textContent;
const vShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vShader, vShaderSource);
gl.compileShader(vShader);
const fShaderSource = document.getElementById("fragmentShader").firstChild.textContent;
const fShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fShader, fShaderSource);
gl.compileShader(fShader);
const program = gl.createProgram();
gl.attachShader(program, vShader);
gl.attachShader(program, fShader);
gl.linkProgram(program);
gl.useProgram(program);
return program;
}
</script>
</body>
</html> |