diff --git a/basic_course/webgl_02.pptx b/basic_course/webgl_02.pptx index 7f515e538e9356e36a98893ef2cfe087679fbcdc..70f95673b4a7b50f5939032103c53b0a9ba50e07 100644 Binary files a/basic_course/webgl_02.pptx and b/basic_course/webgl_02.pptx differ diff --git a/student2018/201420984/moviesample.mp4 b/student2018/201420984/moviesample.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..1b17d7a24b991bcdae1c3cea973af548f5a38fd3 Binary files /dev/null and b/student2018/201420984/moviesample.mp4 differ diff --git a/student2018/201520986/cg_final_assignment_201520986_syk_report.pptx b/student2018/201520986/cg_final_assignment_201520986_syk_report.pptx new file mode 100644 index 0000000000000000000000000000000000000000..bb5f6b297ae78e67b00752686463627446a14e4d Binary files /dev/null and b/student2018/201520986/cg_final_assignment_201520986_syk_report.pptx differ diff --git a/student2018/201520986/sphere_cg_final_assignment_201520986.html b/student2018/201520986/sphere_cg_final_assignment_201520986.html new file mode 100644 index 0000000000000000000000000000000000000000..b7730ecfddca27183be8ff9a08ceaa8dcb797009 --- /dev/null +++ b/student2018/201520986/sphere_cg_final_assignment_201520986.html @@ -0,0 +1,239 @@ +<!-- +Copyright 2011 (C) by Guido D'Albore (guido@bitstorm.it) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> + +<html> + +<head> + <title>How to make a 3D sphere with HTML5 - di Guido D'Albore</title> + <script type="text/javascript"> + var sphere = new Sphere3D(); + var html5logo = new Image(); + var html5radius = 50; + var html5direction = 0.5; + var rotation = 0; + var distance = 0; + + function Point3D() { + this.x = 0; + this.y = 0; + this.z = 0; + } + + function Sphere3D(radius) { + this.point = new Array(); + this.color = "rgb(255,0,255)" + this.radius = (typeof (radius) == "undefined") ? 20.0 : radius; + this.radius = (typeof (radius) != "number") ? 20.0 : radius; + this.numberOfVertexes = 0; + + // Ciclo da 0� a 360� con passo di 10�...calcola la circonf. di mezzo + for (alpha = 0; alpha <= 6.28; alpha += 0.17) { + p = this.point[this.numberOfVertexes] = new Point3D(); + + p.x = Math.cos(alpha) * this.radius; + p.y = 0; + p.z = Math.sin(alpha) * this.radius; + + this.numberOfVertexes++; + } + + // Ciclo da 0� a 90� con passo di 10�...calcola la prima semisfera (direction = 1) + // Ciclo da 0� a 90� con passo di 10�...calcola la seconda semisfera (direction = -1) + + for (var direction = 1; direction >= -1; direction -= 2) { + for (var beta = 0.17; beta < 1.445; beta += 0.17) { + var radius = Math.cos(beta) * this.radius; + var fixedY = Math.sin(beta) * this.radius * direction; + + for (var alpha = 0; alpha < 6.28; alpha += 0.17) { + p = this.point[this.numberOfVertexes] = new Point3D(); + + p.x = Math.cos(alpha) * radius; + p.y = fixedY; + p.z = Math.sin(alpha) * radius; + + this.numberOfVertexes++; + } + } + } + + } + + function rotateX(point, radians) { + var y = point.y; + point.y = (y * Math.cos(radians)) + (point.z * Math.sin(radians) * -1.0); + point.z = (y * Math.sin(radians)) + (point.z * Math.cos(radians)); + } + + function rotateY(point, radians) { + var x = point.x; + point.x = (x * Math.cos(radians)) + (point.z * Math.sin(radians) * -1.0); + point.z = (x * Math.sin(radians)) + (point.z * Math.cos(radians)); + } + + function rotateZ(point, radians) { + var x = point.x; + point.x = (x * Math.cos(radians)) + (point.y * Math.sin(radians) * -1.0); + point.y = (x * Math.sin(radians)) + (point.y * Math.cos(radians)); + } + + function projection(xy, z, xyOffset, zOffset, distance) { + return ((distance * xy) / (z - zOffset)) + xyOffset; + } + + function render() { + var canvas = document.getElementById("sphere3d"); + var width = canvas.getAttribute("width"); + var height = canvas.getAttribute("height"); + var ctx = canvas.getContext('2d'); + var x, y; + var rgb_r = 255; + var rgb_g = 0; + var rgb_b = 0; + var rgb_add = 30; + var p = new Point3D(); + + draw(); + ctx.save(); + ctx.clearRect(0, 0, width, height); + //drawHtml5Logo(ctx, 10, 10); + + ctx.globalCompositeOperation = "lighter"; + + for (i = 0; i < sphere.numberOfVertexes; i++) { + + p.x = sphere.point[i].x; + p.y = sphere.point[i].y; + p.z = sphere.point[i].z; + + rotateX(p, rotation); + rotateY(p, rotation); + rotateZ(p, rotation); + + x = projection(p.x, p.z, width / 2.0, 100.0, distance); + y = projection(p.y, p.z, height / 2.0, 100.0, distance); + rgb_b += rgb_add; + if ((x >= 0) && (x < width)) { + if ((y >= 0) && (y < height)) { + if (p.z < 0) { + drawPoint(ctx, x, y, 4, "#FA58D0"); + } else { + drawPointWithGradient(ctx, x, y, 10, "rgb(" + rgb_r + "," + rgb_g + "," + rgb_b + ")", 0.8); + } + } + } + } + ctx.restore(); + ctx.fillStyle = "rgb(150,150,150)"; + //ctx.fillText("di Guido D'Albore", width - 90, height - 5); + rotation += Math.PI / 100.0; + + if (distance < 1000) { + distance += 10; + } + } + + function drawPoint(ctx, x, y, size, color) { + ctx.save(); + ctx.beginPath(); + ctx.strokeStyle = color; + //ctx.arc(x, y, size, 0, 2*Math.PI, true); + ctx.arc(75, 75, 50, 0, Math.PI * 2, true); // Outer circle + ctx.moveTo(x, y); + ctx.arc(75, 75, 35, 0, Math.PI, false); // Mouth (clockwise) + ctx.moveTo(x - 45, y - 10); + ctx.arc(60, 65, 5, 0, Math.PI * 2, true); // Left eye + ctx.moveTo(x - 15, y - 10); + ctx.arc(90, 65, 5, 0, Math.PI * 2, true); // Right eye + ctx.stroke(); + //ctx.fill(); + ctx.restore(); + } + + function drawPointWithGradient(ctx, x, y, size, color, gradient) { + var reflection; + + reflection = size/4; + + ctx.save(); + ctx.translate(x, y); + var radgrad = ctx.createRadialGradient(-reflection, -reflection, reflection, 0, 0, size); + + radgrad.addColorStop(0, '#FFFFFF'); + radgrad.addColorStop(gradient, color); + radgrad.addColorStop(1, 'rgba(255,0,0,0)'); + + ctx.fillStyle = radgrad; + ctx.fillRect(-size, -size, size * 2, size * 2); + ctx.restore(); + } + + function draw() { + var ctx = document.getElementById('sphere3d').getContext('2d'); + for (var i = 0; i < 6; i++) { + for (var j = 0; j < 6; j++) { + ctx.strokeStyle = 'rgb(0,' + Math.floor(255 - 42.5 * i) + ',' + + Math.floor(255 - 42.5 * j) + ')'; + ctx.beginPath(); + ctx.arc(12.5 + j * 25, 12.5 + i * 25, 10, 0, Math.PI * 2, true); + ctx.stroke(); + } + } + } + + function drawHalo(ctx, x, y, size, color, gradient) { + var reflection; + + reflection = size / 4; + + ctx.save(); + ctx.translate(x, y); + var radgrad = ctx.createRadialGradient(0, 0, reflection, 0, 0, size); + + radgrad.addColorStop(0, '#FFFFFF'); + radgrad.addColorStop(gradient, color); + radgrad.addColorStop(1, 'rgba(255,0,98,0)'); + + ctx.fillStyle = radgrad; + ctx.fillRect(-size, -size, size * 2, size * 2); + ctx.restore(); + } + + function init() { + // Set framerate to 30 fps + setInterval(render, 1000 / 30); + + //html5logo.src = "html5-badge-h-solo.png"; + } + + </script> + <style type="text/css"> + canvas { + border: 4px solid #A0A0A0; + background: black; + display: block; + } + </style> + +</head> + +<body onload="init();"> + <canvas id="sphere3d" width="800" height="800"> + Il tuo browser non supporta l'HTML5. + </canvas> +</body> + +</html> \ No newline at end of file