Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Computer Graphics with WebGL / 03-Practice-24.10.2022 / Problem 0301.html
diff options
context:
space:
mode:
Commit2fb13b2c94e73ae8a4112df8ad98d092906e76ba (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-10-24 19:54:15 +0300
Committer
 Syndamia <kamen@syndamia.com>
2022-10-24 19:54:15 +0300
Files3ba635616a587d88cc5d9649547a1acdb9409e07 /Year 2/Computer Graphics with WebGL/03-Practice-24.10.2022/Problem 0301.html
uni-projects-2fb13b2c94e73ae8a4112df8ad98d092906e76ba.tar
uni-projects-2fb13b2c94e73ae8a4112df8ad98d092906e76ba.tar.gz
uni-projects-2fb13b2c94e73ae8a4112df8ad98d092906e76ba.zip
Parentb9a7524716a2e9d4ab1d92fe7fb954265d3ce3a4 (diff)
[WGL/P03] Added work from practicum
1 files changed, 90 insertions, 0 deletions
-rw-r--r--Year 2/Computer Graphics with WebGL/03-Practice-24.10.2022/Problem 0301.html90
diff --git a/Year 2/Computer Graphics with WebGL/03-Practice-24.10.2022/Problem 0301.html b/Year 2/Computer Graphics with WebGL/03-Practice-24.10.2022/Problem 0301.html
new file mode 100644
index 0000000..a7f7e6f
--- /dev/null
+++ b/Year 2/Computer Graphics with WebGL/03-Practice-24.10.2022/Problem 0301.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+
+<head>
+ <meta charset="utf-8"/>
+ <title>Филмова ролка</title>
+
+ <script src="webgl-fmi.js"></script>
+
+ <script id="vshader" type="x-shader/x-vertex">
+ attribute vec2 aXY;
+ void main ()
+ {
+ // аспекта поправяме с покомпонентно умножение
+ gl_Position = vec4(aXY*vec2(1.0/1.5,1),0,1);
+ }
+ </script>
+
+ <script id="fshader" type="x-shader/x-fragment">
+ precision mediump float;
+ uniform vec3 uColor;
+ void main( )
+ {
+ gl_FragColor = vec4(uColor,1);
+ }
+ </script>
+
+ <script>
+ function start( )
+ {
+ gl = getContext("picasso");
+ glprog = getProgram("vshader","fshader");
+
+ aXY = gl.getAttribLocation(glprog,"aXY");
+ uColor = gl.getUniformLocation(glprog,"uColor");
+
+ gl.clearColor(1,1,1,1);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ // точки по ролката
+ var n = 360;
+
+ // създаване на окръжности
+ var data = [ ];
+ for(var i=0; i<n; i++)
+ data.push(Math.cos(2.0*Math.PI*i/n),Math.sin(2.0*Math.PI*i/n));
+
+ const innerCircleR = 0.14;
+ for (var i = 0; i < n; i++)
+ data.push(Math.cos(2 * Math.PI * i / n) * innerCircleR, Math.sin(2 * Math.PI * i / n) * innerCircleR);
+
+ const holes = 6;
+ const innerR = 0.25;
+ const outerR = 0.85;
+ const spacingDegr = 22;
+ var degrStep = n / holes;
+ for (var hole = 0; hole < holes; hole++) {
+ var maxDegr = (hole + 1) * degrStep - spacingDegr;
+ for (var i = hole * degrStep; i < maxDegr; i++)
+ data.push(Math.cos(2 * Math.PI * i / n) * outerR, Math.sin(2 * Math.PI * i / n) * outerR);
+ for (var i = maxDegr; i > hole * degrStep; i--)
+ data.push(Math.cos(2 * Math.PI * i / n) * innerR, Math.sin(2 * Math.PI * i / n) * innerR);
+ }
+
+ var buf = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER,buf);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW);
+
+ gl.uniform3f(uColor,0.3,0.7,0.2);
+ gl.enableVertexAttribArray(aXY);
+ gl.vertexAttribPointer(aXY,2,gl.FLOAT,false,0,0);
+
+ gl.drawArrays(gl.LINE_LOOP,0,n);
+ gl.drawArrays(gl.LINE_LOOP, n, n);
+ for (var i = 0; i < holes; i++)
+ gl.drawArrays(gl.LINE_LOOP, 2 * n + i * (degrStep - spacingDegr) * 2, (degrStep - spacingDegr) * 2);
+ }
+ </script>
+</head>
+
+<body onload="start()">
+ <h2>Филмова ролка</h2>
+
+ <noscript>
+ Искаме JavaScript, но няма!
+ </noscript>
+
+ <canvas id="picasso" width="600" height="400" style="border: solid;">
+ Искаме canvas, но няма!
+ </canvas>
+</body>