Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Computer Graphics Fundamentals / 04-Practice-24.10.2022 / ex04.js
blob: c016e764ea0e78b08dcfdccd920d4a6f06b59edb (plain) (blame)
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
// Задача: направете движещите се сфери да са
// малки лампи (точкови източници на светлина),
// като светят със съответния цвят на сферата


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, 30 );
camera.lookAt( new THREE.Vector3() );

// широка платформа-зема, която ще бъде осветявана
var geometry = new THREE.BoxGeometry( 20, 1, 20 );
var material = new THREE.MeshPhongMaterial();
scene.add( new THREE.Mesh( geometry, material ) );

// списък с цветове
var colors = ['red','blue','yellow'];

// създаване на сфери 
var balls=[];
var geometry = new THREE.SphereGeometry( 1, 16, 16 );
for (var i=0; i<3; i++)
{
	// създаване на 3 сфери със съответен цвят
	var material = new THREE.MeshPhongMaterial( {color: colors[i]} );
	balls[i] = new THREE.Mesh( geometry, material );
	scene.add( balls[i] );
}

// обща светлина отгоре - да бъде премахната,
// но да се сложат три цветни светлини от
// трите сфери
// var light = new THREE.PointLight();
// light.position.set( 0, 10, 0 );
// scene.add( light );

for (var i = 0; i < balls.length; i++)
	balls[i].add(new THREE.PointLight(colors[i]));

var t=0;
function drawFrame()
{
	// въртене на сцената, за да не е скучно
	scene.rotation.y += 0.001;

	// псевдотаймер за движение на сферите
	t += 0.005;

	// движение на едната сфера
	balls[0].position.x = 10*Math.cos(2.5*t);
	balls[0].position.y = 2.5+1*Math.sin(2.4*t);
	balls[0].position.z = 10*Math.cos(1.9*t);;

	// движение на другата
	balls[1].position.x = 10*Math.cos(2.1*t);
	balls[1].position.y = 2.5+1*Math.cos(2.5*t);
	balls[1].position.z = 10*Math.sin(2.2*t);;

	// движение и на третата
	balls[2].position.x = 10*Math.sin(1.8*t);
	balls[2].position.y = 2.5+1*Math.sin(2.6*t);
	balls[2].position.z = 10*Math.cos(2.6*t);;

	renderer.render( scene, camera );
}