Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit9a04263e46be383439084ea8a92be139ab364116 (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-10-12 16:09:45 +0300
Committer
 Syndamia <kamen@syndamia.com>
2022-10-12 16:09:45 +0300
Files6a3bedf1dd1d440c3ad0d557ff635f6c7908ec6c
uni-projects-9a04263e46be383439084ea8a92be139ab364116.tar
uni-projects-9a04263e46be383439084ea8a92be139ab364116.tar.gz
uni-projects-9a04263e46be383439084ea8a92be139ab364116.zip
Parenta37b379f9e44653b2c12ed748a1e1b6d09f50c22 (diff)
[OKG] Solved practice 02 exercises
diff --git a/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/01.js b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/01.js
new file mode 100644
index 0000000..cdd92a3
--- /dev/null
+++ b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/01.js
@@ -0,0 +1,53 @@
+// Задача: махнете големия куб и сложете 8 малки
+// кубчета във върховете на въображаем голям куб
+
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setAnimationLoop( drawFrame );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+var aspect = window.innerWidth/window.innerHeight;
+var camera = new THREE.PerspectiveCamera( 30, aspect );
+camera.position.set( 3, 3, 8 );
+camera.lookAt( new THREE.Vector3() );
+
+
+
+function createCube(l, x, y, z) {
+ var geometry = new THREE.BoxGeometry( l, l, l );
+ var material = new THREE.MeshPhongMaterial();
+ var cube = new THREE.Mesh( geometry, material );
+ scene.add( cube );
+ cube.position.set(x, y, z);
+}
+
+// createCube(2, 0, 0, 0);
+createCube(0.25, 1, 1, 1);
+createCube(0.25, 1, 1, -1);
+createCube(0.25, 1, -1, 1);
+createCube(0.25, 1, -1, -1);
+createCube(0.25, -1, 1, 1);
+createCube(0.25, -1, 1, -1);
+createCube(0.25, -1, -1, 1);
+createCube(0.25, -1, -1, -1);
+
+
+
+// две светлини - отпред и отзад на сцената
+var light = new THREE.PointLight( );
+light.position.set( 3, 4, 5 );
+scene.add( light );
+
+light = new THREE.PointLight( );
+light.position.set( -3, 4, -5 );
+scene.add( light );
+
+// въртене на сцената като в микровълнова фурна
+function drawFrame()
+{
+ scene.rotation.y += 0.005;
+ renderer.render( scene, camera );
+}
+
diff --git a/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/02.js b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/02.js
new file mode 100644
index 0000000..08640d3
--- /dev/null
+++ b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/02.js
@@ -0,0 +1,83 @@
+// Задача: свържете кубовете с гради по ръбовете
+// на въображаемият голям куб
+
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setAnimationLoop( drawFrame() );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+var aspect = window.innerWidth/window.innerHeight;
+var camera = new THREE.PerspectiveCamera( 30, aspect );
+camera.position.set( 3, 3, 8 );
+camera.lookAt( new THREE.Vector3() );
+
+// кубове във върховете
+var geometry = new THREE.BoxGeometry( 1/3, 1/3, 1/3 );
+var material = new THREE.MeshPhongMaterial();
+
+for( var x=-1; x<2; x+=2 )
+for( var y=-1; y<2; y+=2 )
+for( var z=-1; z<2; z+=2 )
+{
+ var cube = new THREE.Mesh( geometry, material );
+ cube.position.set( x, y, z );
+ scene.add( cube );
+}
+
+
+
+// златни греди по ръбовете
+var barMaterial = new THREE.MeshPhongMaterial({ color: 0xFFFF00 });
+
+function newBar(barGeometry, x, y, z) {
+ var bar = new THREE.Mesh(barGeometry, barMaterial);
+ bar.position.set( x, y, z );
+ scene.add(bar);
+}
+
+// Each coordinate is either 1, 0 or -1, and because we're working with edges, always two
+// coordinates will be nonzero.
+// So, we have three main triplets: (0, 1, 1), (1, 0, 1) and (1, 1, 0) with four variations
+// each, for the combinations of positive and negative 1s. Example:
+// (0, 1, 1), (0, 1, -1), (0, -1, 1), (0, -1, -1)
+// Finally we notice that the wide side is the one with the zero coordinate (or in another sense,
+// we stretch a square in that axis).
+// For the main triplets, because it's simpler, we generate their inverse via binary representation
+// of numbers, so we generate the numbers 100, 010 and 001, which are then turned into the triplets.
+for (var i = 1; i < 5; i <<= 1) {
+ var fir = +!(i & 1), sec = +!(i & 2), thr = +!(i & 4); // number to main triplet
+ var barGeometry = new THREE.BoxGeometry( 1/8 + !fir * 15/8, 1/8 + !sec * 15/8, 1/8 + !thr * 15/8 );
+ newBar(barGeometry, fir, sec, thr);
+
+ // Combinations for positive and negative 1s
+ for (var m = -1; m < 2; m += 2) {
+ newBar(barGeometry, m * fir, m * sec, m * thr);
+
+ if (fir === 1)
+ newBar(barGeometry, fir, m * sec, m * thr);
+ if (sec === 1)
+ newBar(barGeometry, m * fir, sec, m * thr);
+ if (thr === 1)
+ newBar(barGeometry, m * fir, m * sec, thr);
+ }
+}
+
+
+
+var light = new THREE.PointLight( );
+light.position.set( 3, 4, 5 );
+scene.add( light );
+
+light = new THREE.PointLight( );
+light.position.set( -3, 4, -5 );
+scene.add( light );
+
+
+function drawFrame()
+{
+ scene.rotation.y += 0.005;
+ renderer.render( scene, camera );
+}
+
diff --git a/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/03.js b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/03.js
new file mode 100644
index 0000000..cd16d31
--- /dev/null
+++ b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/03.js
@@ -0,0 +1,54 @@
+// Задача: създайте равнина от кубове - те са
+// NxN, разположени са равномерно в квадрат и
+// не се допират помежду си
+
+var N = 10; // примерно да пробваме с 10x10 куба
+
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setAnimationLoop( drawFrame );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+var aspect = window.innerWidth/window.innerHeight;
+var camera = new THREE.PerspectiveCamera( 30, aspect );
+camera.position.set( 6, 7, 20 );
+camera.lookAt( new THREE.Vector3() );
+
+
+// кубове - форма и размер
+var geometry = new THREE.BoxGeometry( 0.9, 0.9, 0.9 );
+var material = new THREE.MeshPhongMaterial();
+
+
+
+function newCube(x, z) {
+ var cube = new THREE.Mesh( geometry, material );
+ cube.position.set(x, 0, z);
+ scene.add( cube );
+}
+
+for (var x = (1 - N) / 2; x < N / 2; x++) {
+ for (var z = (1 - N) / 2; z < N / 2; z++) {
+ newCube(x, z);
+ }
+}
+
+
+
+var light = new THREE.PointLight( );
+light.position.set( 3, 2, 5 );
+scene.add( light );
+
+light = new THREE.PointLight( );
+light.position.set( -3, 2, -5 );
+scene.add( light );
+
+
+function drawFrame()
+{
+ scene.rotation.y += 0.005;
+ renderer.render( scene, camera );
+}
+
diff --git a/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/04.js b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/04.js
new file mode 100644
index 0000000..0c7a3f8
--- /dev/null
+++ b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/04.js
@@ -0,0 +1,56 @@
+// Задача: създайте N на брой малки кубчета,
+// пръснати случайно във вътрешността на
+// въображаем куб
+
+var N = 1000; // 1000 кубчета
+
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setAnimationLoop( drawFrame );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+var aspect = window.innerWidth/window.innerHeight;
+var camera = new THREE.PerspectiveCamera( 30, aspect );
+camera.position.set( 6, 7, 20 );
+camera.lookAt( new THREE.Vector3() );
+
+
+// цикъл за създаване на кубчетата
+var geometry = new THREE.BoxGeometry( 0.4, 0.4, 0.4 );
+var material = new THREE.MeshPhongMaterial();
+
+// засега едно кубче, колкото да има нещо
+
+
+
+const cubeSize = 5;
+
+function rndCoord(absMax) {
+ return ((Math.random() < 0.5) ? -1 : 1) * Math.random() * absMax;
+}
+
+for (var i = 0; i < N; i++) {
+ var cube = new THREE.Mesh( geometry, material );
+ cube.position.set ( rndCoord(cubeSize), rndCoord(cubeSize), rndCoord(cubeSize) );
+ scene.add( cube );
+}
+
+
+
+
+var light = new THREE.PointLight( );
+light.position.set( 7, 5, 10 );
+scene.add( light );
+
+light = new THREE.PointLight( );
+light.position.set( -7, 5, -10 );
+scene.add( light );
+
+
+function drawFrame()
+{
+ scene.rotation.y += 0.005;
+ renderer.render( scene, camera );
+}
diff --git a/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/05.js b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/05.js
new file mode 100644
index 0000000..ea3474c
--- /dev/null
+++ b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/05.js
@@ -0,0 +1,59 @@
+// Задача: създайте град в равнината - постройките
+// да са вертикални паралелепипеди със случайна
+// височина
+
+var N = 20; // 10x10 брой "карета" в града
+
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setAnimationLoop( drawFrame );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+var aspect = window.innerWidth/window.innerHeight;
+var camera = new THREE.PerspectiveCamera( 30, aspect );
+camera.position.set( 6, 7, 20 );
+camera.lookAt( new THREE.Vector3() );
+
+
+
+function rndSize(min, max) {
+ return min + Math.random() * (max - min)
+}
+
+var buildingMaterial = new THREE.MeshPhongMaterial();
+
+function createBuilding(x, z) {
+ var width = rndSize(0.25, 0.9);
+ var height = rndSize(0.25, width * 3.1);
+ var depth = rndSize(0.25, 0.9);
+
+ var geometry = new THREE.BoxGeometry( width, height, depth );
+ var building = new THREE.Mesh(geometry, buildingMaterial);
+ building.position.set(x, height / 2, z);
+ scene.add(building);
+}
+
+for (var x = -N / 2; x < N / 2; x++) {
+ for (var z = -N / 2; z < N / 2; z++) {
+ createBuilding(x, z);
+ }
+}
+
+
+
+var light = new THREE.PointLight( );
+light.position.set( 3, 7, 9 );
+scene.add( light );
+
+light = new THREE.PointLight( );
+light.position.set( 3, 7, -9 );
+scene.add( light );
+
+
+function drawFrame()
+{
+ scene.rotation.y += 0.005;
+ renderer.render( scene, camera );
+}
diff --git a/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/06.js b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/06.js
new file mode 100644
index 0000000..2cf5d8f
--- /dev/null
+++ b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/06.js
@@ -0,0 +1,50 @@
+// Задача: направете конструкция, която изглежда
+// като голям куб, от върховете на който са
+// изрязани кубчета във вътрешните върхове на
+// които пък са добавени още по-малки кубчета.
+// Броят геометрични обекти да е под 10.
+
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setAnimationLoop( drawFrame );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+var aspect = window.innerWidth/window.innerHeight;
+var camera = new THREE.PerspectiveCamera( 30, aspect );
+camera.position.set( 12, 14, 28 );
+camera.lookAt( new THREE.Vector3() );
+
+
+
+var material = new THREE.MeshPhongMaterial( );
+
+function newBox(w, h, d) {
+ var geometry = new THREE.BoxGeometry( w, h, d );
+ var obj = new THREE.Mesh( geometry, material );
+ scene.add( obj );
+}
+
+newBox(9, 9, 9);
+newBox(10, 10, 8);
+newBox(8, 10, 10);
+newBox(10, 8, 10);
+
+
+
+var light = new THREE.PointLight( );
+light.position.set( 17, 14, 11 );
+scene.add( light );
+
+light = new THREE.PointLight( );
+light.position.set( -17, -14, -11 );
+scene.add( light );
+
+
+function drawFrame()
+{
+ scene.rotation.x += 0.005;
+ scene.rotation.y += 0.005;
+ renderer.render( scene, camera );
+}
diff --git a/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/prac.html b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/prac.html
new file mode 100644
index 0000000..1c87048
--- /dev/null
+++ b/Year 2/Computer Graphics Fundamentals/02-Practice-10.10.2022/prac.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Practicum</title>
+ </head>
+ <body>
+ <script>
+ const scripts = [
+ [ "S02 E01", "01.js" ],
+ [ "S02 E02", "02.js" ],
+ [ "S02 E03", "03.js" ],
+ [ "S02 E04", "04.js" ],
+ [ "S02 E05", "05.js" ],
+ [ "S02 E06", "06.js" ],
+ ];
+ </script>
+ <script src="https://e55.syndamia.com/three.min.js"></script>
+ <script src="https://e55.syndamia.com/okg-prac-helper.js"></script>
+ </body>
+</html>